annotate src/compass_ops.asm @ 642:a9a0188091e4

fix rare upgrade issue with OSTC sport 2019 hardware
author heinrichsweikamp
date Thu, 14 Jan 2021 16:24:07 +0100
parents 4050675965ea
children 7d8a4c60ec1a 5b7fe7777425
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1 ;=============================================================================
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
2 ;
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
3 ; File compass_ops.asm combined next generation V3.09.5
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
4 ;
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
5 ; Compass Operations
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
6 ;
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
8 ;=============================================================================
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
9
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
10 #include "hwos.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
11 #include "i2c.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
12 #include "tft_outputs.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
13 #include "tft.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
14 #include "strings.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
15 #include "wait.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
16 #include "surfmode.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
17 #include "divemode.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
18 #include "math.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
19 #include "convert.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
20 #include "start.inc"
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
21 #include "colorschemes.inc"
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
22
0
heinrichsweikamp
parents:
diff changeset
23
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
24 IFDEF _compass
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
25
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
26
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
27 ; local flags
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
28 #DEFINE compass_show_cardinal compass_flags,0 ; =1: show the cardinal (N, NE, E, ...)
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
29 #DEFINE compass_bearing_eq compass_flags,1 ; =1: bearing is in direction, do not show << or >>
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
30 #DEFINE compass_bearing_lft compass_flags,2 ; =1: bearing is to the left/<<, =0: to the right/>>
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
31 #DEFINE compass_bearing_vis compass_flags,3 ; =1: bearing is visible (either ahead or behind/-180°)
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
32 #DEFINE compass_bearing_ahd compass_flags,4 ; =1: bearing is ahead, =0: behind
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
33 ; compass_flags,5 ; --- unused
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
34 ; compass_flags,6 ; --- unused
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
35 ; compass_flags,7 ; --- unused
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
36
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
37
0
heinrichsweikamp
parents:
diff changeset
38 ; Make sure symbols from the .inc are available to the C code:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
39
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
40 ; filtered data - Compass
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
41 global compass_DX_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
42 global compass_DY_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
43 global compass_DZ_f
0
heinrichsweikamp
parents:
diff changeset
44
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
45 ; filtered Data - Accelerometer
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
46 global accel_DX_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
47 global accel_DY_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
48 global accel_DZ_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
49
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
50 ; Calibration Data
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
51 global compass_CX_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
52 global compass_CY_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
53 global compass_CZ_f
0
heinrichsweikamp
parents:
diff changeset
54
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
55 ; Temporary Values to pass Q15 Arithmetics around
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
56 global compass_a
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
57 global compass_b
0
heinrichsweikamp
parents:
diff changeset
58
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
59 ; Result
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
60 global compass_heading_new
0
heinrichsweikamp
parents:
diff changeset
61
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
62
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
63 extern compass
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
64 extern compass_reset_calibration
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
65 extern compass_add_calibration
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
66 extern compass_solve_calibration
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
67
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
68 extern option_check_and_store_all
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
69
337
508d7fb98b34 cleanup menu, add "Auto SP" option (Not working yet), minor layout change in compass menu
heinrichsweikamp
parents: 300
diff changeset
70
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
71 ;=============================================================================
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
72 compass_ops1 CODE
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
73 ;=============================================================================
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
74
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
75
0
heinrichsweikamp
parents:
diff changeset
76 ;-----------------------------------------------------------------------------
heinrichsweikamp
parents:
diff changeset
77 ; Filter compass values
heinrichsweikamp
parents:
diff changeset
78 ;
heinrichsweikamp
parents:
diff changeset
79 ; Apply linear filtering to input parameters.
heinrichsweikamp
parents:
diff changeset
80
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
81 ; Apply filtering formula: reg_f += (reg - reg_f) / 4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
82 FILTER16 MACRO reg, reg_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
83 movf reg_f+0,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
84 subwf reg+0,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
85 movwf PRODL
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
86 movf reg_f+1,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
87 subwfb reg+1,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
88 rcall filter_16_common
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
89 addwf reg_f+0,F
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
90 movf PRODH,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
91 addwfc reg_f+1,F
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
92 ENDM
148
022b886eddaf some cleanup
heinrichsweikamp
parents: 147
diff changeset
93
022b886eddaf some cleanup
heinrichsweikamp
parents: 147
diff changeset
94 filter_16_common:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
95 movwf PRODH
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
96 bcf STATUS,C ; copy sign bit into carry
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
97 btfsc PRODH,7
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
98 bsf STATUS,C
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
99 rrcf PRODH,F ; 16 bit shift right
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
100 rrcf PRODL,F
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
101 bcf STATUS,C ; copy sign bit into carry
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
102 btfsc PRODH,7
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
103 bsf STATUS,C
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
104 rrcf PRODH,F ; 16 bit shift right
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
105 rrcf PRODL,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
106 return
0
heinrichsweikamp
parents:
diff changeset
107
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
108
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
109 global compass_filter
0
heinrichsweikamp
parents:
diff changeset
110 compass_filter:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
111 banksel compass_DX ; select bank common2
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
112 FILTER16 compass_DX, compass_DX_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
113 FILTER16 compass_DY, compass_DY_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
114 FILTER16 compass_DZ, compass_DZ_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
115 FILTER16 accel_DX, accel_DX_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
116 FILTER16 accel_DY, accel_DY_f
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
117 FILTER16 accel_DZ, accel_DZ_f
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
118 banksel common ; back to bank common
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
119 return
0
heinrichsweikamp
parents:
diff changeset
120
heinrichsweikamp
parents:
diff changeset
121
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
122 ;=============================================================================
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
123 compass_ops2 CODE
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
124 ;=============================================================================
0
heinrichsweikamp
parents:
diff changeset
125
heinrichsweikamp
parents:
diff changeset
126 ;-----------------------------------------------------------------------------
heinrichsweikamp
parents:
diff changeset
127 ; Q15 fractional numbers: a * b / 2**16 (UNSIGNED)
heinrichsweikamp
parents:
diff changeset
128 ;
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
129 ; Uses 16x16->16 multiply, for positive integers, keeping only the most
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
130 ; relevant bits.
0
heinrichsweikamp
parents:
diff changeset
131 ;
heinrichsweikamp
parents:
diff changeset
132 ; Used to multiply two Q15 numbers, in the range 0..1,
heinrichsweikamp
parents:
diff changeset
133 ; represented as 0..32767, that is a / 2**15.
heinrichsweikamp
parents:
diff changeset
134 ;
heinrichsweikamp
parents:
diff changeset
135 ; (a/2**15) * (b/2**15) = a*b / 2**30 = (a*b/2**16) / 2**14.
heinrichsweikamp
parents:
diff changeset
136 ; So to get back a Q15 number, we need a shift-left...
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
137
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
138 global compass_umul ; called from compass.c
0
heinrichsweikamp
parents:
diff changeset
139 compass_umul:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
140 banksel compass_a ; select bank common2
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
141 rcall compass_mul_16
0
heinrichsweikamp
parents:
diff changeset
142
heinrichsweikamp
parents:
diff changeset
143 ; The 2x time, by left-shifting inserting the missing bit:
heinrichsweikamp
parents:
diff changeset
144 compass_mul_2:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
145 rlcf compass_r+2,F ; missing bit into carry
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
146 rlcf compass_r+0,F
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
147 rlcf compass_r+1,F
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
148 MOVII compass_r,PROD ; return value into PROD
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
149 return
0
heinrichsweikamp
parents:
diff changeset
150
heinrichsweikamp
parents:
diff changeset
151 ; The 16x16-> multiply:
heinrichsweikamp
parents:
diff changeset
152 compass_mul_16:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
153 movf compass_a+1,W ; block ah*bh
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
154 mulwf compass_b+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
155 movff PRODL,compass_r+0 ; and copy
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
156 movff PRODH,compass_r+1
0
heinrichsweikamp
parents:
diff changeset
157
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
158 movf compass_a+0,W ; block al*bl
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
159 mulwf compass_b+0
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
160 movff PRODH,compass_r+2 ; into fraction byte
0
heinrichsweikamp
parents:
diff changeset
161
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
162 movf compass_a+1,W ; block ah*bl
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
163 mulwf compass_b+0
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
164 movf PRODL,W
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
165 addwf compass_r+2,F ; fraction part to carry
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
166 movf PRODH,W ; and add16
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
167 addwfc compass_r+0,F
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
168 movlw 0
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
169 addwfc compass_r+1,F
0
heinrichsweikamp
parents:
diff changeset
170
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
171 movf compass_a+0,W ; block al*bh
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
172 mulwf compass_b+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
173 movf PRODL,W
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
174 addwf compass_r+2,F ; fraction part to carry
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
175 movf PRODH,W ; and add16
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
176 addwfc compass_r+0,F
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
177 movlw 0
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
178 addwfc compass_r+1,F
0
heinrichsweikamp
parents:
diff changeset
179
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
180 return
0
heinrichsweikamp
parents:
diff changeset
181
heinrichsweikamp
parents:
diff changeset
182 ;-----------------------------------------------------------------------------
heinrichsweikamp
parents:
diff changeset
183 ; Q15 fractional numbers: a * b / 2**16 (SIGNED)
heinrichsweikamp
parents:
diff changeset
184
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
185 global compass_imul ; called from compass.c
0
heinrichsweikamp
parents:
diff changeset
186 compass_imul:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
187 banksel compass_a ; select bank common2
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
188 rcall compass_mul_16
0
heinrichsweikamp
parents:
diff changeset
189
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
190 btfss compass_b+1,7
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
191 bra compass_mul_3
0
heinrichsweikamp
parents:
diff changeset
192
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
193 movf compass_a+0,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
194 subwf compass_r+0,F
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
195 movf compass_a+1,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
196 subwfb compass_r+1,F
0
heinrichsweikamp
parents:
diff changeset
197
heinrichsweikamp
parents:
diff changeset
198 compass_mul_3:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
199 btfss compass_a+1,7
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
200 bra compass_mul_4
0
heinrichsweikamp
parents:
diff changeset
201
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
202 movf compass_b+0,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
203 subwf compass_r+0,F
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
204 movf compass_b+1,W
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
205 subwfb compass_r+1,F
0
heinrichsweikamp
parents:
diff changeset
206
heinrichsweikamp
parents:
diff changeset
207 compass_mul_4:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
208 bcf compass_r+1,6 ; copy bit 7 to 6, so keep it after 2x
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
209 btfsc compass_r+1,7
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
210 bsf compass_r+1,6
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
211 bra compass_mul_2
0
heinrichsweikamp
parents:
diff changeset
212
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
213
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
214 ;=============================================================================
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
215 compass_ops3 CODE
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
216 ;=============================================================================
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
217
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
218 global compass_calibration
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
219 compass_calibration: ; compass calibration
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
220 bsf block_sensor_interrupt ; disable sensor interrupts
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
221 call I2C_sleep_compass ; stop compass
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
222 call TFT_ClearScreen ; clear the screen
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
223 ; Mask
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
224 WIN_STD .16,.0 ; set position
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
225 FONT_COLOR color_greenish ; set font color
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
226 STRCPY_TEXT_PRINT tCompassCalibration
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
227 btfss switch_right2 ; wait until button (with a moving magnet in some OSTC!) is released
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
228 bra $-2
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
229
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
230 ; WIN_SMALL .0,.215
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
231 ; FONT_COLOR color_standard
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
232 ; STRCPY_TEXT_PRINT tExit
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
233 WAITMS d'255'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
234 WAITMS d'255'
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
235
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
236 call request_speed_fastest ; request CPU speed change to fastest speed
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
237
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
238 movlw .7 ; initialize gain
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
239 movff WREG,opt_compass_gain ; ...
428
eccae727702f some cleanup
heinrichsweikamp
parents: 386
diff changeset
240
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
241 movlw .60 ; initialize timeout to 60 seconds
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
242 movwf isr_timeout_reload ; copy WREG to isr_timeout_reload
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
243 bsf restart_timeout ; request ISR to restart the timeout
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
244 bcf trigger_timeout ; clear any pending timeout trigger
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
245 compass_calibration_gainset: ; reduce the gain, set bank here!
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
246 banksel opt_compass_gain ; select bank options table
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
247 decf opt_compass_gain,F ; reduce by one
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
248 btfsc STATUS,N ; < 0 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
249 clrf opt_compass_gain ; YES - keep at zero
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
250 btfsc STATUS,N ; < 0 ?
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
251 bra compass_calibration_loop1 ; YES - skip gain stuff (Would hang here in case of compass failure)
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
252 banksel common ; bank to bank common
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
253
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
254 call I2C_init_compass ; initialize compass chip
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
255
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
256 btfsc compass_type3 ; compass type 3 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
257 bra compass_calibration_loop1 ; YES - skip gain stuff
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
258 btfsc compass_type2 ; compass type 2 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
259 bra compass_calibration_loop1 ; YES - skip gain stuff
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
260
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
261 rcall TFT_compass_show_gain ; show the current compass gain
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
262
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
263 WAITMS d'250'
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
264 WAITMS d'250' ; wait for first reading...
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
265
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
266 movlw .60 ; calibration shall run for 60 seconds
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
267 call restart_timeout_time ; restart the timeout
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
268
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
269 call I2C_RX_compass ; read compass
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
270 call I2C_RX_accelerometer ; read accelerometer
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
271
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
272 ; Test all axes for +4096 (Hi byte=16)
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
273 banksel compass_DX ; select bank common2
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
274 movlw .16
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
275 cpfseq compass_DX+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
276 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
277 bra compass_calibration_gainset
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
278 cpfseq compass_DY+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
279 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
280 bra compass_calibration_gainset
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
281 cpfseq compass_DZ+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
282 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
283 bra compass_calibration_gainset
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
284
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
285 ; Test all axes for -4096 (Hi byte=240)
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
286 movlw .240
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
287 cpfseq compass_DX+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
288 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
289 bra compass_calibration_gainset
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
290 cpfseq compass_DY+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
291 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
292 bra compass_calibration_gainset
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
293 cpfseq compass_DZ+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
294 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
295 bra compass_calibration_gainset
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
296
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
297 compass_calibration_loop1: ; done with gain
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
298 banksel common ; bank to bank common
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
299 rcall compass_filter_init ; set DX_f values
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
300 call compass_reset_calibration ; reset CX_f values (C-code)
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
301 banksel common ; back to bank common
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
302
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
303 compass_calibration_loop2:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
304 call I2C_RX_compass ; read compass
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
305 call I2C_RX_accelerometer ; test accelerometer
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
306 call compass_filter ; filter compass raw data
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
307
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
308 ; Twice
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
309 call I2C_RX_compass ; read compass
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
310 call I2C_RX_accelerometer ; test accelerometer
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
311 call compass_filter ; filter compass raw data
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
312
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
313 ; btfsc compass_type1 ; compass1?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
314 ; bra compass_calibration_loop3 ; YES - skip gain stuff
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
315
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
316 ; Test all axes for +4096 (Hi byte=16)
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
317 banksel compass_DX ; select bank common2
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
318 movlw .16
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
319 cpfseq compass_DX+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
320 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
321 bra compass_calibration_gainset
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
322 cpfseq compass_DY+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
323 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
324 bra compass_calibration_gainset
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
325 cpfseq compass_DZ+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
326 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
327 bra compass_calibration_gainset
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
328
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
329 ; Test all axes for -4096 (Hi byte=240)
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
330 movlw .240
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
331 cpfseq compass_DX+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
332 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
333 bra compass_calibration_gainset
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
334 cpfseq compass_DY+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
335 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
336 bra compass_calibration_gainset
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
337 cpfseq compass_DZ+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
338 bra $+4
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
339 bra compass_calibration_gainset
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
340 banksel common ; back to bank common
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
341
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
342 ; ; Three
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
343 ; call I2C_RX_compass ; read compass
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
344 ; call I2C_RX_accelerometer ; test accelerometer
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
345 ; call compass_filter ; filter compass raw data
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
346 ;
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
347 ; ; Four times to get cleaner values
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
348 ; call I2C_RX_compass ; read compass
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
349 ; call I2C_RX_accelerometer ; test accelerometer
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
350 ; call compass_filter ; filter compass raw data
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
351
428
eccae727702f some cleanup
heinrichsweikamp
parents: 386
diff changeset
352 compass_calibration_loop3:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
353 ; and register only one value out of four:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
354 call compass_add_calibration ; check and store new max/min values (C-code)
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
355 banksel common ; back to bank common
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
356
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
357 rcall TFT_compass_fast ; show values
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
358 btfsc trigger_timeout ; timeout (calibration done)?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
359 bra compass_calibration_exit ; YES - done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
360 btfss trigger_full_second ; NO - new second begun?
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
361 bra compass_calibration_loop2 ; NO - loop
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
362 bcf trigger_full_second ; YES - clear flag
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
363 rcall TFT_show_timeout_testmode ; - show remaining time
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
364 bra compass_calibration_loop2 ; - loop
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
365
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
366 compass_calibration_exit:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
367 bcf block_sensor_interrupt ; re-enable sensor interrupts
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
368
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
369 call compass_solve_calibration ; calculate calibration factors (C-code)
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
370 banksel common ; back to bank common
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
371
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
372 call request_speed_normal ; request CPU speed change to normal speed
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
373
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
374 bsf option_changed ; flag that option values have changed
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
375 bsf restart_fast ; request to skip logos and waits on restart
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
376
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
377 movlw .6 ; coding for surface compass view
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
378 movff WREG,customview_surfmode ; set to compass view to show
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
379
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
380 goto restart ; done
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
381
147
fdd4e30846ae some cleanup
heinrichsweikamp
parents: 0
diff changeset
382
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
383 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
384 ; Helper Function
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
385 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
386 compass_filter_init:
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
387 MOVII compass_DX,compass_DX_f
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
388 MOVII compass_DY,compass_DY_f
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
389 MOVII compass_DZ,compass_DZ_f
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
390
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
391 MOVII accel_DX,accel_DX_f
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
392 MOVII accel_DY,accel_DY_f
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
393 MOVII accel_DZ,accel_DZ_f
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
394 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
395
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
396 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
397 ; Show Calibration Progress
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
398 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
399 TFT_compass_fast:
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
400 WIN_TINY .0,.50 ; set font and position
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
401 FONT_COLOR_MEMO ; set font color
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
402
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
403 STRCPY "Cx:" ; print label
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
404 MOVII compass_DX,mpr ; get value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
405 rcall TFT_compass_fast_helper ; print value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
406
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
407 STRCAT " Cy:" ; print label
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
408 MOVII compass_DY,mpr ; get value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
409 rcall TFT_compass_fast_helper ; print value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
410
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
411 STRCAT " Cz:" ; print label
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
412 MOVII compass_DZ,mpr ; get value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
413 rcall TFT_compass_fast_helper ; print value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
414
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
415 PRINT ; dump to screen
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
416
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
417 WIN_TINY .0,.104 ; set font and position
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
418 FONT_COLOR_MEMO ; set font color
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
419
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
420 STRCPY "Ax:" ; print label
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
421 MOVII accel_DX,mpr ; get value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
422 rcall TFT_compass_fast_helper ; print value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
423
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
424 STRCAT " Ay:" ; print label
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
425 MOVII accel_DY,mpr ; get value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
426 rcall TFT_compass_fast_helper ; print value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
427
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
428 STRCAT " Az:" ; print label
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
429 MOVII accel_DZ,mpr ; get value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
430 rcall TFT_compass_fast_helper ; print value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
431
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
432 PRINT ; dump to screen
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
433 return ; done
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
434
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
435
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
436 TFT_compass_fast_helper:
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
437 call convert_signed_16bit ; convert lo:hi into unsigned-short and add '-' to POSTINC2 if required
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
438 btfsc neg_flag ; is value negative?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
439 bra TFT_compass_fast_helper1; YES - print value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
440 PUTC '+' ; NO - print a plus sign first
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
441 TFT_compass_fast_helper1:
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
442 output_65535 ; print value (0-65535)
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
443 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
444
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
445
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
446
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
447 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
448 ; Show remaining Calibration Time
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
449 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
450 TFT_show_timeout_testmode:
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
451 WIN_TINY .0,.68 ; set font and position
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
452 FONT_COLOR_MEMO ; set font color
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
453 STRCPY "T:" ; print label
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
454 movff isr_timeout_timer,lo ; get remaining time
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
455 output_256 ; print remaining time (xxx)
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
456 PUTC_PRINT "s" ; append unit and dump to screen
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
457 return ; done
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
458
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
459
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
460 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
461 ; Show current Compass Gain
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
462 ;
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
463 TFT_compass_show_gain: ; show the current compass gain
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
464 ; movff opt_compass_gain,lo ; 0-7 (230 LSB/Gauss to 1370 LSB/Gauss)
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
465 ; tstfsz lo
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
466 ; return ; do not show unless gain > 0
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
467 WIN_TINY .0,.86 ; set font and position
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
468 FONT_COLOR_MEMO ; set font color
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
469 STRCPY_TEXT tCompassGain ; print label
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
470 movff opt_compass_gain,lo ; get value: 0-7 (230 LSB/Gauss to 1370 LSB/Gauss)
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
471 output_99 ; print value (xx)
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
472 PRINT ; dump to screen
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
473 return ; done
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
474
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
475
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
476 ;=============================================================================
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
477 compass_ops4 CODE
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
478 ;=============================================================================
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
479
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
480 ;-----------------------------------------------------------------------------
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
481 ; Mask for Compass in Surface Mode
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
482 ;
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
483 global TFT_surface_compass_mask
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
484 TFT_surface_compass_mask:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
485 WIN_SMALL surf_compass_mask_column,surf_compass_mask_row
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
486 FONT_COLOR_MEMO ; set font color
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
487 STRCPY_TEXT_PRINT tHeading ; print "Heading:"
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
488 return ; done
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
489
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
490
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
491 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
492 ; Compass Display in Surface Mode
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
493 ;
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
494 global TFT_surface_compass_heading
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
495 TFT_surface_compass_heading:
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
496 call compass_heading_common ; compute heading
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
497 WIN_STD surf_compass_head_column,surf_compass_head_row
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
498
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
499 TFT_surface_compass_heading_com: ; show "000° N"
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
500 FONT_COLOR_MEMO ; set default / dive-mode standard color
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
501 movff compass_heading_new+1,WREG ; get upper byte of actual heading
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
502 btfsc WREG,7 ; compass calibrated?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
503 bra TFT_compass_uncalibrated ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
504 MOVII compass_heading_shown,mpr ; get heading to be shown
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
505 rcall TFT_compass_helper ; show heading and its cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
506 btfsc divemode ; in dive mode?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
507 return ; YES - done for dive mode
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
508 ; in surface mode - shall show bearing?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
509 btfss compass_bearing_set ; is a bearing set?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
510 return ; NO - done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
511 btfsc compass_menu ; is the "set bearing" selection shown?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
512 return ; YES - done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
513 ; show bearing
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
514 WIN_SMALL surf_compass_bear_column,surf_compass_bear_row
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
515 FONT_COLOR color_yellow ; set font color
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
516 MOVII compass_bearing,mpr ; get bearing
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
517 ;bra TFT_compass_helper ; show number and cardinal and return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
518
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
519 TFT_compass_helper:
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
520 output_999 ; print bearing
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
521 STRCAT "° " ; append unit and a space
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
522 call tft_compass_cardinal ; append cardinal buffer
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
523 PRINT ; dump to screen
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
524 return ; done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
525
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
526 TFT_compass_uncalibrated:
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
527 STRCAT_PRINT "---°" ; print "---°"
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
528 return ; done
382
6f3530eb48f9 allow compass bearing on surface
heinrichsweikamp
parents: 371
diff changeset
529
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
530
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
531 ;=============================================================================
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
532 compass_ops5 CODE
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
533 ;=============================================================================
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
534
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
535
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
536 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
537 ; Mask for Compass in Dive Mode
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
538 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
539 global TFT_dive_compass_mask ; draws the white box around the heading tape
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
540 TFT_dive_compass_mask:
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
541 WIN_FRAME_STD dm_custom_compass_graph_row, dm_custom_compass_graph_row+dm_custom_compass_graph_height, .0, .159
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
542 return
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
543
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
544
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
545 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
546 ; Compass Display in Dive Mode
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
547 ;
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
548 global TFT_dive_compass_heading
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
549 TFT_dive_compass_heading:
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
550 call compass_heading_common ; compute heading
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
551
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
552 ; ; ### for development only, hard-coding the bearing ###
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
553 ; ; 244° : SW - W
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
554 ; MOVLI .244,xA ; xA used as temp
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
555 ; MOVII xA,compass_bearing ; compass_bearing is stored in bank isr_backup
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
556
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
557 FONT_SIZE FT_SMALL ; set font size
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
558 MOVII compass_heading_shown,xA ; get heading
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
559 ; 160° viewing angle: add +360 offset if xA <= 292 for non-negative scale
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
560 MOVLI .292,sub_a
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
561 MOVII xA, sub_b
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
562 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
563 btfsc neg_flag ; xA > 292 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
564 bra TFT_dive_compass_heading_1 ; YES
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
565 ADDLI .360,xA ; NO - add offset
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
566 TFT_dive_compass_heading_1:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
567 SUBLI .80,xA ; subtract 80 (left pixel offset from the center)
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
568 MOVII xA,xRD ; save result to xRD
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
569 ADDLI .160,xA ; add 160 (display with in pixels)
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
570 MOVII xA,xRDr ; save result to xRDr
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
571
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
572 btfss compass_bearing_set ; is a bearing set?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
573 bra TFT_dive_compass_ruler ; NO - skip next calculations
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
574 MOVII xRDr,sub_a ; YES - calculate xRD180 = xRDr - 180
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
575 MOVLI .180,sub_b
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
576 call subU16 ; sub_c = sub_a - sub_b
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
577 MOVII sub_c,xRD180
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
578
258
da9074180bff patch for bearing issue
heinrichsweikamp
parents: 257
diff changeset
579 TFT_dive_compass_bearing_1:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
580 ; calculate bearing position and visibility (ahead or behind)
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
581 bcf compass_bearing_vis ; default is not-visible
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
582 bcf compass_bearing_ahd ; default is behind
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
583 MOVII compass_bearing,xA
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
584 ADDLI .360,xA ; calculate the bearing virtual display offset
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
585 MOVII xA,divA ; save it for reuse for upper/lower turns and ahead/behind checks
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
586
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
587 ; check if bearing is ahead
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
588 MOVII divA,sub_a ; load the bearing offset into sub_a
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
589 MOVII xRD, sub_b ; load the display offset back to sub_b
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
590 rcall TFT_dive_compass_bearing_ap
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
591 btfsc compass_bearing_vis ; bearing visible?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
592 bra TFT_dive_compass_bearing_dir; YES
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
593
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
594 ; check if it is ahead with an upper turn
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
595 MOVII divA,sub_a ; load the bearing offset into sub_a
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
596 MOVII xRD, sub_b ; load the display offset back to sub_b
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
597 ADDLI .360,sub_b
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
598 rcall TFT_dive_compass_bearing_ap
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
599 btfsc compass_bearing_vis ; bearing visible?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
600 bra TFT_dive_compass_bearing_dir; YES
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
601
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
602 ; check if it is ahead with a lower turn
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
603 MOVII divA,sub_a ; load the bearing offset into sub_a
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
604 ADDLI .360,sub_a
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
605 MOVII xRD, sub_b ; load the display offset back to sub_b
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
606 rcall TFT_dive_compass_bearing_ap
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
607 btfsc compass_bearing_vis ; bearing visible?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
608 bra TFT_dive_compass_bearing_dir; YES
258
da9074180bff patch for bearing issue
heinrichsweikamp
parents: 257
diff changeset
609
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
610 ; marker is not ahead of us, check if it is behind of us
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
611 ; use the (160 - (xRD180 - xCM)) formula to see if it's on the display
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
612 MOVII xRD180,sub_a ; load the display offset back to sub_a
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
613 MOVII divA, sub_b ; load the marker's offset into sub_b
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
614 rcall TFT_dive_compass_bearing_bp
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
615 btfsc compass_bearing_vis ; bearing behind of us?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
616 bra TFT_dive_compass_bearing_dir; YES
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
617
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
618 ; check if it is behind with the upper turn
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
619 MOVII xRD180,sub_a
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
620 MOVII divA, sub_b
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
621 ADDLI .360, sub_b
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
622 rcall TFT_dive_compass_bearing_bp
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
623 btfsc compass_bearing_vis ; bearing behind of us?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
624 bra TFT_dive_compass_bearing_dir; YES
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
625
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
626 ; check if it is behind with the lower turn
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
627 MOVII xRD180,sub_a
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
628 ADDLI .360, sub_a
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
629 MOVII divA, sub_b ; load the marker's offset into sub_b
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
630 rcall TFT_dive_compass_bearing_bp
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
631 bra TFT_dive_compass_bearing_dir
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
632
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
633 TFT_dive_compass_bearing_ap:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
634 ; xCM received in sub_a
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
635 ; xRD received in sub_b
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
636 ; 1/a. check if it's viewable from the left side
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
637 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
638 btfsc neg_flag ; xRD > divA ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
639 return ; NO - done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
640 MOVII sub_c,xC ; YES - store the RO=RP-RD for drawing
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
641 ; 1/b. check if it's viewable from the right side
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
642 ADDLI .2,sub_a ; avoid thin mess on the side of the display
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
643 ADDLI .158,sub_b ; load the display offset right side into sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
644 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
645 btfss neg_flag ; xRDr > xA(+2) ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
646 return ; NO - done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
647 ; YES - print the bearing lines on the screen
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
648 movff xC+0,xCM
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
649 bsf compass_bearing_vis ; set visible
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
650 bsf compass_bearing_ahd ; set ahead
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
651 return ; done
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
652
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
653 TFT_dive_compass_bearing_bp:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
654 ; use the (160 - (xRD180 - xCM)) formula to see if it's on the display
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
655 ; the marker's offset received in sub_b
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
656 ; the xRD180 display offset received in sub_a
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
657 ; xRD180 - xCM
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
658 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
659 btfsc neg_flag ; CM > xRD180 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
660 return ; NO - not on screen, done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
661 ; YES - check 160 - (X)
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
662 MOVLI .158, sub_a ; 158 to avoid thin mess on the side of the display
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
663 MOVII sub_c,sub_b
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
664 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
665 btfsc neg_flag ; X > 160 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
666 return ; NO - not on screen, done
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
667 ; check if not overflow - this sounds like a double check...
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
668 tstfsz sub_c+1 ; high byte = 0 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
669 return ; NO - sub_c must be > 160 then, done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
670 movlw d'158' ; YES - load a 158
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
671 cpfslt sub_c+0 ; - low byte < 158 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
672 return ; NO - done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
673 movff sub_c+0,xCM ; YES - print the bearing lines on the screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
674 bsf compass_bearing_vis ; - flag to show bearing lines
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
675 return ; - done
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
676
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
677 TFT_dive_compass_bearing_dir:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
678 ; check if bearing to heading, and calculate the direction
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
679 bcf compass_bearing_eq
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
680 btfss compass_bearing_vis
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
681 bra TFT_dive_compass_bearing_lr
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
682 btfss compass_bearing_ahd
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
683 bra TFT_dive_compass_bearing_lr
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
684 movff xCM,xA+0
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
685 movlw d'80'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
686 cpfseq xA+0
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
687 bra TFT_dive_compass_bearing_lr
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
688 bsf compass_bearing_eq
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
689 bra TFT_dive_compass_ruler ; bearing points to heading, no signs are required, go to the ruler
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
690
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
691 TFT_dive_compass_bearing_lr:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
692 ; get the bearing virtual display offset
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
693 MOVII compass_bearing,xA
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
694 ; xA = xA > 292 ? xA : xA+360
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
695 MOVLI .292,sub_a
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
696 MOVII xA, sub_b
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
697 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
698 btfsc neg_flag ; xA > 292 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
699 bra TFT_dive_compass_bearing_lr_1; YES
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
700 ADDLI .360,xA ; NO - add 360
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
701
258
da9074180bff patch for bearing issue
heinrichsweikamp
parents: 257
diff changeset
702 TFT_dive_compass_bearing_lr_1:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
703 ; 1. calculate whether bearing is to left or to right
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
704 bsf compass_bearing_lft ; to the left by default
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
705 ; xC: save center value to compare the direction to front value
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
706 MOVII xA,xC
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
707 ; xB: we need the left side for comparison... left = -180
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
708 MOVII xA, sub_a
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
709 MOVLI .180,sub_b
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
710 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
711 MOVII sub_c,xB ; xB has the left side of the 180° distance center
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
712 ; xA = xRD > (xC+100) ? RD-280 : xRD+80
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
713 MOVII xC, sub_a
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
714 ADDLI .100,sub_a
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
715 MOVII xRD, sub_b
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
716 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
717 btfsc neg_flag ; xRD > xC + 100 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
718 bra TFT_dive_compass_bearing_lr_2; YES - xA = xRD - 280
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
719 ; NO - xA = xRD + 80
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
720 MOVII xRD,xA
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
721 ADDLI .80,xA
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
722 bra TFT_dive_compass_bearing_lr_c
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
723
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
724 TFT_dive_compass_bearing_lr_2:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
725 MOVII xRD,sub_a
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
726 MOVLI .280,sub_b
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
727 call subU16 ; sub_c = sub_a - sub_b
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
728 MOVII sub_c,xA
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
729 ;bra TFT_dive_compass_bearing_lr_c
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
730
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
731 TFT_dive_compass_bearing_lr_c:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
732 ; xB < xA < xC => right, otherwise left (default)
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
733 MOVII xA,sub_b
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
734 MOVII xB,sub_a
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
735 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
736 btfss neg_flag ; xA > xB ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
737 bra TFT_dive_compass_ruler ; NO - xB >= xA, keep default left
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
738 MOVII xA,sub_a
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
739 MOVII xC,sub_b
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
740 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
741 btfss neg_flag ; xC > xA ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
742 bra TFT_dive_compass_ruler ; NO - xA >= xC, keep default left
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
743 bcf compass_bearing_lft
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
744
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
745 TFT_dive_compass_ruler:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
746 ; calculate mod15 for the ticks
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
747 MOVII xRD,xA
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
748 MOVLI .15,xB
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
749 call div16x16 ; xA/xB=xC with xA+0 as remainder
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
750 ; check the remainder
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
751 movlw d'0'
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
752 cpfsgt xA+0 ; mod15 > 0 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
753 bra TFT_dive_compass_ruler_1 ; NO - RM = 0
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
754 ; YES - RM = 15 - RDmod15
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
755 movlw d'15'
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
756 subfwb xA+0,F
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
757 TFT_dive_compass_ruler_1:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
758 movff xA+0,lo ; xA+0 holds the RM, store it to 'lo'
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
759 clrf hi ; initialize DD to zero, store it to 'hi'
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
760
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
761 TFT_dive_compass_ruler_loop:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
762 ; 1. check if we run out of the display
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
763 movlw d'159' ; looks like 159 works because TFT_box limits the display
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
764 cpfslt lo,1
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
765 bra TFT_dive_compass_ruler_lend ; xRM >= W
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
766 ; 2. Clear the tick area from DD to RM - in segments to avoid blinking
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
767 ; don't do a clear if we are at 0 (zero) otherwise it will blink
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
768 ; because of the width underflow
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
769 movlw d'0'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
770 cpfsgt lo,1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
771 bra TFT_dive_compass_ruler_loop_zz
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
772 rcall TFT_dive_compass_clr_ruler
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
773 TFT_dive_compass_ruler_loop_zz:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
774 ; 3. Draw the markers @ RM
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
775 ; we receive RM in lo and DD in hi
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
776 movlw d'2'
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
777 movwf win_bargraph ; set with of ticks
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
778 movwf win_width+0
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
779 clrf win_width+1
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
780 movff lo,win_leftx2 ; 0..159
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
781 movlw dm_custom_compass_tick_top_top
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
782 movwf win_top ; set position for upper ticks
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
783 movlw dm_custom_compass_tick_height
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
784 movwf win_height ; set hight of ticks
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
785 movf pallet_color_memo,W ; select color
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
786 BOX_COLOR ; draw tick
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
787 movlw dm_custom_compass_tick_bot_top
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
788 movwf win_top ; set position for lower ticks
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
789 movlw dm_custom_compass_tick_height
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
790 movwf win_height ; set hight of ticks
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
791 movf pallet_color_memo,W ; select color
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
792 BOX_COLOR ; draw tick
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
793 ; 4. If D < 82 and RM > 79: means we put something over the center line,
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
794 ; so redraw the center line
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
795 movlw d'82'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
796 cpfslt hi,1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
797 bra TFT_dive_compass_ruler_loop_zz2
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
798 movlw d'79'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
799 cpfsgt lo,1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
800 bra TFT_dive_compass_ruler_loop_zz2
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
801 ; enough to print center line as bearing marker is not in the ticker area
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
802 rcall TFT_dive_compass_c ; draw center line in yellow
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
803 TFT_dive_compass_ruler_loop_zz2:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
804 ; 5. set D = RM + 2 : position after the 2px tick
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
805 movff lo,hi
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
806 movlw d'2'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
807 addwf hi,F
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
808 ; 6. set RM = RM + 15 : position to the next tick
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
809 movlw d'15'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
810 addwf lo,F
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
811 ; 7. loop
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
812 bra TFT_dive_compass_ruler_loop
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
813
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
814 TFT_dive_compass_ruler_lend: ; loop end
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
815 ; 8. clear the rest of the tick area if D < 160
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
816 movlw d'160'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
817 cpfslt hi
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
818 bra TFT_dive_compass_labels ; D >= W
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
819 ; 9. position left to end of display to clear the remaining area
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
820 movlw d'159'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
821 movwf lo
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
822 ; 10. clear it
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
823 rcall TFT_dive_compass_clr_ruler
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
824
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
825 TFT_dive_compass_labels:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
826 ; done with the compass ruler, put the labels on the screen
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
827 FONT_COLOR_MEMO ; set dive-mode standard color
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
828 clrf hi ; hi stores the display position
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
829 movff hi,xHI ; bank-safe clear of xHI
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
830 clrf lo ; lo stores the last item's display position
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
831 movff lo,xLO ; bank-safe clear of xLO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
832 MOVLI .219,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
833 MOVII xRD, sub_b ; get the RD back to sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
834 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
835 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
836 bra dcr_1 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
837 STRCPY_TEXT_PRINT tSW ; YES - print it
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
838 dcr_1:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
839 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
840 MOVLI .267,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
841 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
842 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
843 bra dcr_2 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
844 STRCPY_TEXT_PRINT tW ; YES - print it
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
845 dcr_2:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
846 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
847 MOVLI .309,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
848 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
849 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
850 bra dcr_3 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
851 STRCPY_TEXT_PRINT tNW ; YES - print it
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
852 dcr_3:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
853 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
854 MOVLI .358,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
855 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
856 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
857 bra dcr_4 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
858 STRCPY_TEXT_PRINT tN ; YES - print it
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
859 dcr_4:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
860 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
861 MOVLI .399,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
862 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
863 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
864 bra dcr_5 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
865 STRCPY_TEXT_PRINT tNE ; YES - print it
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
866 dcr_5:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
867 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
868 MOVLI .448,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
869 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
870 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
871 bra dcr_6 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
872 STRCPY_TEXT_PRINT tE ; YES - print it
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
873 dcr_6:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
874 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
875 MOVLI .489,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
876 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
877 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
878 bra dcr_7 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
879 STRCPY_TEXT_PRINT tSE ; YES - print it
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
880 dcr_7:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
881 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
882 MOVLI .538,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
883 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
884 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
885 bra dcr_8 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
886 STRCPY_TEXT_PRINT tS ; YES - print it
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
887 dcr_8:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
888 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
889 MOVLI .579,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
890 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
891 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
892 bra dcr_9 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
893 STRCPY_TEXT_PRINT tSW ; YES - print it
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
894 dcr_9:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
895 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
896 MOVLI .627,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
897 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
898 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
899 bra dcr_10 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
900 STRCPY_TEXT_PRINT tW ; YES - print it
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
901 dcr_10:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
902 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
903 MOVLI .669,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
904 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
905 btfss compass_show_cardinal ; shall show cardinal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
906 bra dcr_11 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
907 STRCPY_TEXT_PRINT tNW ; YES - print it
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
908 dcr_11:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
909 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
910 MOVLI .718,sub_a ; position of the cardinal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
911 rcall TFT_dive_compass_label_proc ; check if the cardinal shall be on screen
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
912 btfss compass_show_cardinal ; shall show?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
913 bra dcr_12 ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
914 STRCPY_TEXT_PRINT tN ; YES - print it
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
915 dcr_12:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
916 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
917
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
918 TFT_dive_compass_label_end:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
919 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
920 ; restore lo and hi for the final cleanup
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
921 movff xLO,lo ; xLO and xHI are stored in bank isr_backup
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
922 movff xHI,hi
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
923 ; clear the rest of the SQ area if there is more space
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
924 movlw d'159'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
925 cpfslt hi
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
926 bra TFT_dive_compass_label_end2 ; D >= 160, no more space
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
927 ; position left to end of display to clear the remaining area
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
928 movlw d'158'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
929 movwf lo
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
930 ; clear it
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
931 rcall TFT_dive_compass_clr_label
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
932 TFT_dive_compass_label_end2:
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
933 rcall TFT_dive_compass_c_mk ; check if cardinal is on the center line or the marker
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
934 ; do we have bearing set?
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
935 btfsc compass_bearing_set ; bearing set?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
936 bra TFT_dive_compass_dir_text ; YES - print the direction (<< or >>)
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
937 rcall TFT_dive_compass_dir_lclr ; NO - clear the area (e.g. we had but removed)
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
938 rcall TFT_dive_compass_dir_rclr
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
939 bra TFT_dive_compass_text
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
940
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
941 TFT_dive_compass_dir_text:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
942 ; bearing set, but does it point to heading?
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
943 btfss compass_bearing_eq
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
944 bra TFT_dive_compass_dir_text_2 ; bearing != heading - go and print the direction
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
945 rcall TFT_dive_compass_dir_lclr ; bearing == heading - no need for direction markers
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
946 rcall TFT_dive_compass_dir_rclr
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
947 bra TFT_dive_compass_text
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
948
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
949 TFT_dive_compass_dir_text_2:
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
950 FONT_COLOR color_green
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
951 btfsc compass_bearing_lft
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
952 bra TFT_dive_compass_dir_ldir ; bearing_lft=1, print the left marker
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
953 ;TFT_dive_compass_text_rdir:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
954 WIN_SMALL dm_custom_compass_rdir_column, dm_custom_compass_head_row-.2
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
955 STRCPY_PRINT ">>"
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
956 rcall TFT_dive_compass_dir_lclr ; do not forget to clear the left
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
957 bra TFT_dive_compass_text
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
958
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
959 TFT_dive_compass_dir_ldir:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
960 WIN_SMALL dm_custom_compass_ldir_column, dm_custom_compass_head_row-.2
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
961 STRCPY_PRINT "<<"
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
962 rcall TFT_dive_compass_dir_rclr ; do not forget to clear the right
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
963 ;bra TFT_dive_compass_text
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
964
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
965 TFT_dive_compass_text:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
966 ; Clear some unused space on the right mH
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
967 WIN_BOX_BLACK dm_custom_compass_tick_top_bot+.1,dm_custom_compass_tick_bot_top-.1,.158,.159 ; top, bottom, left, right
371
fec5eec4c8b7 fix some display issues with display1
heinrichsweikamp
parents: 370
diff changeset
968
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
969 ; Text output
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
970 WIN_SMALL dm_custom_compass_head_column, dm_custom_compass_head_row
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
971 call TFT_surface_compass_heading_com ; show "xxx° N"
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
972 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
973
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
974 TFT_dive_compass_dir_lclr:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
975 WIN_SMALL dm_custom_compass_ldir_column, dm_custom_compass_head_row-.2
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
976 STRCPY_PRINT " "
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
977 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
978
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
979 TFT_dive_compass_dir_rclr:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
980 WIN_SMALL dm_custom_compass_rdir_column, dm_custom_compass_head_row-.2
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
981 STRCPY_PRINT " "
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
982 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
983
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
984 TFT_dive_compass_label_proc:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
985 movlw d'14'
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
986 movwf up ; cardinal width in px
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
987 bcf compass_show_cardinal
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
988 ; 1/a. check if it's viewable ? sub_a(RP) >= sub_b(RD) ?
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
989 ; set the carry flag if sub_b(xRD) is equal to or greater than sub_a(xRP):
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
990 MOVII xRD,sub_b
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
991 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
992 btfsc neg_flag ; >= 0 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
993 return ; NO
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
994 ; store the RO=RP-RD for drawing
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
995 MOVII sub_c,xC
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
996
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
997 ; 1/b. check if it's viewable ? sub_a(RP)+up(width) < sub_b(RD)+160
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
998 ; if already above, no need to process the rest of the labels
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
999 movff up,WREG ; take care about the width
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1000 addwf sub_a+0,1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1001 btfsc STATUS, C
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1002 incf sub_a+1
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1003
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1004 MOVII xRDr,sub_b
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1005 call subU16 ; sub_c = sub_a - sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1006 btfss neg_flag ; < 0 ?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1007 bra TFT_dive_compass_label_end ; NO
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1008
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1009 ; 2. restore RO=RP-RD from 1/a.
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1010 movff xC+0,lo
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1011
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1012 ; 3. Clear the segment from DD(hi) to lo
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1013 ; don't do a clear if we are at 0 (zero) otherwise it will blink
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1014 ; ?because of the width underflow?
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1015 movlw d'1'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1016 cpfsgt lo
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1017 bra TFT_dive_compass_label_proc_p
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1018 rcall TFT_dive_compass_clr_label
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1019 TFT_dive_compass_label_proc_p:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1020 ; 4. print the SQ on the screen
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1021 FONT_COLOR_MEMO
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1022 bsf compass_show_cardinal
257
5dd0f39d05d4 minor speed and size improvements for the compass routine
heinrichsweikamp
parents: 256
diff changeset
1023 ;TFT_dive_compass_label_print:
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1024 movlw dm_custom_compass_label_row ; set output position
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1025 movff WREG,win_top ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1026 movff lo,win_leftx2 ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1027 FONT_SIZE FT_SMALL ; set font size
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1028 ; 6. retain the new display positions
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1029 movff lo,hi
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1030 movff up,WREG
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1031 addwf hi,F
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1032 movff lo,xLO
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1033 movff hi,xHI
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1034 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1035
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1036 TFT_dive_compass_c_mk:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1037 ; Common task to draw center line and marker
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1038 ; until a proper implementation make it simple:
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1039 rcall TFT_dive_compass_mk
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1040 TFT_dive_compass_c:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1041 movlw color_yellow
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1042 WIN_BOX_COLOR dm_custom_compass_tick_top_top, dm_custom_compass_tick_bot_bot,.80,.81 ; center line in yellow
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1043 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1044
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1045 TFT_dive_compass_mk:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1046 ; draw the bearing on the screen if visible and if we just put something over it
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1047 btfss compass_bearing_set ; bearing set?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1048 return ; NO - done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1049 btfss compass_bearing_vis ; YES - bearing visible?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1050 return ; NO - bearing set but not visible, done
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1051
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1052 ; save lo/hi from trashing
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1053 MOVII mpr,xA
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1054
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1055 ; did we just update the marker's position?
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1056 ; DD.......DD
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1057 ; CM+2>=DD(old) or CM-2<=DD
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1058 ; ToDo
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1059
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1060 btfss compass_bearing_ahd
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1061 bra TFT_dive_compass_mk_rear
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1062 ;TFT_dive_compass_mk_front:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1063 clrf lo
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1064 movff xCM,lo
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1065 bsf compass_show_cardinal ; set=green marker
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1066 rcall TFT_dive_compass_mk_print
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1067 bcf compass_show_cardinal
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1068 bra TFT_dive_compass_mk_end
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1069
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1070 TFT_dive_compass_mk_rear:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1071 clrf lo
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1072 movff xCM,lo
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1073 bcf compass_show_cardinal ; set=red marker
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1074 rcall TFT_dive_compass_mk_print
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1075
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1076 TFT_dive_compass_mk_end:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1077 MOVII xA,mpr
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1078 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1079
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1080 TFT_dive_compass_mk_print:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1081 movlw d'1'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1082 cpfsgt lo
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1083 bra TFT_dive_compass_mk_print_2 ; lo <= 1, skip the first line
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1084 movlw d'2'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1085 subwf lo,0
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1086 ; movff WREG,win_leftx2
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1087 rcall TFT_dive_compass_mk_print_3
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1088 TFT_dive_compass_mk_print_2:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1089 ; save hi/lo
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1090 MOVII mpr,divA
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1091 ; clear the middle of the bearing marker
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1092 movff lo,hi
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1093 movlw d'2'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1094 addwf lo,1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1095 rcall TFT_dive_compass_clr_label
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1096 ; restore hi/lo
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1097 MOVII divA,mpr
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1098 ; print a dot on the middle
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1099 movf lo,W
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1100 rcall TFT_dive_compass_mk_print_dot
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1101 ; finally print the right marker line
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1102 movlw d'2'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1103 addwf lo,0
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1104 ; rcall TFT_dive_compass_mk_print_3
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1105 ; return
257
5dd0f39d05d4 minor speed and size improvements for the compass routine
heinrichsweikamp
parents: 256
diff changeset
1106 TFT_dive_compass_mk_print_3:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1107 movwf win_leftx2
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1108 movlw dm_custom_compass_label_row
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1109 movwf win_top
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1110 movlw dm_custom_compass_label_height-.2
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1111 movwf win_height
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1112 bra TFT_dive_compass_mk_print_4
264
9dbdb060d44c Fix compass ruler's missing bottom ticks; Clear between the bearing marker lines and draw a dot.
janos_kovacs <kovjanos@gmail.com>
parents: 259
diff changeset
1113 TFT_dive_compass_mk_print_dot:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1114 movwf win_leftx2
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1115 movlw dm_custom_compass_label_row + .9
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1116 movwf win_top
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1117 movlw d'4'
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1118 movwf win_height
264
9dbdb060d44c Fix compass ruler's missing bottom ticks; Clear between the bearing marker lines and draw a dot.
janos_kovacs <kovjanos@gmail.com>
parents: 259
diff changeset
1119 TFT_dive_compass_mk_print_4:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1120 movlw .158
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1121 cpfslt win_leftx2
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1122 bra TFT_dive_compass_mk_print_5
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1123 movlw d'2'
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1124 movwf win_bargraph
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1125 movwf win_width+0
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1126 clrf win_width+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1127 movlw color_green
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1128 btfss compass_show_cardinal
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1129 movlw color_red ; select color
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1130 BOX_COLOR ; draw box
371
fec5eec4c8b7 fix some display issues with display1
heinrichsweikamp
parents: 370
diff changeset
1131 TFT_dive_compass_mk_print_5:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1132 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1133
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1134 TFT_dive_compass_clr_label:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1135 movlw dm_custom_compass_label_row-.2 ; set top & height
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1136 movwf win_top
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1137 movlw dm_custom_compass_label_height+.2
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1138 movwf win_height
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1139 rcall TFT_dive_compass_clear
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1140 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1141
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1142 TFT_dive_compass_clr_ruler:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1143 ; top tick
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1144 movlw dm_custom_compass_tick_top_top ; set top & height
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1145 movwf win_top
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1146 movlw dm_custom_compass_tick_height
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1147 movwf win_height
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1148 rcall TFT_dive_compass_clear
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1149 ;bottom tick
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1150 movlw dm_custom_compass_tick_bot_top ; set top & height
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1151 movwf win_top
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1152 movlw dm_custom_compass_tick_height
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1153 movwf win_height
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1154 ; rcall TFT_dive_compass_clear
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1155 ; return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1156 TFT_dive_compass_clear:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1157 ; we receive RM in lo and DD in hi
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1158 ; calculate width = RM-D
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1159 movf hi,W
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1160 subwf lo,W
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1161 bz TFT_dive_compass_clear3 ; do nothing if there is nothing to do
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1162 movwf win_width+0 ; RM-DD
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1163 movwf win_bargraph
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1164 clrf win_width+1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1165 movlw .1
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1166 cpfsgt win_width+0
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1167 bra TFT_dive_compass_clear3 ; do not clear a single pixel (or less)
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1168 movff hi,win_leftx2
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1169 movlw color_black ; select color
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1170 BOX_COLOR ; draw box
370
67e631aa5b8c debugging the compass screen
heinrichsweikamp
parents: 337
diff changeset
1171 TFT_dive_compass_clear3:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1172 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1173
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1174 tft_compass_cardinal:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1175 btfsc hi,0 ; heading > 255° ?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1176 bra tft_compass_cardinal2 ; YES - must be W, NW or N
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1177 ; NO - must be W, SW, S, SE, E, NE or N
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1178 movlw .23
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1179 subwf lo,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1180 btfss STATUS,C
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1181 bra tft_compass_cardinal_N
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1182 movlw .68
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1183 subwf lo,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1184 btfss STATUS,C
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1185 bra tft_compass_cardinal_NE
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1186 movlw .113
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1187 subwf lo,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1188 btfss STATUS,C
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1189 bra tft_compass_cardinal_E
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1190 movlw .158
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1191 subwf lo,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1192 btfss STATUS,C
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1193 bra tft_compass_cardinal_SE
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1194 movlw .203
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1195 subwf lo,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1196 btfss STATUS,C
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1197 bra tft_compass_cardinal_S
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1198 movlw .248
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1199 subwf lo,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1200 btfss STATUS,C
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1201 bra tft_compass_cardinal_SW
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1202 bra tft_compass_cardinal_W
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1203
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1204 tft_compass_cardinal2:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1205 movlw .37
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1206 subwf lo,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1207 btfss STATUS,C
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1208 bra tft_compass_cardinal_W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1209 movlw .82
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1210 subwf lo,W
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1211 btfss STATUS,C
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1212 bra tft_compass_cardinal_NW
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1213 ; bra tft_compass_cardinal_N
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1214
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1215 tft_compass_cardinal_N:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1216 STRCAT_TEXT tN
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1217 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1218 tft_compass_cardinal_NE:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1219 STRCAT_TEXT tNE
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1220 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1221 tft_compass_cardinal_E:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1222 STRCAT_TEXT tE
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1223 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1224 tft_compass_cardinal_SE:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1225 STRCAT_TEXT tSE
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1226 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1227 tft_compass_cardinal_S:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1228 STRCAT_TEXT tS
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1229 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1230 tft_compass_cardinal_SW:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1231 STRCAT_TEXT tSW
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1232 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1233 tft_compass_cardinal_W:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1234 STRCAT_TEXT tW
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1235 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1236 tft_compass_cardinal_NW:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1237 STRCAT_TEXT tNW
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1238 return
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1239
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1240 ;=============================================================================
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1241 compass_ops6 CODE
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1242 ;=============================================================================
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1243
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1244 ;-----------------------------------------------------------------------------
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1245 ; get and process heading
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1246 ;
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1247 compass_heading_common:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1248 btfss compass_enabled ; compass enabled?
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1249 bra compass_heading_common_zero ; NO
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1250
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1251 ; Get an averaged new heading
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1252 movlw compass_averaging ; number of averaging cycles
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1253 movwf up ; initialize loop counter
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1254 compass_heading_common_1:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1255 call I2C_RX_compass ; test compass
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1256 call I2C_RX_accelerometer ; test accelerometer
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1257 call compass_filter ; filter raw compass + accelerometer readings
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1258 decfsz up,F ; decrement loop counter, done?
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1259 bra compass_heading_common_1 ; NO - loop
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1260
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1261 call compass ; do compass correction (C-code)
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1262 banksel common ; back to bank common
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1263
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1264 ; Check for calibration and change
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1265 MOVII compass_heading_shown,sub_a ; transfer shown heading to sub_a
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1266 MOVII compass_heading_new, sub_b ; transfer new heading to sub_b
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1267
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1268 btfsc sub_b+1,7 ; valid compass calibration?
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1269 bra compass_heading_common_zero ; NO
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1270
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1271 movf sub_a+0,W ; get shown heading, low byte
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1272 cpfseq sub_b+0 ; compare with new heading, low byte, equal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1273 bra compass_heading_common_2 ; NO - not equal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1274 movf sub_a+1,W ; get shown heading, high byte
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1275 cpfseq sub_b+1 ; compare with new heading, high byte, equal?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1276 bra compass_heading_common_2 ; NO - not equal
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1277 return ; YES - done
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1278
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1279 compass_heading_common_2:
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1280 ; turn both headings such that compass_heading_new points to 0°
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1281 call subU16 ; sub_c = compass_heading_shown - compass_heading_new
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1282 btfss neg_flag ; was compass_heading_new in 1st halve?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1283 bra compass_heading_common_3 ; YES - check where compass_heading_shown is now
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1284 MOVLI .360, sub_a ; NO - overturned, need to turn back to match 360°
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1285 MOVII sub_c,sub_b ; - move overturned compass_heading_new to sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1286 call subU16 ; - sub_c = angle between overturned compass_heading_shown and 360°
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1287 compass_heading_common_3:
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1288 ; check if turned compass_heading_shown is in 1st or 2nd halve
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1289 MOVII sub_c,sub_a ; sub_a = turned compass_heading_shown
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1290 MOVLI .180, sub_b ; sub_b = begin of 2nd halve
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1291 call cmpU16 ; check (turned compass_heading_shown) - 180°
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1292 btfss neg_flag ; result negative?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1293 bra compass_heading_common_5 ; NO - in 2nd halve, increment towards compass_heading_new
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1294 ;bra compass_heading_common_4 ; YES - in 1st halve, decrement towards compass_heading_new
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1295
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1296 compass_heading_common_4:
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1297 ; decrement compass_heading_shown towards compass_heading_new
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1298 rcall compass_heading_stepsize_2 ; calculate step size and put it into sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1299 MOVII compass_heading_shown,sub_a ; transfer unturned shown heading to sub_a
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1300 call subU16 ; decrement heading: sub_c = compass_heading_shown - step size
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1301 btfss neg_flag ; did an under-run occur?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1302 bra compass_heading_common_6 ; NO - store result
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1303 MOVLI .360, sub_a ; YES - wrap around 360°
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1304 MOVII sub_c,sub_b ; - transfer decrement result to sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1305 call subU16 ; - wrap decrement result around
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1306 bra compass_heading_common_6 ; - store wrapped result
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1307
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1308 compass_heading_common_5:
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1309 ; increment compass_heading_shown towards compass_heading_new
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1310 rcall compass_heading_stepsize_1 ; calculate step size and put it into sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1311 MOVII compass_heading_shown,sub_a ; transfer unturned shown heading to sub_a
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1312 call addU16 ; increment heading: sub_c = compass_heading_shown + step size
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1313 MOVII sub_c,sub_a ; transfer increment result to sub_a
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1314 MOVLI .360, sub_b ; load wrap-around threshold
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1315 call subU16 ; calculate if over-run occurred
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1316 btfss neg_flag ; did an over-run occur?
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1317 bra compass_heading_common_6 ; YES - store already wrapped-around result
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1318 MOVII sub_a,sub_c ; NO - retrieve former straight increment result
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1319 bra compass_heading_common_6 ; - store wrapped result
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1320
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1321 compass_heading_common_zero:
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1322 CLRI sub_c ; set heading to 0°
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1323 ;bra compass_heading_common_6 ; store heading
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1324
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1325 compass_heading_common_6:
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1326 MOVII sub_c,compass_heading_shown ; store new shown heading
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1327 return ; done
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1328
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1329 compass_heading_stepsize_1:
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1330 ; turn heading difference (180...359) into a step size
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1331 MOVLI .360, sub_a ; load 360°
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1332 MOVII sub_c,sub_b ; load difference
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1333 call subU16 ; sub_c = 360 - difference (i.e. 1...180 now)
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1334 compass_heading_stepsize_2:
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1335 ; turn heading difference (1...180) into a step size
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1336 bcf STATUS,C ; clear carry
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1337 rrcf sub_c+0 ; heading difference /= 2
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1338 bcf STATUS,C ; clear carry
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1339 rrcf sub_c+0 ; heading difference /= 2, total /= 4 now
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1340 incf sub_c+0,f ; final += 1 to have one increment / decrement at least
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1341 MOVII sub_c,sub_b ; transfer result to sub_b
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1342 return
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
1343
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 621
diff changeset
1344 ENDIF ; _compass
256
5b4ef0b9090d place compass display code into compass_ops.asm
heinrichsweikamp
parents: 214
diff changeset
1345
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1346 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
1347
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 574
diff changeset
1348 END