annotate src/ghostwriter.asm @ 75:b808fa26a9a1

change log
author heinrichsweikamp
date Tue, 11 Feb 2014 13:02:11 +0100
parents e4e91fe8b09d
children 53a99a2dc6a1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
heinrichsweikamp
parents:
diff changeset
1 ;=============================================================================
heinrichsweikamp
parents:
diff changeset
2 ;
heinrichsweikamp
parents:
diff changeset
3 ; File ghostwriter.asm
heinrichsweikamp
parents:
diff changeset
4 ;
heinrichsweikamp
parents:
diff changeset
5 ; Ghostwriter (Log profile recorder)
heinrichsweikamp
parents:
diff changeset
6 ;
heinrichsweikamp
parents:
diff changeset
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
heinrichsweikamp
parents:
diff changeset
8 ;=============================================================================
heinrichsweikamp
parents:
diff changeset
9 ; HISTORY
heinrichsweikamp
parents:
diff changeset
10 ; 2011-11-27 : [mH] Creation
heinrichsweikamp
parents:
diff changeset
11
heinrichsweikamp
parents:
diff changeset
12 #include "ostc3.inc" ; Mandatory header
heinrichsweikamp
parents:
diff changeset
13 #include "shared_definitions.h" ; Mailbox from/to p2_deco.c
heinrichsweikamp
parents:
diff changeset
14 #include "external_flash.inc"
heinrichsweikamp
parents:
diff changeset
15 #include "surfmode.inc"
heinrichsweikamp
parents:
diff changeset
16 #include "eeprom_rs232.inc"
heinrichsweikamp
parents:
diff changeset
17 #include "strings.inc"
heinrichsweikamp
parents:
diff changeset
18 #include "isr.inc"
heinrichsweikamp
parents:
diff changeset
19 #include "tft_outputs.inc"
heinrichsweikamp
parents:
diff changeset
20 #include "divemode.inc"
heinrichsweikamp
parents:
diff changeset
21
heinrichsweikamp
parents:
diff changeset
22 ghostwriter CODE
heinrichsweikamp
parents:
diff changeset
23
heinrichsweikamp
parents:
diff changeset
24 global store_dive_data
heinrichsweikamp
parents:
diff changeset
25 store_dive_data: ; 5 seconds gone
heinrichsweikamp
parents:
diff changeset
26 bcf store_sample ; update only any 5 seconds
heinrichsweikamp
parents:
diff changeset
27
heinrichsweikamp
parents:
diff changeset
28 ifndef __DEBUG
heinrichsweikamp
parents:
diff changeset
29 btfsc simulatormode_active ; Are we in simulator mode?
heinrichsweikamp
parents:
diff changeset
30 return ; Yes, discard everything
heinrichsweikamp
parents:
diff changeset
31 endif
heinrichsweikamp
parents:
diff changeset
32
35
eca4a201d8cf change apnea timeout, do no longer store apnea dives in logbook
heinrichsweikamp
parents: 23
diff changeset
33 btfsc FLAG_apnoe_mode ; In Apnoe mode?
eca4a201d8cf change apnea timeout, do no longer store apnea dives in logbook
heinrichsweikamp
parents: 23
diff changeset
34 return ; Yes, discard everything
eca4a201d8cf change apnea timeout, do no longer store apnea dives in logbook
heinrichsweikamp
parents: 23
diff changeset
35
0
heinrichsweikamp
parents:
diff changeset
36 SAFE_2BYTE_COPY rel_pressure, lo
heinrichsweikamp
parents:
diff changeset
37 movf lo,W ; store depth with every sample
35
eca4a201d8cf change apnea timeout, do no longer store apnea dives in logbook
heinrichsweikamp
parents: 23
diff changeset
38 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
0
heinrichsweikamp
parents:
diff changeset
39 movf hi,W
35
eca4a201d8cf change apnea timeout, do no longer store apnea dives in logbook
heinrichsweikamp
parents: 23
diff changeset
40 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
0
heinrichsweikamp
parents:
diff changeset
41
heinrichsweikamp
parents:
diff changeset
42 ;First, find out how many bytes will append to this sample....
heinrichsweikamp
parents:
diff changeset
43 clrf ProfileFlagByte ; clear number of bytes to append
heinrichsweikamp
parents:
diff changeset
44
heinrichsweikamp
parents:
diff changeset
45 ; Check Extented informations
heinrichsweikamp
parents:
diff changeset
46 decfsz divisor_temperature,W ; Check divisor
heinrichsweikamp
parents:
diff changeset
47 bra check_extended1
heinrichsweikamp
parents:
diff changeset
48 movlw infolength_temperature
heinrichsweikamp
parents:
diff changeset
49 addwf ProfileFlagByte,F ; add to ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
50 check_extended1:
heinrichsweikamp
parents:
diff changeset
51 decfsz divisor_deco,W ; Check divisor
heinrichsweikamp
parents:
diff changeset
52 bra check_extended2
heinrichsweikamp
parents:
diff changeset
53 movlw infolength_deco
heinrichsweikamp
parents:
diff changeset
54 addwf ProfileFlagByte,F ; add to ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
55 check_extended2:
heinrichsweikamp
parents:
diff changeset
56 decfsz divisor_gf,W ; Check divisor
heinrichsweikamp
parents:
diff changeset
57 bra check_extended3
heinrichsweikamp
parents:
diff changeset
58 movlw infolength_gf
heinrichsweikamp
parents:
diff changeset
59 addwf ProfileFlagByte,F ; add to ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
60 check_extended3:
heinrichsweikamp
parents:
diff changeset
61 decfsz divisor_ppo2_sensors,W ; Check divisor
heinrichsweikamp
parents:
diff changeset
62 bra check_extended4
heinrichsweikamp
parents:
diff changeset
63 movlw infolength_ppo2_sensors
heinrichsweikamp
parents:
diff changeset
64 addwf ProfileFlagByte,F ; add to ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
65 check_extended4:
heinrichsweikamp
parents:
diff changeset
66 decfsz divisor_decoplan,W ; Check divisor
heinrichsweikamp
parents:
diff changeset
67 bra check_extended5
heinrichsweikamp
parents:
diff changeset
68 movlw infolength_decoplan
heinrichsweikamp
parents:
diff changeset
69 addwf ProfileFlagByte,F ; add to ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
70 check_extended5:
heinrichsweikamp
parents:
diff changeset
71 decfsz divisor_cns,W ; Check divisor
heinrichsweikamp
parents:
diff changeset
72 bra check_extended6
heinrichsweikamp
parents:
diff changeset
73 movlw infolength_cns
heinrichsweikamp
parents:
diff changeset
74 addwf ProfileFlagByte,F ; add to ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
75 check_extended6:
heinrichsweikamp
parents:
diff changeset
76 decfsz divisor_tank,W ; Check divisor
heinrichsweikamp
parents:
diff changeset
77 bra check_extended7
heinrichsweikamp
parents:
diff changeset
78 movlw infolength_tank
heinrichsweikamp
parents:
diff changeset
79 addwf ProfileFlagByte,F ; add to ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
80 check_extended7:
heinrichsweikamp
parents:
diff changeset
81
heinrichsweikamp
parents:
diff changeset
82 ; Second, check global event flag
heinrichsweikamp
parents:
diff changeset
83 btfss event_occured ; Check global event flag
heinrichsweikamp
parents:
diff changeset
84 bra store_dive_data3 ; No Event
heinrichsweikamp
parents:
diff changeset
85 incf ProfileFlagByte,F ; add one byte (The EventByte)
heinrichsweikamp
parents:
diff changeset
86
heinrichsweikamp
parents:
diff changeset
87 clrf EventByte ; reset EventByte
heinrichsweikamp
parents:
diff changeset
88
heinrichsweikamp
parents:
diff changeset
89 movf AlarmType,W ; Type of Alarm Bit 0-3
heinrichsweikamp
parents:
diff changeset
90 addwf EventByte,F ; Copy to EventByte Bit 0-3
heinrichsweikamp
parents:
diff changeset
91 clrf AlarmType ; Reset AlarmType
heinrichsweikamp
parents:
diff changeset
92
heinrichsweikamp
parents:
diff changeset
93 ; Third, check events and add aditional bytes
heinrichsweikamp
parents:
diff changeset
94 btfss gas6_changed ; Check flag
heinrichsweikamp
parents:
diff changeset
95 bra check_event2
heinrichsweikamp
parents:
diff changeset
96 movlw d'2' ; Information length
heinrichsweikamp
parents:
diff changeset
97 addwf ProfileFlagByte,F ; add to ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
98 bsf EventByte,4 ; Also set Flag in EventByte!
heinrichsweikamp
parents:
diff changeset
99 check_event2:
heinrichsweikamp
parents:
diff changeset
100 btfss stored_gas_changed ; Check flag
heinrichsweikamp
parents:
diff changeset
101 bra check_event3
heinrichsweikamp
parents:
diff changeset
102 movlw d'1' ; Information length
heinrichsweikamp
parents:
diff changeset
103 addwf ProfileFlagByte,F ; add to ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
104 bsf EventByte,5 ; Also set Flag in EventByte!
heinrichsweikamp
parents:
diff changeset
105 check_event3:
heinrichsweikamp
parents:
diff changeset
106 btfss setpoint_changed ; Check flag
heinrichsweikamp
parents:
diff changeset
107 bra check_event4
heinrichsweikamp
parents:
diff changeset
108 movlw d'1' ; Information length
heinrichsweikamp
parents:
diff changeset
109 addwf ProfileFlagByte,F ; add to ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
110 bsf EventByte,6 ; Also set Flag in EventByte!
heinrichsweikamp
parents:
diff changeset
111 check_event4:
heinrichsweikamp
parents:
diff changeset
112 ; more events?
heinrichsweikamp
parents:
diff changeset
113 bsf ProfileFlagByte,7 ; Set EventByte Flag in ProfileFlagByte
heinrichsweikamp
parents:
diff changeset
114
heinrichsweikamp
parents:
diff changeset
115 store_dive_data3:
heinrichsweikamp
parents:
diff changeset
116 movf ProfileFlagByte,W ; finally, write ProfileFlagByte!
heinrichsweikamp
parents:
diff changeset
117 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
118
heinrichsweikamp
parents:
diff changeset
119 btfss event_occured ; Check global event flag (again)
heinrichsweikamp
parents:
diff changeset
120 bra store_dive_data4 ; No Event
heinrichsweikamp
parents:
diff changeset
121
heinrichsweikamp
parents:
diff changeset
122 ; Store the EventByte + additional bytes now
heinrichsweikamp
parents:
diff changeset
123 movf EventByte,W
heinrichsweikamp
parents:
diff changeset
124 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
125
heinrichsweikamp
parents:
diff changeset
126 btfss gas6_changed ; Check flag
heinrichsweikamp
parents:
diff changeset
127 bra store_dive_data3b
heinrichsweikamp
parents:
diff changeset
128 movff char_I_O2_ratio,WREG
heinrichsweikamp
parents:
diff changeset
129 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
130 movff char_I_He_ratio,WREG
heinrichsweikamp
parents:
diff changeset
131 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
132 bcf gas6_changed ; Clear this event
heinrichsweikamp
parents:
diff changeset
133 store_dive_data3b:
heinrichsweikamp
parents:
diff changeset
134 btfss stored_gas_changed ; Check flag
heinrichsweikamp
parents:
diff changeset
135 bra store_dive_data3c
heinrichsweikamp
parents:
diff changeset
136 movf active_gas,W ; Store active gas
heinrichsweikamp
parents:
diff changeset
137 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
138 bcf stored_gas_changed ; Clear this event
heinrichsweikamp
parents:
diff changeset
139 store_dive_data3c:
heinrichsweikamp
parents:
diff changeset
140 btfss setpoint_changed ; Check flag
heinrichsweikamp
parents:
diff changeset
141 bra store_dive_data3d
heinrichsweikamp
parents:
diff changeset
142 movff char_I_const_ppO2,WREG
heinrichsweikamp
parents:
diff changeset
143 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
144 bcf setpoint_changed ; Clear this event
heinrichsweikamp
parents:
diff changeset
145 store_dive_data3d:
heinrichsweikamp
parents:
diff changeset
146
heinrichsweikamp
parents:
diff changeset
147 store_dive_data4:
heinrichsweikamp
parents:
diff changeset
148
heinrichsweikamp
parents:
diff changeset
149 ; Store extended informations
heinrichsweikamp
parents:
diff changeset
150 decfsz divisor_temperature,F ; Check divisor
heinrichsweikamp
parents:
diff changeset
151 bra store_extended1
heinrichsweikamp
parents:
diff changeset
152 rcall store_dive_temperature
heinrichsweikamp
parents:
diff changeset
153 store_extended1:
heinrichsweikamp
parents:
diff changeset
154 decfsz divisor_deco,F ; Check divisor
heinrichsweikamp
parents:
diff changeset
155 bra store_extended2
heinrichsweikamp
parents:
diff changeset
156 rcall store_dive_decodata
heinrichsweikamp
parents:
diff changeset
157 store_extended2:
heinrichsweikamp
parents:
diff changeset
158 decfsz divisor_gf,F ; Check divisor
heinrichsweikamp
parents:
diff changeset
159 bra store_extended3
heinrichsweikamp
parents:
diff changeset
160 rcall store_dive_gf
heinrichsweikamp
parents:
diff changeset
161 store_extended3:
heinrichsweikamp
parents:
diff changeset
162 decfsz divisor_ppo2_sensors,F ; Check divisor
heinrichsweikamp
parents:
diff changeset
163 bra store_extended4
heinrichsweikamp
parents:
diff changeset
164 rcall store_dive_ppO2_sensors
heinrichsweikamp
parents:
diff changeset
165 store_extended4:
heinrichsweikamp
parents:
diff changeset
166 decfsz divisor_decoplan,F ; Check divisor
heinrichsweikamp
parents:
diff changeset
167 bra store_extended5
heinrichsweikamp
parents:
diff changeset
168 rcall store_dive_decoplan
heinrichsweikamp
parents:
diff changeset
169 store_extended5:
heinrichsweikamp
parents:
diff changeset
170 decfsz divisor_cns,F ; Check divisor
heinrichsweikamp
parents:
diff changeset
171 bra store_extended6
heinrichsweikamp
parents:
diff changeset
172 rcall store_dive_cns
heinrichsweikamp
parents:
diff changeset
173 store_extended6:
heinrichsweikamp
parents:
diff changeset
174 decfsz divisor_tank,F ; Check divisor
heinrichsweikamp
parents:
diff changeset
175 bra store_extended7
heinrichsweikamp
parents:
diff changeset
176 rcall store_dive_tank
heinrichsweikamp
parents:
diff changeset
177 store_extended7:
heinrichsweikamp
parents:
diff changeset
178
heinrichsweikamp
parents:
diff changeset
179 ; The next block is required to take care of "store never"
heinrichsweikamp
parents:
diff changeset
180 btfsc divisor_temperature,7 ; Test highest Bit (Register must have been zero before the "decfsz" command!)
heinrichsweikamp
parents:
diff changeset
181 clrf divisor_temperature ; And clear register again, so it will never reach zero...
heinrichsweikamp
parents:
diff changeset
182 btfsc divisor_deco,7
heinrichsweikamp
parents:
diff changeset
183 clrf divisor_deco
heinrichsweikamp
parents:
diff changeset
184 btfsc divisor_gf,7
heinrichsweikamp
parents:
diff changeset
185 clrf divisor_gf
heinrichsweikamp
parents:
diff changeset
186 btfsc divisor_ppo2_sensors,7
heinrichsweikamp
parents:
diff changeset
187 clrf divisor_ppo2_sensors
heinrichsweikamp
parents:
diff changeset
188 btfsc divisor_decoplan,7
heinrichsweikamp
parents:
diff changeset
189 clrf divisor_decoplan
heinrichsweikamp
parents:
diff changeset
190 btfsc divisor_cns,7
heinrichsweikamp
parents:
diff changeset
191 clrf divisor_cns
heinrichsweikamp
parents:
diff changeset
192 btfsc divisor_tank,7
heinrichsweikamp
parents:
diff changeset
193 clrf divisor_tank
heinrichsweikamp
parents:
diff changeset
194
heinrichsweikamp
parents:
diff changeset
195 store_dive_data5:
heinrichsweikamp
parents:
diff changeset
196 bcf event_occured ; Clear the global event flag
heinrichsweikamp
parents:
diff changeset
197 return ; Done. (Sample with all informations written to external flash)
heinrichsweikamp
parents:
diff changeset
198
heinrichsweikamp
parents:
diff changeset
199 store_dive_cns:
heinrichsweikamp
parents:
diff changeset
200 movff int_O_CNS_fraction+0,WREG
heinrichsweikamp
parents:
diff changeset
201 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
202 movff int_O_CNS_fraction+1,WREG
heinrichsweikamp
parents:
diff changeset
203 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
204 movlw div_cns
heinrichsweikamp
parents:
diff changeset
205 movwf divisor_cns ; Reload divisor from CF
heinrichsweikamp
parents:
diff changeset
206 return
heinrichsweikamp
parents:
diff changeset
207
heinrichsweikamp
parents:
diff changeset
208 store_dive_tank:
heinrichsweikamp
parents:
diff changeset
209 movlw div_tank
heinrichsweikamp
parents:
diff changeset
210 movwf divisor_tank ; Reload divisor from CF
heinrichsweikamp
parents:
diff changeset
211 return
heinrichsweikamp
parents:
diff changeset
212
heinrichsweikamp
parents:
diff changeset
213 store_dive_decoplan:
heinrichsweikamp
parents:
diff changeset
214 ; Store the decoplan
heinrichsweikamp
parents:
diff changeset
215 lfsr FSR1,char_O_deco_time_for_log+.0
heinrichsweikamp
parents:
diff changeset
216 movlw .15
heinrichsweikamp
parents:
diff changeset
217 movwf lo
heinrichsweikamp
parents:
diff changeset
218 store_dive_decoplan_loop:
heinrichsweikamp
parents:
diff changeset
219 movf POSTINC1,W
heinrichsweikamp
parents:
diff changeset
220 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
221 decfsz lo,F
heinrichsweikamp
parents:
diff changeset
222 bra store_dive_decoplan_loop
heinrichsweikamp
parents:
diff changeset
223 movlw div_decoplan
heinrichsweikamp
parents:
diff changeset
224 movwf divisor_decoplan ; Reload divisor from CF
heinrichsweikamp
parents:
diff changeset
225 return
heinrichsweikamp
parents:
diff changeset
226
heinrichsweikamp
parents:
diff changeset
227 store_dive_ppO2_sensors:
heinrichsweikamp
parents:
diff changeset
228 movf o2_ppo2_sensor1,W ; Sensor1 ppO2 (in 0.01bar steps)
heinrichsweikamp
parents:
diff changeset
229 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
230 SAFE_2BYTE_COPY o2_mv_sensor1,lo ; o2_mv_sensor may be modifified via ISR during the two writes here...
heinrichsweikamp
parents:
diff changeset
231 movf lo,W ; in 0.1mV steps
heinrichsweikamp
parents:
diff changeset
232 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
233 movf hi,W ; in 0.1mV steps
heinrichsweikamp
parents:
diff changeset
234 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
235
heinrichsweikamp
parents:
diff changeset
236 movf o2_ppo2_sensor2,W ; Sensor2 ppO2 (in 0.01bar steps)
heinrichsweikamp
parents:
diff changeset
237 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
238 SAFE_2BYTE_COPY o2_mv_sensor2,lo ; o2_mv_sensor may be modifified via ISR during the two writes here...
heinrichsweikamp
parents:
diff changeset
239 movf lo,W ; in 0.1mV steps
heinrichsweikamp
parents:
diff changeset
240 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
241 movf hi,W ; in 0.1mV steps
heinrichsweikamp
parents:
diff changeset
242 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
243
heinrichsweikamp
parents:
diff changeset
244 movf o2_ppo2_sensor3,W ; Sensor3 ppO2 (in 0.01bar steps)
heinrichsweikamp
parents:
diff changeset
245 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
246 SAFE_2BYTE_COPY o2_mv_sensor3,lo ; o2_mv_sensor may be modifified via ISR during the two writes here...
heinrichsweikamp
parents:
diff changeset
247 movf lo,W ; in 0.1mV steps
heinrichsweikamp
parents:
diff changeset
248 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
249 movf hi,W ; in 0.1mV steps
heinrichsweikamp
parents:
diff changeset
250 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
251
heinrichsweikamp
parents:
diff changeset
252 movlw div_ppo2_sensors
heinrichsweikamp
parents:
diff changeset
253 movwf divisor_ppo2_sensors ; Reload divisor
heinrichsweikamp
parents:
diff changeset
254 return
heinrichsweikamp
parents:
diff changeset
255
heinrichsweikamp
parents:
diff changeset
256 store_dive_gf:
heinrichsweikamp
parents:
diff changeset
257 movff char_O_gradient_factor,WREG ; gradient factor absolute
heinrichsweikamp
parents:
diff changeset
258 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
259 movlw div_gf
heinrichsweikamp
parents:
diff changeset
260 movwf divisor_gf ; Reload divisor
heinrichsweikamp
parents:
diff changeset
261 return
heinrichsweikamp
parents:
diff changeset
262
heinrichsweikamp
parents:
diff changeset
263 store_dive_decodata:
heinrichsweikamp
parents:
diff changeset
264 movf decodata+0,W ; =0:no stop dive, if in deco mode: ceiling in m
heinrichsweikamp
parents:
diff changeset
265 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
266 movf decodata+1,W ; no stop time of length of first stop
heinrichsweikamp
parents:
diff changeset
267 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
268 movlw div_deco
heinrichsweikamp
parents:
diff changeset
269 movwf divisor_deco ; Reload divisor
heinrichsweikamp
parents:
diff changeset
270 return
heinrichsweikamp
parents:
diff changeset
271
heinrichsweikamp
parents:
diff changeset
272 store_dive_temperature:
heinrichsweikamp
parents:
diff changeset
273 SAFE_2BYTE_COPY temperature,lo
heinrichsweikamp
parents:
diff changeset
274 movf lo,W ; append temperature to current sample!
heinrichsweikamp
parents:
diff changeset
275 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
276 movf hi,W
heinrichsweikamp
parents:
diff changeset
277 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
278 movlw div_temperature
heinrichsweikamp
parents:
diff changeset
279 movwf divisor_temperature ; Reload divisor
heinrichsweikamp
parents:
diff changeset
280 return
heinrichsweikamp
parents:
diff changeset
281
heinrichsweikamp
parents:
diff changeset
282 ghostwrite_byte_header:
heinrichsweikamp
parents:
diff changeset
283 goto write_byte_ext_flash_plus_header ; (This call will also delete the 4kB TOC entry first)
heinrichsweikamp
parents:
diff changeset
284 ; returns...
heinrichsweikamp
parents:
diff changeset
285
heinrichsweikamp
parents:
diff changeset
286 ghostwrite_byte_profile:
heinrichsweikamp
parents:
diff changeset
287 goto write_byte_ext_flash_plus ; writes byte and increases address with banking at 0x200000
heinrichsweikamp
parents:
diff changeset
288 ; returns...
heinrichsweikamp
parents:
diff changeset
289
heinrichsweikamp
parents:
diff changeset
290 global ghostwriter_end_dive
heinrichsweikamp
parents:
diff changeset
291 ghostwriter_end_dive:
heinrichsweikamp
parents:
diff changeset
292 movff ext_flash_address+0,ext_flash_log_pointer+0
heinrichsweikamp
parents:
diff changeset
293 movff ext_flash_address+1,ext_flash_log_pointer+1
heinrichsweikamp
parents:
diff changeset
294 movff ext_flash_address+2,ext_flash_log_pointer+2 ; Save end-of-profile pointer to store in header
heinrichsweikamp
parents:
diff changeset
295
39
e4e91fe8b09d remember last customview in dive and surface mode
mh@mh-THINK.fritz.box
parents: 35
diff changeset
296 movff menupos3,customview_divemode ; store last customview
e4e91fe8b09d remember last customview in dive and surface mode
mh@mh-THINK.fritz.box
parents: 35
diff changeset
297
0
heinrichsweikamp
parents:
diff changeset
298 btfss realdive ; dive longer then one minute
heinrichsweikamp
parents:
diff changeset
299 goto ghostwriter_end_dive_common ; No, discard everything
heinrichsweikamp
parents:
diff changeset
300
heinrichsweikamp
parents:
diff changeset
301 ; In DEBUG compile, keep all simulated dives in logbook, Desat time, nofly, etc...
heinrichsweikamp
parents:
diff changeset
302 ifndef __DEBUG
heinrichsweikamp
parents:
diff changeset
303 btfsc simulatormode_active ; Are we in simulator mode?
heinrichsweikamp
parents:
diff changeset
304 goto ghostwriter_end_dive_common ; Yes, discard everything
heinrichsweikamp
parents:
diff changeset
305 endif
heinrichsweikamp
parents:
diff changeset
306
35
eca4a201d8cf change apnea timeout, do no longer store apnea dives in logbook
heinrichsweikamp
parents: 23
diff changeset
307 btfsc FLAG_apnoe_mode ; In Apnoe mode?
eca4a201d8cf change apnea timeout, do no longer store apnea dives in logbook
heinrichsweikamp
parents: 23
diff changeset
308 goto ghostwriter_end_dive_common ; Yes, discard everything
eca4a201d8cf change apnea timeout, do no longer store apnea dives in logbook
heinrichsweikamp
parents: 23
diff changeset
309
eca4a201d8cf change apnea timeout, do no longer store apnea dives in logbook
heinrichsweikamp
parents: 23
diff changeset
310 ; Dive finished (and longer then one minute)
0
heinrichsweikamp
parents:
diff changeset
311
heinrichsweikamp
parents:
diff changeset
312 btfsc FLAG_apnoe_mode ; Calc max. depth (again) for very short apnoe dives
heinrichsweikamp
parents:
diff changeset
313 call apnoe_calc_maxdepth
heinrichsweikamp
parents:
diff changeset
314
heinrichsweikamp
parents:
diff changeset
315 ; calculate desaturation time
heinrichsweikamp
parents:
diff changeset
316 movff last_surfpressure_30min+0,int_I_pres_surface+0 ; Pass surface to desat routine !
heinrichsweikamp
parents:
diff changeset
317 movff last_surfpressure_30min+1,int_I_pres_surface+1
heinrichsweikamp
parents:
diff changeset
318
heinrichsweikamp
parents:
diff changeset
319 call deco_calc_desaturation_time ; calculate desaturation time
heinrichsweikamp
parents:
diff changeset
320 movlb b'00000001' ; select ram bank 1
heinrichsweikamp
parents:
diff changeset
321 movff int_O_desaturation_time+0, desaturation_time+0
heinrichsweikamp
parents:
diff changeset
322 movff int_O_desaturation_time+1, desaturation_time+1 ; Buffer
heinrichsweikamp
parents:
diff changeset
323 call calc_deko_surfmode
heinrichsweikamp
parents:
diff changeset
324 rcall calculate_noflytime ; Calc NoFly time
heinrichsweikamp
parents:
diff changeset
325
heinrichsweikamp
parents:
diff changeset
326 ; store header and ...
heinrichsweikamp
parents:
diff changeset
327 movlw 0xFD ; .... End-of-Profile Bytes
heinrichsweikamp
parents:
diff changeset
328 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
329 movlw 0xFD
heinrichsweikamp
parents:
diff changeset
330 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. Flash
heinrichsweikamp
parents:
diff changeset
331 movff ext_flash_address+0,ext_flash_log_pointer+0
heinrichsweikamp
parents:
diff changeset
332 movff ext_flash_address+1,ext_flash_log_pointer+1
heinrichsweikamp
parents:
diff changeset
333 movff ext_flash_address+2,ext_flash_log_pointer+2 ; Save end-of-profile pointer to store in header
heinrichsweikamp
parents:
diff changeset
334
heinrichsweikamp
parents:
diff changeset
335 ; Set to first address again to store dive length ext_flash_dive_counter:3
heinrichsweikamp
parents:
diff changeset
336 clrf EEADRH ; Make sure to select eeprom bank 0
heinrichsweikamp
parents:
diff changeset
337 read_int_eeprom .4
heinrichsweikamp
parents:
diff changeset
338 movff EEDATA,ext_flash_address+0
heinrichsweikamp
parents:
diff changeset
339 read_int_eeprom .5
heinrichsweikamp
parents:
diff changeset
340 movff EEDATA,ext_flash_address+1
heinrichsweikamp
parents:
diff changeset
341 read_int_eeprom .6
heinrichsweikamp
parents:
diff changeset
342 movff EEDATA,ext_flash_address+2
heinrichsweikamp
parents:
diff changeset
343
heinrichsweikamp
parents:
diff changeset
344 incf_ext_flash_address_0x20 d'6' ; Skip internal "0xFA 0xFA #Divenumber:2 0xFA 0xFA" Header
heinrichsweikamp
parents:
diff changeset
345 ; Store dive length
heinrichsweikamp
parents:
diff changeset
346 movf ext_flash_dive_counter+0,W
6
13cda523891f bugfix: dive length in normal header
heinrichsweikamp
parents: 5
diff changeset
347 call write_byte_ext_flash_plus_nocnt ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
0
heinrichsweikamp
parents:
diff changeset
348 movf ext_flash_dive_counter+1,W
6
13cda523891f bugfix: dive length in normal header
heinrichsweikamp
parents: 5
diff changeset
349 call write_byte_ext_flash_plus_nocnt ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
0
heinrichsweikamp
parents:
diff changeset
350 movf ext_flash_dive_counter+2,W
6
13cda523891f bugfix: dive length in normal header
heinrichsweikamp
parents: 5
diff changeset
351 call write_byte_ext_flash_plus_nocnt ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
0
heinrichsweikamp
parents:
diff changeset
352
heinrichsweikamp
parents:
diff changeset
353 ; profile recording done.
heinrichsweikamp
parents:
diff changeset
354
heinrichsweikamp
parents:
diff changeset
355 ; Load total number of dives
heinrichsweikamp
parents:
diff changeset
356 read_int_eeprom .2
heinrichsweikamp
parents:
diff changeset
357 movff EEDATA,lo
heinrichsweikamp
parents:
diff changeset
358 read_int_eeprom .3
heinrichsweikamp
parents:
diff changeset
359 movff EEDATA,hi
heinrichsweikamp
parents:
diff changeset
360 ; +1 increase total dive counter
heinrichsweikamp
parents:
diff changeset
361 incf lo,F
heinrichsweikamp
parents:
diff changeset
362 movlw d'0'
heinrichsweikamp
parents:
diff changeset
363 addwfc hi,F
heinrichsweikamp
parents:
diff changeset
364 ; Store new number in EEPROM
heinrichsweikamp
parents:
diff changeset
365 movff lo,EEDATA
heinrichsweikamp
parents:
diff changeset
366 write_int_eeprom .2
heinrichsweikamp
parents:
diff changeset
367 movff hi,EEDATA
heinrichsweikamp
parents:
diff changeset
368 write_int_eeprom .3
heinrichsweikamp
parents:
diff changeset
369
heinrichsweikamp
parents:
diff changeset
370 decf lo,F ; -1
heinrichsweikamp
parents:
diff changeset
371 ; Set ext_flash_address:3 to TOC entry of this dive
heinrichsweikamp
parents:
diff changeset
372 ; 1st: 200000h-200FFFh -> lo=0
heinrichsweikamp
parents:
diff changeset
373 ; 2nd: 201000h-201FFFh -> lo=1
heinrichsweikamp
parents:
diff changeset
374 ; 3rd: 202000h-202FFFh -> lo=2
heinrichsweikamp
parents:
diff changeset
375 ; 255: 2FF000h-2FFFFFh -> lo=255
heinrichsweikamp
parents:
diff changeset
376
heinrichsweikamp
parents:
diff changeset
377 clrf ext_flash_address+0
heinrichsweikamp
parents:
diff changeset
378 clrf ext_flash_address+1
heinrichsweikamp
parents:
diff changeset
379 movlw 0x20
heinrichsweikamp
parents:
diff changeset
380 movwf ext_flash_address+2
heinrichsweikamp
parents:
diff changeset
381 movlw .16
heinrichsweikamp
parents:
diff changeset
382 mulwf lo ; lo*16 = offset to 0x2000 (up:hi)
heinrichsweikamp
parents:
diff changeset
383 movf PRODL,W
heinrichsweikamp
parents:
diff changeset
384 addwf ext_flash_address+1,F
heinrichsweikamp
parents:
diff changeset
385 movf PRODH,W
heinrichsweikamp
parents:
diff changeset
386 addwfc ext_flash_address+2,F
heinrichsweikamp
parents:
diff changeset
387
heinrichsweikamp
parents:
diff changeset
388 ; Now, write header
heinrichsweikamp
parents:
diff changeset
389
heinrichsweikamp
parents:
diff changeset
390 movlw 0xFA ; Header start
heinrichsweikamp
parents:
diff changeset
391 rcall ghostwrite_byte_header ; (This call will also delete the 4kB TOC entry first)
heinrichsweikamp
parents:
diff changeset
392 movlw 0xFA
heinrichsweikamp
parents:
diff changeset
393 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
394
heinrichsweikamp
parents:
diff changeset
395 ; store pointer to begin of diveprofile
heinrichsweikamp
parents:
diff changeset
396 read_int_eeprom .4
heinrichsweikamp
parents:
diff changeset
397 movf EEDATA,W
heinrichsweikamp
parents:
diff changeset
398 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
399 read_int_eeprom .5
heinrichsweikamp
parents:
diff changeset
400 movf EEDATA,W
heinrichsweikamp
parents:
diff changeset
401 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
402 read_int_eeprom .6
heinrichsweikamp
parents:
diff changeset
403 movf EEDATA,W
heinrichsweikamp
parents:
diff changeset
404 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
405
heinrichsweikamp
parents:
diff changeset
406 ; store pointer to end of diveprofile
heinrichsweikamp
parents:
diff changeset
407 movf ext_flash_log_pointer+0,W
heinrichsweikamp
parents:
diff changeset
408 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
409 movf ext_flash_log_pointer+1,W
heinrichsweikamp
parents:
diff changeset
410 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
411 movf ext_flash_log_pointer+2,W
heinrichsweikamp
parents:
diff changeset
412 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
413
heinrichsweikamp
parents:
diff changeset
414 ; write rest of header
heinrichsweikamp
parents:
diff changeset
415 movlw logbook_profile_version ; Defined in ostc3.inc
heinrichsweikamp
parents:
diff changeset
416 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
417
heinrichsweikamp
parents:
diff changeset
418 ; Store dive length
heinrichsweikamp
parents:
diff changeset
419 movf ext_flash_dive_counter+0,W
heinrichsweikamp
parents:
diff changeset
420 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
421 movf ext_flash_dive_counter+1,W
heinrichsweikamp
parents:
diff changeset
422 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
423 movf ext_flash_dive_counter+2,W
heinrichsweikamp
parents:
diff changeset
424 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
425
heinrichsweikamp
parents:
diff changeset
426 movf year,W ; Date
heinrichsweikamp
parents:
diff changeset
427 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
428 movf month,W
heinrichsweikamp
parents:
diff changeset
429 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
430 movf day,W
heinrichsweikamp
parents:
diff changeset
431 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
432 movf hours,W ; End of dive time
heinrichsweikamp
parents:
diff changeset
433 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
434 movf mins,W
heinrichsweikamp
parents:
diff changeset
435 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
436
heinrichsweikamp
parents:
diff changeset
437 btfss FLAG_apnoe_mode ; Store apnoe max or normal max (Which is only max from the last descent)
heinrichsweikamp
parents:
diff changeset
438 bra end_dive1 ; Store normal depth
heinrichsweikamp
parents:
diff changeset
439
heinrichsweikamp
parents:
diff changeset
440 movff apnoe_max_pressure+0,lo
heinrichsweikamp
parents:
diff changeset
441 movff apnoe_max_pressure+1,hi
heinrichsweikamp
parents:
diff changeset
442 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar]
heinrichsweikamp
parents:
diff changeset
443 movff lo,apnoe_max_pressure+0
heinrichsweikamp
parents:
diff changeset
444 movff hi,apnoe_max_pressure+1
heinrichsweikamp
parents:
diff changeset
445
heinrichsweikamp
parents:
diff changeset
446 movf apnoe_max_pressure+0,W ; Max. depth
heinrichsweikamp
parents:
diff changeset
447 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
448 movf apnoe_max_pressure+1,W
heinrichsweikamp
parents:
diff changeset
449 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
450 bra end_dive2 ; skip normal max. depth
heinrichsweikamp
parents:
diff changeset
451
heinrichsweikamp
parents:
diff changeset
452 end_dive1:
heinrichsweikamp
parents:
diff changeset
453 movff max_pressure+0,lo
heinrichsweikamp
parents:
diff changeset
454 movff max_pressure+1,hi
heinrichsweikamp
parents:
diff changeset
455 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar]
heinrichsweikamp
parents:
diff changeset
456 movff lo,max_pressure+0
heinrichsweikamp
parents:
diff changeset
457 movff hi,max_pressure+1
heinrichsweikamp
parents:
diff changeset
458
heinrichsweikamp
parents:
diff changeset
459 movff max_pressure+0,WREG ; Max. depth
heinrichsweikamp
parents:
diff changeset
460 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
461 movff max_pressure+1,WREG
heinrichsweikamp
parents:
diff changeset
462 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
463
heinrichsweikamp
parents:
diff changeset
464 end_dive2:
heinrichsweikamp
parents:
diff changeset
465 movf divemins+0,W ; divetime minutes
heinrichsweikamp
parents:
diff changeset
466 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
467 movf divemins+1,W
heinrichsweikamp
parents:
diff changeset
468 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
469 movf divesecs,W ; divetime seconds
heinrichsweikamp
parents:
diff changeset
470 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
471 movff minimum_temperature+0,WREG ; minimum temperature
heinrichsweikamp
parents:
diff changeset
472 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
473 movff minimum_temperature+1,WREG
heinrichsweikamp
parents:
diff changeset
474 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
475 movff last_surfpressure_30min+0,WREG ; airpressure before dive
heinrichsweikamp
parents:
diff changeset
476 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
477 movff last_surfpressure_30min+1,WREG
heinrichsweikamp
parents:
diff changeset
478 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
479 movff int_O_desaturation_time+0,WREG ; desaturation time in minutes
heinrichsweikamp
parents:
diff changeset
480 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
481 movff int_O_desaturation_time+1,WREG
heinrichsweikamp
parents:
diff changeset
482 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
483
heinrichsweikamp
parents:
diff changeset
484 btfss FLAG_ccr_mode ; In CCR mode...
heinrichsweikamp
parents:
diff changeset
485 bra end_dive_oc_gaslist ; No, write OC gases
heinrichsweikamp
parents:
diff changeset
486 ; Write Diluents...
heinrichsweikamp
parents:
diff changeset
487 movff opt_dil_O2_ratio+0,WREG
heinrichsweikamp
parents:
diff changeset
488 rcall ghostwrite_byte_header ; %O2
heinrichsweikamp
parents:
diff changeset
489 movff opt_dil_He_ratio+0,WREG
heinrichsweikamp
parents:
diff changeset
490 rcall ghostwrite_byte_header ; %He
heinrichsweikamp
parents:
diff changeset
491 movff char_I_dil_change+0,WREG
heinrichsweikamp
parents:
diff changeset
492 rcall ghostwrite_byte_header ; Configured change depth in m
heinrichsweikamp
parents:
diff changeset
493 movff opt_dil_type+0,WREG
heinrichsweikamp
parents:
diff changeset
494 rcall ghostwrite_byte_header ; 0=Disabled, 1=First, 2=Normal
heinrichsweikamp
parents:
diff changeset
495
heinrichsweikamp
parents:
diff changeset
496 movff opt_dil_O2_ratio+1,WREG
heinrichsweikamp
parents:
diff changeset
497 rcall ghostwrite_byte_header ; %O2
heinrichsweikamp
parents:
diff changeset
498 movff opt_dil_He_ratio+1,WREG
heinrichsweikamp
parents:
diff changeset
499 rcall ghostwrite_byte_header ; %He
heinrichsweikamp
parents:
diff changeset
500 movff char_I_dil_change+1,WREG
heinrichsweikamp
parents:
diff changeset
501 rcall ghostwrite_byte_header ; Configured change depth in m
heinrichsweikamp
parents:
diff changeset
502 movff opt_dil_type+1,WREG
heinrichsweikamp
parents:
diff changeset
503 rcall ghostwrite_byte_header ; 0=Disabled, 1=First, 2=Normal
heinrichsweikamp
parents:
diff changeset
504
heinrichsweikamp
parents:
diff changeset
505 movff opt_dil_O2_ratio+2,WREG
heinrichsweikamp
parents:
diff changeset
506 rcall ghostwrite_byte_header ; %O2
heinrichsweikamp
parents:
diff changeset
507 movff opt_dil_He_ratio+2,WREG
heinrichsweikamp
parents:
diff changeset
508 rcall ghostwrite_byte_header ; %He
heinrichsweikamp
parents:
diff changeset
509 movff char_I_dil_change+2,WREG
heinrichsweikamp
parents:
diff changeset
510 rcall ghostwrite_byte_header ; Configured change depth in m
heinrichsweikamp
parents:
diff changeset
511 movff opt_dil_type+2,WREG
heinrichsweikamp
parents:
diff changeset
512 rcall ghostwrite_byte_header ; 0=Disabled, 1=First, 2=Normal
heinrichsweikamp
parents:
diff changeset
513
heinrichsweikamp
parents:
diff changeset
514 movff opt_dil_O2_ratio+3,WREG
heinrichsweikamp
parents:
diff changeset
515 rcall ghostwrite_byte_header ; %O2
heinrichsweikamp
parents:
diff changeset
516 movff opt_dil_He_ratio+3,WREG
heinrichsweikamp
parents:
diff changeset
517 rcall ghostwrite_byte_header ; %He
heinrichsweikamp
parents:
diff changeset
518 movff char_I_dil_change+3,WREG
heinrichsweikamp
parents:
diff changeset
519 rcall ghostwrite_byte_header ; Configured change depth in m
heinrichsweikamp
parents:
diff changeset
520 movff opt_dil_type+3,WREG
heinrichsweikamp
parents:
diff changeset
521 rcall ghostwrite_byte_header ; 0=Disabled, 1=First, 2=Normal
heinrichsweikamp
parents:
diff changeset
522
heinrichsweikamp
parents:
diff changeset
523 movff opt_dil_O2_ratio+4,WREG
heinrichsweikamp
parents:
diff changeset
524 rcall ghostwrite_byte_header ; %O2
heinrichsweikamp
parents:
diff changeset
525 movff opt_dil_He_ratio+4,WREG
heinrichsweikamp
parents:
diff changeset
526 rcall ghostwrite_byte_header ; %He
heinrichsweikamp
parents:
diff changeset
527 movff char_I_dil_change+4,WREG
heinrichsweikamp
parents:
diff changeset
528 rcall ghostwrite_byte_header ; Configured change depth in m
heinrichsweikamp
parents:
diff changeset
529 movff opt_dil_type+4,WREG
heinrichsweikamp
parents:
diff changeset
530 rcall ghostwrite_byte_header ; 0=Disabled, 1=First, 2=Normal
heinrichsweikamp
parents:
diff changeset
531 bra end_dive_oc_cc_common
heinrichsweikamp
parents:
diff changeset
532
heinrichsweikamp
parents:
diff changeset
533 end_dive_oc_gaslist: ; OC Gases...
heinrichsweikamp
parents:
diff changeset
534 movff opt_gas_O2_ratio+0,WREG
heinrichsweikamp
parents:
diff changeset
535 rcall ghostwrite_byte_header ; %O2
heinrichsweikamp
parents:
diff changeset
536 movff opt_gas_He_ratio+0,WREG
heinrichsweikamp
parents:
diff changeset
537 rcall ghostwrite_byte_header ; %He
heinrichsweikamp
parents:
diff changeset
538 movff char_I_deco_gas_change+0,WREG
heinrichsweikamp
parents:
diff changeset
539 rcall ghostwrite_byte_header ; Configured change depth in m
heinrichsweikamp
parents:
diff changeset
540 movff opt_gas_type+0,WREG
heinrichsweikamp
parents:
diff changeset
541 rcall ghostwrite_byte_header ; 0=Disabled, 1=First, 2= Travel, 3= Deco
heinrichsweikamp
parents:
diff changeset
542
heinrichsweikamp
parents:
diff changeset
543 movff opt_gas_O2_ratio+1,WREG
heinrichsweikamp
parents:
diff changeset
544 rcall ghostwrite_byte_header ; %O2
heinrichsweikamp
parents:
diff changeset
545 movff opt_gas_He_ratio+1,WREG
heinrichsweikamp
parents:
diff changeset
546 rcall ghostwrite_byte_header ; %He
heinrichsweikamp
parents:
diff changeset
547 movff char_I_deco_gas_change+1,WREG
heinrichsweikamp
parents:
diff changeset
548 rcall ghostwrite_byte_header ; Configured change depth in m
heinrichsweikamp
parents:
diff changeset
549 movff opt_gas_type+1,WREG
heinrichsweikamp
parents:
diff changeset
550 rcall ghostwrite_byte_header ; 0=Disabled, 1=First, 2= Travel, 3= Deco
heinrichsweikamp
parents:
diff changeset
551
heinrichsweikamp
parents:
diff changeset
552 movff opt_gas_O2_ratio+2,WREG
heinrichsweikamp
parents:
diff changeset
553 rcall ghostwrite_byte_header ; %O2
heinrichsweikamp
parents:
diff changeset
554 movff opt_gas_He_ratio+2,WREG
heinrichsweikamp
parents:
diff changeset
555 rcall ghostwrite_byte_header ; %He
heinrichsweikamp
parents:
diff changeset
556 movff char_I_deco_gas_change+2,WREG
heinrichsweikamp
parents:
diff changeset
557 rcall ghostwrite_byte_header ; Configured change depth in m
heinrichsweikamp
parents:
diff changeset
558 movff opt_gas_type+2,WREG
heinrichsweikamp
parents:
diff changeset
559 rcall ghostwrite_byte_header ; 0=Disabled, 1=First, 2= Travel, 3= Deco
heinrichsweikamp
parents:
diff changeset
560
heinrichsweikamp
parents:
diff changeset
561 movff opt_gas_O2_ratio+3,WREG
heinrichsweikamp
parents:
diff changeset
562 rcall ghostwrite_byte_header ; %O2
heinrichsweikamp
parents:
diff changeset
563 movff opt_gas_He_ratio+3,WREG
heinrichsweikamp
parents:
diff changeset
564 rcall ghostwrite_byte_header ; %He
heinrichsweikamp
parents:
diff changeset
565 movff char_I_deco_gas_change+3,WREG
heinrichsweikamp
parents:
diff changeset
566 rcall ghostwrite_byte_header ; Configured change depth in m
heinrichsweikamp
parents:
diff changeset
567 movff opt_gas_type+3,WREG
heinrichsweikamp
parents:
diff changeset
568 rcall ghostwrite_byte_header ; 0=Disabled, 1=First, 2= Travel, 3= Deco
heinrichsweikamp
parents:
diff changeset
569
heinrichsweikamp
parents:
diff changeset
570 movff opt_gas_O2_ratio+4,WREG
heinrichsweikamp
parents:
diff changeset
571 rcall ghostwrite_byte_header ; %O2
heinrichsweikamp
parents:
diff changeset
572 movff opt_gas_He_ratio+4,WREG
heinrichsweikamp
parents:
diff changeset
573 rcall ghostwrite_byte_header ; %He
heinrichsweikamp
parents:
diff changeset
574 movff char_I_deco_gas_change+4,WREG
heinrichsweikamp
parents:
diff changeset
575 rcall ghostwrite_byte_header ; Configured change depth in m
heinrichsweikamp
parents:
diff changeset
576 movff opt_gas_type+4,WREG
heinrichsweikamp
parents:
diff changeset
577 rcall ghostwrite_byte_header ; 0=Disabled, 1=First, 2= Travel, 3= Deco
heinrichsweikamp
parents:
diff changeset
578 ; bra end_dive_oc_cc_common
heinrichsweikamp
parents:
diff changeset
579
heinrichsweikamp
parents:
diff changeset
580 end_dive_oc_cc_common:
heinrichsweikamp
parents:
diff changeset
581 movlw softwareversion_x ; Firmware version
heinrichsweikamp
parents:
diff changeset
582 rcall ghostwrite_byte_header
heinrichsweikamp
parents:
diff changeset
583 movlw softwareversion_y
heinrichsweikamp
parents:
diff changeset
584 rcall ghostwrite_byte_header
heinrichsweikamp
parents:
diff changeset
585 movf batt_voltage+0,W ; Battery voltage
heinrichsweikamp
parents:
diff changeset
586 rcall ghostwrite_byte_header
heinrichsweikamp
parents:
diff changeset
587 movf batt_voltage+1,W
heinrichsweikamp
parents:
diff changeset
588 rcall ghostwrite_byte_header
heinrichsweikamp
parents:
diff changeset
589
23
e402813343b6 new option to switch samplingrate between 10s and 2s
heinrichsweikamp
parents: 6
diff changeset
590 movf samplingrate,W ; Sampling rate
e402813343b6 new option to switch samplingrate between 10s and 2s
heinrichsweikamp
parents: 6
diff changeset
591 btfsc FLAG_apnoe_mode ; Apnoe mode?
e402813343b6 new option to switch samplingrate between 10s and 2s
heinrichsweikamp
parents: 6
diff changeset
592 movlw samplingrate_apnoe ; Apnoe sampling rate
0
heinrichsweikamp
parents:
diff changeset
593 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
594
heinrichsweikamp
parents:
diff changeset
595 ; CNS at gebinning of dive
heinrichsweikamp
parents:
diff changeset
596 movff CNS_start+0,WREG
heinrichsweikamp
parents:
diff changeset
597 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
598 movff CNS_start+1,WREG
heinrichsweikamp
parents:
diff changeset
599 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
600 ; Gradient factor
heinrichsweikamp
parents:
diff changeset
601 movff GF_start,WREG
heinrichsweikamp
parents:
diff changeset
602 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
603 movff char_O_relative_gradient_GF,WREG
heinrichsweikamp
parents:
diff changeset
604 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
5
ed1dec74d5fd Put logbook offset into dive header
heinrichsweikamp
parents: 0
diff changeset
605
ed1dec74d5fd Put logbook offset into dive header
heinrichsweikamp
parents: 0
diff changeset
606 ; Logbook offset
ed1dec74d5fd Put logbook offset into dive header
heinrichsweikamp
parents: 0
diff changeset
607 call do_logoffset_common_read; Read into lo:hi
ed1dec74d5fd Put logbook offset into dive header
heinrichsweikamp
parents: 0
diff changeset
608 movf lo,W
0
heinrichsweikamp
parents:
diff changeset
609 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
5
ed1dec74d5fd Put logbook offset into dive header
heinrichsweikamp
parents: 0
diff changeset
610 movf hi,W
0
heinrichsweikamp
parents:
diff changeset
611 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
5
ed1dec74d5fd Put logbook offset into dive header
heinrichsweikamp
parents: 0
diff changeset
612
ed1dec74d5fd Put logbook offset into dive header
heinrichsweikamp
parents: 0
diff changeset
613 ; Spare at Byte 60
0
heinrichsweikamp
parents:
diff changeset
614 movlw 0xFF
heinrichsweikamp
parents:
diff changeset
615 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
616 ; Store 5 Setpoints
heinrichsweikamp
parents:
diff changeset
617 movff char_I_setpoint_cbar+0,WREG
heinrichsweikamp
parents:
diff changeset
618 rcall ghostwrite_byte_header ; Setpoint in cbar
heinrichsweikamp
parents:
diff changeset
619 movff char_I_setpoint_change+0,WREG
heinrichsweikamp
parents:
diff changeset
620 rcall ghostwrite_byte_header ; Change depth
heinrichsweikamp
parents:
diff changeset
621 movff char_I_setpoint_cbar+1,WREG
heinrichsweikamp
parents:
diff changeset
622 rcall ghostwrite_byte_header ; Setpoint in cbar
heinrichsweikamp
parents:
diff changeset
623 movff char_I_setpoint_change+1,WREG
heinrichsweikamp
parents:
diff changeset
624 rcall ghostwrite_byte_header ; Change depth
heinrichsweikamp
parents:
diff changeset
625 movff char_I_setpoint_cbar+2,WREG
heinrichsweikamp
parents:
diff changeset
626 rcall ghostwrite_byte_header ; Setpoint in cbar
heinrichsweikamp
parents:
diff changeset
627 movff char_I_setpoint_change+2,WREG
heinrichsweikamp
parents:
diff changeset
628 rcall ghostwrite_byte_header ; Change depth
heinrichsweikamp
parents:
diff changeset
629 movff char_I_setpoint_cbar+3,WREG
heinrichsweikamp
parents:
diff changeset
630 rcall ghostwrite_byte_header ; Setpoint in cbar
heinrichsweikamp
parents:
diff changeset
631 movff char_I_setpoint_change+3,WREG
heinrichsweikamp
parents:
diff changeset
632 rcall ghostwrite_byte_header ; Change depth
heinrichsweikamp
parents:
diff changeset
633 movff char_I_setpoint_cbar+4,WREG
heinrichsweikamp
parents:
diff changeset
634 rcall ghostwrite_byte_header ; Setpoint in cbar
heinrichsweikamp
parents:
diff changeset
635 movff char_I_setpoint_change+4,WREG
heinrichsweikamp
parents:
diff changeset
636 rcall ghostwrite_byte_header ; Change depth
heinrichsweikamp
parents:
diff changeset
637
heinrichsweikamp
parents:
diff changeset
638 movff opt_salinity,WREG ; Salinity (0-5%)
heinrichsweikamp
parents:
diff changeset
639 rcall ghostwrite_byte_header ; Store Salinity to Dive
heinrichsweikamp
parents:
diff changeset
640
heinrichsweikamp
parents:
diff changeset
641 movff int_O_CNS_fraction+0,WREG ; copy into bank1
heinrichsweikamp
parents:
diff changeset
642 rcall ghostwrite_byte_header; Stores CNS%
heinrichsweikamp
parents:
diff changeset
643 movff int_O_CNS_fraction+1,WREG ; copy into bank1
heinrichsweikamp
parents:
diff changeset
644 rcall ghostwrite_byte_header; Stores CNS%
heinrichsweikamp
parents:
diff changeset
645
heinrichsweikamp
parents:
diff changeset
646 movff avr_rel_pressure_total+0,WREG ; Average Depth
heinrichsweikamp
parents:
diff changeset
647 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
648 movff avr_rel_pressure_total+1,WREG ; Average Depth
heinrichsweikamp
parents:
diff changeset
649 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
650
heinrichsweikamp
parents:
diff changeset
651 movff total_divetime_seconds+0,WREG ; Total dive time (Regardless of start_dive_threshold)
heinrichsweikamp
parents:
diff changeset
652 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
653 movff total_divetime_seconds+1,WREG ; Total dive time (Regardless of start_dive_threshold)
heinrichsweikamp
parents:
diff changeset
654 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
655
heinrichsweikamp
parents:
diff changeset
656 movff char_I_GF_Low_percentage,WREG ; GF_lo
heinrichsweikamp
parents:
diff changeset
657 movff char_I_deco_model,lo
heinrichsweikamp
parents:
diff changeset
658 decfsz lo,F ; jump over next line if char_I_deco_model == 1
heinrichsweikamp
parents:
diff changeset
659 movff char_I_saturation_multiplier,WREG ; Saturation Multiplier
heinrichsweikamp
parents:
diff changeset
660 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
661
heinrichsweikamp
parents:
diff changeset
662 movff char_I_GF_High_percentage,WREG ; GF_hi
heinrichsweikamp
parents:
diff changeset
663 movff char_I_deco_model,lo
heinrichsweikamp
parents:
diff changeset
664 decfsz lo,F ; jump over next line if char_I_deco_model == 1
heinrichsweikamp
parents:
diff changeset
665 movff char_I_desaturation_multiplier,WREG ; Desaturation Multiplier
heinrichsweikamp
parents:
diff changeset
666 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
667
heinrichsweikamp
parents:
diff changeset
668 movff char_I_deco_model,WREG ; 0 = ZH-L16, 1 = ZH-L16-GF
heinrichsweikamp
parents:
diff changeset
669 rcall ghostwrite_byte_header; writes byte and increases address (no banking)
heinrichsweikamp
parents:
diff changeset
670
heinrichsweikamp
parents:
diff changeset
671 read_int_eeprom .2
heinrichsweikamp
parents:
diff changeset
672 movf EEDATA,W
heinrichsweikamp
parents:
diff changeset
673 rcall ghostwrite_byte_header ; Total dive counter, low
heinrichsweikamp
parents:
diff changeset
674 read_int_eeprom .3
heinrichsweikamp
parents:
diff changeset
675 movf EEDATA,W
heinrichsweikamp
parents:
diff changeset
676 rcall ghostwrite_byte_header ; Total dive counter, high
heinrichsweikamp
parents:
diff changeset
677
heinrichsweikamp
parents:
diff changeset
678 movff opt_dive_mode,WREG
heinrichsweikamp
parents:
diff changeset
679 rcall ghostwrite_byte_header ; 0=OC, 1=CC, 2=Gauge, 3=Apnea
heinrichsweikamp
parents:
diff changeset
680
heinrichsweikamp
parents:
diff changeset
681 ; Store all tissue data available
heinrichsweikamp
parents:
diff changeset
682 movlw .16
heinrichsweikamp
parents:
diff changeset
683 movwf lo
heinrichsweikamp
parents:
diff changeset
684 lfsr FSR1,char_O_tissue_N2_saturation+0
heinrichsweikamp
parents:
diff changeset
685 end_dive_store_tissues_N2:
heinrichsweikamp
parents:
diff changeset
686 movf POSTINC1,W
heinrichsweikamp
parents:
diff changeset
687 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
688 decfsz lo,F
heinrichsweikamp
parents:
diff changeset
689 bra end_dive_store_tissues_N2 ; No
heinrichsweikamp
parents:
diff changeset
690
heinrichsweikamp
parents:
diff changeset
691 movlw .64
heinrichsweikamp
parents:
diff changeset
692 movwf lo
heinrichsweikamp
parents:
diff changeset
693 lfsr FSR1,0x700;pres_tissue_N2+0 ; 16*4Byte Float = 64Bytes
heinrichsweikamp
parents:
diff changeset
694 end_dive_store_tissues_N2_2:
heinrichsweikamp
parents:
diff changeset
695 movf POSTINC1,W
heinrichsweikamp
parents:
diff changeset
696 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
697 decfsz lo,F
heinrichsweikamp
parents:
diff changeset
698 bra end_dive_store_tissues_N2_2 ; No
heinrichsweikamp
parents:
diff changeset
699
heinrichsweikamp
parents:
diff changeset
700 movlw .16
heinrichsweikamp
parents:
diff changeset
701 movwf lo
heinrichsweikamp
parents:
diff changeset
702 lfsr FSR1,char_O_tissue_He_saturation+0
heinrichsweikamp
parents:
diff changeset
703 end_dive_store_tissues_He:
heinrichsweikamp
parents:
diff changeset
704 movf POSTINC1,W
heinrichsweikamp
parents:
diff changeset
705 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
706 decfsz lo,F
heinrichsweikamp
parents:
diff changeset
707 bra end_dive_store_tissues_He ; No
heinrichsweikamp
parents:
diff changeset
708
heinrichsweikamp
parents:
diff changeset
709 movlw .64
heinrichsweikamp
parents:
diff changeset
710 movwf lo
heinrichsweikamp
parents:
diff changeset
711 lfsr FSR1,0x740;pres_tissue_He+0 ; 16*4Byte Float = 64Bytes
heinrichsweikamp
parents:
diff changeset
712 end_dive_store_tissues_He_2:
heinrichsweikamp
parents:
diff changeset
713 movf POSTINC1,W
heinrichsweikamp
parents:
diff changeset
714 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
715 decfsz lo,F
heinrichsweikamp
parents:
diff changeset
716 bra end_dive_store_tissues_He_2 ; No
heinrichsweikamp
parents:
diff changeset
717
heinrichsweikamp
parents:
diff changeset
718 ; Some deco stuff
heinrichsweikamp
parents:
diff changeset
719 movff char_I_depth_last_deco,WREG ; last stop [m]
heinrichsweikamp
parents:
diff changeset
720 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
721 movff char_I_deco_distance,WREG ; assumed distance to shown stop
heinrichsweikamp
parents:
diff changeset
722 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
723
heinrichsweikamp
parents:
diff changeset
724 ; Last HUD data
heinrichsweikamp
parents:
diff changeset
725 movff hud_battery_mv+0,WREG ; Last HUD battery value
heinrichsweikamp
parents:
diff changeset
726 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
727 movff hud_battery_mv+1,WREG ; Last HUD battery value
heinrichsweikamp
parents:
diff changeset
728 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
729 movff hud_status_byte,WREG ; Last HUD status
heinrichsweikamp
parents:
diff changeset
730 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
731
heinrichsweikamp
parents:
diff changeset
732 ; Battery gauge registers [nAs]
heinrichsweikamp
parents:
diff changeset
733 movff battery_gauge+0,WREG ; Battery gauge register
heinrichsweikamp
parents:
diff changeset
734 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
735 movff battery_gauge+1,WREG ; Battery gauge register
heinrichsweikamp
parents:
diff changeset
736 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
737 movff battery_gauge+2,WREG ; Battery gauge register
heinrichsweikamp
parents:
diff changeset
738 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
739 movff battery_gauge+3,WREG ; Battery gauge register
heinrichsweikamp
parents:
diff changeset
740 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
741 movff battery_gauge+4,WREG ; Battery gauge register
heinrichsweikamp
parents:
diff changeset
742 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
743 movff battery_gauge+5,WREG ; Battery gauge register
heinrichsweikamp
parents:
diff changeset
744 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
745
heinrichsweikamp
parents:
diff changeset
746 ; Header stop
heinrichsweikamp
parents:
diff changeset
747 movlw 0xFB
heinrichsweikamp
parents:
diff changeset
748 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
749 movlw 0xFB
heinrichsweikamp
parents:
diff changeset
750 rcall ghostwrite_byte_header ; WREG -> Header in ext. flash
heinrichsweikamp
parents:
diff changeset
751
heinrichsweikamp
parents:
diff changeset
752 call divemode_store_statistics ; Store/update statistics for this unit
heinrichsweikamp
parents:
diff changeset
753
heinrichsweikamp
parents:
diff changeset
754 clrf surface_interval+0
heinrichsweikamp
parents:
diff changeset
755 clrf surface_interval+1 ; Clear surface interval timer
heinrichsweikamp
parents:
diff changeset
756
heinrichsweikamp
parents:
diff changeset
757 ghostwriter_end_dive_common:
heinrichsweikamp
parents:
diff changeset
758 ; Update ext_flash_log_pointer into EEPROM
heinrichsweikamp
parents:
diff changeset
759 clrf EEADRH
heinrichsweikamp
parents:
diff changeset
760 movff ext_flash_log_pointer+0,EEDATA
heinrichsweikamp
parents:
diff changeset
761 write_int_eeprom .4
heinrichsweikamp
parents:
diff changeset
762 movff ext_flash_log_pointer+1,EEDATA
heinrichsweikamp
parents:
diff changeset
763 write_int_eeprom .5
heinrichsweikamp
parents:
diff changeset
764 movff ext_flash_log_pointer+2,EEDATA
heinrichsweikamp
parents:
diff changeset
765 write_int_eeprom .6
heinrichsweikamp
parents:
diff changeset
766
heinrichsweikamp
parents:
diff changeset
767 bcf simulatormode_active ; if we were in simulator mode
heinrichsweikamp
parents:
diff changeset
768
heinrichsweikamp
parents:
diff changeset
769 ; In DEBUG compile, keep all simulated dives in logbook, Desat time, nofly, etc...
heinrichsweikamp
parents:
diff changeset
770 ifndef __DEBUG
heinrichsweikamp
parents:
diff changeset
771 extern deco_pull_tissues_from_vault
heinrichsweikamp
parents:
diff changeset
772 btfsc restore_deco_data ; Restore decodata?
heinrichsweikamp
parents:
diff changeset
773 call deco_pull_tissues_from_vault
heinrichsweikamp
parents:
diff changeset
774 banksel common ; Bank1
heinrichsweikamp
parents:
diff changeset
775 endif
heinrichsweikamp
parents:
diff changeset
776 call update_battery_registers ; update battery registers into EEPROM
heinrichsweikamp
parents:
diff changeset
777 goto surfloop ; and return to surfaceloop
heinrichsweikamp
parents:
diff changeset
778
heinrichsweikamp
parents:
diff changeset
779 global ghostwriter_short_header
heinrichsweikamp
parents:
diff changeset
780 ghostwriter_short_header: ; Write short header with divenumber into profile memory
heinrichsweikamp
parents:
diff changeset
781
heinrichsweikamp
parents:
diff changeset
782 ; load pointer for profile storing into RAM (Updated in EEPROM after the dive)
heinrichsweikamp
parents:
diff changeset
783 clrf EEADRH ; Make sure to select eeprom bank 0
heinrichsweikamp
parents:
diff changeset
784 read_int_eeprom .4
heinrichsweikamp
parents:
diff changeset
785 movff EEDATA,ext_flash_address+0
heinrichsweikamp
parents:
diff changeset
786 read_int_eeprom .5
heinrichsweikamp
parents:
diff changeset
787 movff EEDATA,ext_flash_address+1
heinrichsweikamp
parents:
diff changeset
788 read_int_eeprom .6
heinrichsweikamp
parents:
diff changeset
789 movff EEDATA,ext_flash_address+2
heinrichsweikamp
parents:
diff changeset
790
heinrichsweikamp
parents:
diff changeset
791 ; Clear dive length counter
heinrichsweikamp
parents:
diff changeset
792 clrf ext_flash_dive_counter+0
heinrichsweikamp
parents:
diff changeset
793 clrf ext_flash_dive_counter+1
heinrichsweikamp
parents:
diff changeset
794 clrf ext_flash_dive_counter+2
heinrichsweikamp
parents:
diff changeset
795
heinrichsweikamp
parents:
diff changeset
796 ; Write short header with divenumber into profile memory
heinrichsweikamp
parents:
diff changeset
797 movlw 0xFA
heinrichsweikamp
parents:
diff changeset
798 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
799 movlw 0xFA
heinrichsweikamp
parents:
diff changeset
800 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
801 ; Load total number of dives (low byte only)
heinrichsweikamp
parents:
diff changeset
802 read_int_eeprom .2
heinrichsweikamp
parents:
diff changeset
803 incf EEDATA,W ;+1
heinrichsweikamp
parents:
diff changeset
804 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
805 read_int_eeprom .3
heinrichsweikamp
parents:
diff changeset
806 movf EEDATA,W
heinrichsweikamp
parents:
diff changeset
807 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
808 movlw 0xFA
heinrichsweikamp
parents:
diff changeset
809 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
810 movlw 0xFA
heinrichsweikamp
parents:
diff changeset
811 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
812 ; Keep room for dive length ext_flash_dive_counter:3 (Stored at the end of the dive)
heinrichsweikamp
parents:
diff changeset
813 incf_ext_flash_address_0x20 d'3' ; Skip Bytes in external flash (faster)
heinrichsweikamp
parents:
diff changeset
814
23
e402813343b6 new option to switch samplingrate between 10s and 2s
heinrichsweikamp
parents: 6
diff changeset
815 movf samplingrate,W ; Sampling rate
0
heinrichsweikamp
parents:
diff changeset
816 btfsc FLAG_apnoe_mode ; Apnoe mode?
heinrichsweikamp
parents:
diff changeset
817 movlw samplingrate_apnoe ; Apnoe sampling rate
heinrichsweikamp
parents:
diff changeset
818 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
819
heinrichsweikamp
parents:
diff changeset
820 movlw .7 ; Number of divisors
heinrichsweikamp
parents:
diff changeset
821 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
822
heinrichsweikamp
parents:
diff changeset
823 movlw .0 ; Type
heinrichsweikamp
parents:
diff changeset
824 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
825 movlw infolength_temperature
heinrichsweikamp
parents:
diff changeset
826 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
827 movlw div_temperature ; Divisor temperature
heinrichsweikamp
parents:
diff changeset
828 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
829
heinrichsweikamp
parents:
diff changeset
830 movlw .1 ; Type
heinrichsweikamp
parents:
diff changeset
831 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
832 movlw infolength_deco
heinrichsweikamp
parents:
diff changeset
833 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
834 movlw div_deco ; Divisor decodata
heinrichsweikamp
parents:
diff changeset
835 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
836
heinrichsweikamp
parents:
diff changeset
837 movlw .2 ; Type
heinrichsweikamp
parents:
diff changeset
838 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
839 movlw infolength_gf
heinrichsweikamp
parents:
diff changeset
840 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
841 movlw div_gf ; Divisor gf
heinrichsweikamp
parents:
diff changeset
842 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
843
heinrichsweikamp
parents:
diff changeset
844 movlw .3 ; Type
heinrichsweikamp
parents:
diff changeset
845 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
846 movlw infolength_ppo2_sensors
heinrichsweikamp
parents:
diff changeset
847 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
848 movlw div_ppo2_sensors ; Divisor ppO2
heinrichsweikamp
parents:
diff changeset
849 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
850
heinrichsweikamp
parents:
diff changeset
851 movlw .4 ; Type
heinrichsweikamp
parents:
diff changeset
852 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
853 movlw infolength_decoplan
heinrichsweikamp
parents:
diff changeset
854 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
855 movlw div_decoplan ; Divisor debug
heinrichsweikamp
parents:
diff changeset
856 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
857
heinrichsweikamp
parents:
diff changeset
858 movlw .5 ; Type
heinrichsweikamp
parents:
diff changeset
859 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
860 movlw infolength_cns
heinrichsweikamp
parents:
diff changeset
861 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
862 movlw div_cns ; Divisor CNS
heinrichsweikamp
parents:
diff changeset
863 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
864
heinrichsweikamp
parents:
diff changeset
865 movlw .6 ; Type
heinrichsweikamp
parents:
diff changeset
866 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
867 movlw infolength_tank
heinrichsweikamp
parents:
diff changeset
868 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
869 movlw div_tank ; Divisor Tank
heinrichsweikamp
parents:
diff changeset
870 rcall ghostwrite_byte_profile ; WREG -> Profile in ext. flash
heinrichsweikamp
parents:
diff changeset
871
heinrichsweikamp
parents:
diff changeset
872 return
heinrichsweikamp
parents:
diff changeset
873
heinrichsweikamp
parents:
diff changeset
874 calculate_noflytime:
heinrichsweikamp
parents:
diff changeset
875 ; calculate nofly time
heinrichsweikamp
parents:
diff changeset
876 movff int_O_desaturation_time+0,xA+0
heinrichsweikamp
parents:
diff changeset
877 movff int_O_desaturation_time+1,xA+1
heinrichsweikamp
parents:
diff changeset
878
heinrichsweikamp
parents:
diff changeset
879 btfsc xA+1,7 ; Is desat time negative ?
heinrichsweikamp
parents:
diff changeset
880 bra calculate_noflytime_3 ; Then surely not valid !
heinrichsweikamp
parents:
diff changeset
881
heinrichsweikamp
parents:
diff changeset
882 tstfsz xA+0 ; Desat=0?
heinrichsweikamp
parents:
diff changeset
883 bra calculate_noflytime2
heinrichsweikamp
parents:
diff changeset
884 tstfsz xA+1 ; Desat=0?
heinrichsweikamp
parents:
diff changeset
885 bra calculate_noflytime2
heinrichsweikamp
parents:
diff changeset
886
heinrichsweikamp
parents:
diff changeset
887 calculate_noflytime_3:
heinrichsweikamp
parents:
diff changeset
888 ; Desaturation time = zero
heinrichsweikamp
parents:
diff changeset
889 clrf nofly_time+0 ; Clear nofly time
heinrichsweikamp
parents:
diff changeset
890 clrf nofly_time+1 ; Clear nofly time
heinrichsweikamp
parents:
diff changeset
891 return
heinrichsweikamp
parents:
diff changeset
892
heinrichsweikamp
parents:
diff changeset
893 calculate_noflytime2:
heinrichsweikamp
parents:
diff changeset
894 movff xA+0,int_I_temp+0
heinrichsweikamp
parents:
diff changeset
895 movff xA+1,int_I_temp+1
heinrichsweikamp
parents:
diff changeset
896 movlw no_fly_time_ratio ; nofly_time_ratio
heinrichsweikamp
parents:
diff changeset
897 movff WREG,char_I_temp
heinrichsweikamp
parents:
diff changeset
898 call deco_calc_percentage
heinrichsweikamp
parents:
diff changeset
899 movlb b'00000001' ; select ram bank 1
heinrichsweikamp
parents:
diff changeset
900 movff int_I_temp+0,xA+0
heinrichsweikamp
parents:
diff changeset
901 movff int_I_temp+1,xA+1
heinrichsweikamp
parents:
diff changeset
902 tstfsz xA+0 ; Desat=0?
heinrichsweikamp
parents:
diff changeset
903 bra calculate_noflytime_2_final
heinrichsweikamp
parents:
diff changeset
904 tstfsz xA+1 ; Desat=0?
heinrichsweikamp
parents:
diff changeset
905 bra calculate_noflytime_2_final
heinrichsweikamp
parents:
diff changeset
906 bra calculate_noflytime_3
heinrichsweikamp
parents:
diff changeset
907
heinrichsweikamp
parents:
diff changeset
908 calculate_noflytime_2_final:
heinrichsweikamp
parents:
diff changeset
909 movff xA+0,nofly_time+0
heinrichsweikamp
parents:
diff changeset
910 movff xA+1,nofly_time+1
heinrichsweikamp
parents:
diff changeset
911 return
heinrichsweikamp
parents:
diff changeset
912
heinrichsweikamp
parents:
diff changeset
913
heinrichsweikamp
parents:
diff changeset
914 divemode_store_statistics: ; Store/update statistics for this unit
heinrichsweikamp
parents:
diff changeset
915 rcall do_logoffset_common_read ; Existing logbook offset into lo:hi
heinrichsweikamp
parents:
diff changeset
916
heinrichsweikamp
parents:
diff changeset
917 tstfsz lo ; lo=0?
heinrichsweikamp
parents:
diff changeset
918 bra change_logbook_offset1 ; No, adjust offset
heinrichsweikamp
parents:
diff changeset
919 tstfsz hi ; hi=0?
heinrichsweikamp
parents:
diff changeset
920 bra change_logbook_offset1 ; No, adjust offset
heinrichsweikamp
parents:
diff changeset
921 bra change_logbook_offset2 ; lo=0 and hi=0 -> skip Offset routine
heinrichsweikamp
parents:
diff changeset
922 change_logbook_offset1:
heinrichsweikamp
parents:
diff changeset
923 movlw d'1'
heinrichsweikamp
parents:
diff changeset
924 addwf lo
heinrichsweikamp
parents:
diff changeset
925 movlw d'0'
heinrichsweikamp
parents:
diff changeset
926 addwfc hi
heinrichsweikamp
parents:
diff changeset
927 rcall do_logoffset_common_write ; lo:hi -> EEPROM
heinrichsweikamp
parents:
diff changeset
928 change_logbook_offset2:
heinrichsweikamp
parents:
diff changeset
929 ; Add more here...
heinrichsweikamp
parents:
diff changeset
930 return
heinrichsweikamp
parents:
diff changeset
931
heinrichsweikamp
parents:
diff changeset
932 global do_logoffset_common_write
heinrichsweikamp
parents:
diff changeset
933 do_logoffset_common_write:
heinrichsweikamp
parents:
diff changeset
934 movff lo,EEDATA
heinrichsweikamp
parents:
diff changeset
935 write_int_eeprom 0x0D
heinrichsweikamp
parents:
diff changeset
936 movff hi,EEDATA
heinrichsweikamp
parents:
diff changeset
937 write_int_eeprom 0x0E
heinrichsweikamp
parents:
diff changeset
938 return
heinrichsweikamp
parents:
diff changeset
939
heinrichsweikamp
parents:
diff changeset
940 global do_logoffset_common_read
heinrichsweikamp
parents:
diff changeset
941 do_logoffset_common_read:
heinrichsweikamp
parents:
diff changeset
942 clrf EEADRH
heinrichsweikamp
parents:
diff changeset
943 read_int_eeprom 0x0D
heinrichsweikamp
parents:
diff changeset
944 movff EEDATA,lo
heinrichsweikamp
parents:
diff changeset
945 read_int_eeprom 0x0E
heinrichsweikamp
parents:
diff changeset
946 movff EEDATA,hi ; Existing logbook offset into lo:hi
heinrichsweikamp
parents:
diff changeset
947 return
heinrichsweikamp
parents:
diff changeset
948
heinrichsweikamp
parents:
diff changeset
949
heinrichsweikamp
parents:
diff changeset
950 global update_battery_registers
heinrichsweikamp
parents:
diff changeset
951 update_battery_registers:
heinrichsweikamp
parents:
diff changeset
952 ; save battery_gauge:6 into EEPROM 0x07-0x0C
heinrichsweikamp
parents:
diff changeset
953 clrf EEADRH
heinrichsweikamp
parents:
diff changeset
954 movff battery_gauge+0,EEDATA
heinrichsweikamp
parents:
diff changeset
955 write_int_eeprom 0x07
heinrichsweikamp
parents:
diff changeset
956 movff battery_gauge+1,EEDATA
heinrichsweikamp
parents:
diff changeset
957 write_int_eeprom 0x08
heinrichsweikamp
parents:
diff changeset
958 movff battery_gauge+2,EEDATA
heinrichsweikamp
parents:
diff changeset
959 write_int_eeprom 0x09
heinrichsweikamp
parents:
diff changeset
960 movff battery_gauge+3,EEDATA
heinrichsweikamp
parents:
diff changeset
961 write_int_eeprom 0x0A
heinrichsweikamp
parents:
diff changeset
962 movff battery_gauge+4,EEDATA
heinrichsweikamp
parents:
diff changeset
963 write_int_eeprom 0x0B
heinrichsweikamp
parents:
diff changeset
964 movff battery_gauge+5,EEDATA
heinrichsweikamp
parents:
diff changeset
965 write_int_eeprom 0x0C
heinrichsweikamp
parents:
diff changeset
966 bcf onehourupdate ; Clear flag
heinrichsweikamp
parents:
diff changeset
967 return
heinrichsweikamp
parents:
diff changeset
968
heinrichsweikamp
parents:
diff changeset
969
heinrichsweikamp
parents:
diff changeset
970 END