Mercurial > public > mk2
annotate code_part1/OSTC_code_asm_part1/simulator.asm @ 549:cdc1163a8e9e
minor docu update
author | heinrichsweikamp |
---|---|
date | Thu, 02 Feb 2012 16:05:09 +0100 |
parents | 3091628b2742 |
children | cbdcbbc91877 |
rev | line source |
---|---|
0 | 1 |
2 ; OSTC - diving computer code | |
3 ; Copyright (C) 2008 HeinrichsWeikamp GbR | |
4 | |
5 ; This program is free software: you can redistribute it and/or modify | |
6 ; it under the terms of the GNU General Public License as published by | |
7 ; the Free Software Foundation, either version 3 of the License, or | |
8 ; (at your option) any later version. | |
9 | |
10 ; This program is distributed in the hope that it will be useful, | |
11 ; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 ; GNU General Public License for more details. | |
14 | |
15 ; You should have received a copy of the GNU General Public License | |
16 ; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 | |
18 | |
19 ; menu "Simulator" | |
20 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com | |
21 ; written: 081210 | |
22 ; last updated: 081210 | |
23 ; known bugs: | |
24 ; ToDo: | |
25 | |
430 | 26 ;============================================================================= |
27 ; Temp data, local to this module, moved to ACCES0 area. | |
28 ; | |
29 CBLOCK tmp ; Into safe (from C library) area. | |
30 sim_btm_time ; Simulated bottom time | |
31 sim_btm_depth ; Simulated max depth | |
32 sim_CNS ; Backup CNS value during decoplanning. | |
33 ENDC | |
34 | |
35 ;============================================================================= | |
36 | |
0 | 37 menu_simulator: |
352
544a96faa9f3
New "Quit sim" option in simulated dive mode, CF02 now allows more then 240seconds, Bugfix with runtime=1min in runtime simulator
Heinrichsweikamp
parents:
344
diff
changeset
|
38 movlw d'3' |
430 | 39 movwf sim_btm_time ; Bottom time |
0 | 40 movlw d'15' |
430 | 41 movwf sim_btm_depth ; Max. Depth |
0 | 42 movlw d'1' |
43 movwf menupos | |
369 | 44 clrf WREG ; Interval |
45 movff WREG,char_I_dive_interval | |
0 | 46 |
47 menu_simulator1: | |
48 clrf timeout_counter2 | |
49 bsf menubit | |
50 bsf cursor | |
49 | 51 call PLED_brightness_full ;max. brightness |
0 | 52 call PLED_ClearScreen |
53 call PLED_simulator_mask | |
54 | |
55 menu_simulator2: | |
56 bcf switch_left | |
57 bcf switch_right | |
58 bcf menubit2 | |
59 bcf menubit3 | |
60 call PLED_simulator_data | |
61 call PLED_menu_cursor | |
62 | |
63 menu_simulator_loop: | |
64 call check_switches_menu | |
65 menu_simulator_loop2: | |
66 btfss onesecupdate | |
67 bra menu_simulator_loop3 | |
68 | |
69 call timeout_surfmode | |
70 call set_dive_modes | |
71 call test_charger ; check if charger IC is active | |
72 call get_battery_voltage ; get battery voltage | |
73 | |
74 bcf onesecupdate ; End of one second tasks | |
75 | |
76 menu_simulator_loop3: | |
77 btfsc menubit2 | |
78 goto menu_simulator_do ; call submenu | |
79 | |
80 btfss menubit | |
35 | 81 goto menu_simulator_exit |
0 | 82 |
83 btfsc sleepmode | |
35 | 84 goto menu_simulator_exit |
0 | 85 |
86 btfsc divemode | |
87 goto restart ; exit menu, restart and enter divemode | |
88 | |
89 bra menu_simulator_loop | |
90 | |
91 menu_simulator_do: ; calls submenu | |
92 dcfsnz menupos,F | |
369 | 93 bra simulator_inc_interval |
94 dcfsnz menupos,F | |
0 | 95 bra simulator_startdive |
96 dcfsnz menupos,F | |
97 bra simulator_inc_bottomtime | |
98 dcfsnz menupos,F | |
99 bra simulator_inc_maxdepth | |
100 dcfsnz menupos,F | |
101 bra simulator_calc_deco | |
369 | 102 |
35 | 103 menu_simulator_exit: |
0 | 104 movlw d'4' |
105 movwf menupos | |
369 | 106 goto more_menu2 ; exit... |
0 | 107 |
369 | 108 simulator_inc_interval: |
109 movff char_I_dive_interval,PRODL | |
389 | 110 movlw .3 |
111 addwf PRODL,F | |
369 | 112 movlw .24*6 ; Max 24h delay. |
113 cpfslt PRODL | |
114 clrf PRODL | |
115 movff PRODL,char_I_dive_interval | |
116 | |
117 movlw d'1' | |
118 movwf menupos | |
119 bra menu_simulator2 | |
120 | |
0 | 121 simulator_inc_bottomtime: |
122 movlw d'2' | |
430 | 123 addwf sim_btm_time,F ; Here: Bottomtime in m |
0 | 124 movlw d'199' |
430 | 125 cpfslt sim_btm_time |
126 movwf sim_btm_time | |
369 | 127 movlw d'3' |
0 | 128 movwf menupos |
129 bra menu_simulator2 | |
130 | |
131 simulator_inc_maxdepth: | |
132 movlw d'3' | |
430 | 133 addwf sim_btm_depth,F ; Here: Maxdepth in m |
415
d022c62a1df5
fixing issue with end-of-dive threshold in high-altitude mode
heinrichsweikamp
parents:
398
diff
changeset
|
134 movlw d'120' |
430 | 135 cpfslt sim_btm_depth |
136 movwf sim_btm_depth | |
369 | 137 movlw d'4' |
0 | 138 movwf menupos |
139 bra menu_simulator2 | |
140 | |
369 | 141 ;============================================================================= |
142 | |
0 | 143 simulator_startdive: |
33 | 144 ; Descent to -15m depth |
0 | 145 ; Set standalone_simulator flag (Displays Simulator menu during simulation by pressing ENTER button) |
146 ; Clear standalone_simulator after (any) dive | |
147 bsf simulatormode_active ; normal simulator mode | |
148 bsf standalone_simulator ; Standalone Simulator active | |
369 | 149 |
430 | 150 movff sim_btm_depth,xA+0 |
0 | 151 clrf xA+1 |
152 movlw d'100' | |
153 movwf xB+0 | |
154 clrf xB+1 | |
155 call mult16x16 ;xA*xB=xC ; Depth in m*100 | |
156 | |
62 | 157 movlw LOW d'1000' |
0 | 158 addwf xC+0,F |
62 | 159 movlw HIGH d'1000' |
398
ab962c4b19d6
Fixing issue 50, correct "Bar" to "bar" in texts and comments
heinrichsweikamp
parents:
390
diff
changeset
|
160 addwfc xC+1,F ; add 1000mbar |
62 | 161 |
0 | 162 movff xC+0,sim_pressure+0 |
163 movff xC+1,sim_pressure+1 | |
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
292
diff
changeset
|
164 |
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
292
diff
changeset
|
165 ; This override is done in ISR too, but do it right now also: |
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
292
diff
changeset
|
166 movff sim_pressure+0,amb_pressure+0 |
0 | 167 movff sim_pressure+1,amb_pressure+1 |
385 | 168 call comp_air_pressure0 ; Make sure to have depth in rel_pressure:2 |
0 | 169 |
170 bcf menubit2 | |
171 bcf menubit3 | |
172 bcf menubit | |
173 bcf switch_left | |
174 bcf switch_right | |
175 | |
369 | 176 call simulator_save_tissue_data ; Stores 32 floats "pre_tissue" into bank3 |
0 | 177 |
369 | 178 movff char_I_dive_interval,WREG ; Any interval ? |
179 iorlw 0 ; Test for null | |
180 btfss STATUS,Z | |
181 call deco_calc_dive_interval ; NZ: call interval subroutine. | |
182 movlb 1 | |
183 | |
184 movlw d'3' ; Begin of deco cycle (reset table). | |
185 movff WREG,char_O_deco_status ; Reset Deco module. | |
200 | 186 |
369 | 187 bsf divemode ; Set divemode flag |
188 ostc_debug 'P' ; Sends debug-information to screen if debugmode active | |
189 goto diveloop ; Start Divemode | |
0 | 190 |
279
8514588eb6a2
Mark gas-switch stops for decoplans, displayed in yellow.
JeanDo
parents:
278
diff
changeset
|
191 ;============================================================================= |
8514588eb6a2
Mark gas-switch stops for decoplans, displayed in yellow.
JeanDo
parents:
278
diff
changeset
|
192 ; Show decoplanning result. |
8514588eb6a2
Mark gas-switch stops for decoplans, displayed in yellow.
JeanDo
parents:
278
diff
changeset
|
193 ; |
0 | 194 simulator_show_decoplan: |
124 | 195 call PLED_ClearScreen |
196 call PLED_simdata_screen | |
197 call divemenu_see_decoplan | |
198 | |
184 | 199 WIN_LEFT .0 |
200 call PLED_standard_color | |
201 | |
124 | 202 ; Display TTS, if any... |
168 | 203 movff int_O_ascenttime+0,lo |
204 movff int_O_ascenttime+1,hi | |
205 movf lo,W | |
206 iorwf hi,W | |
124 | 207 bz simulator_decoplan_notts |
184 | 208 |
292 | 209 WIN_TOP .162 |
184 | 210 lfsr FSR2, letter |
279
8514588eb6a2
Mark gas-switch stops for decoplans, displayed in yellow.
JeanDo
parents:
278
diff
changeset
|
211 OUTPUTTEXT .85 ; TTS |
184 | 212 STRCAT ": " |
213 bsf leftbind | |
214 output_16 | |
215 STRCAT_PRINT "'" | |
216 | |
217 simulator_decoplan_notts: | |
292 | 218 WIN_TOP .190 ; Print calculated CNS before and after dive |
440 | 219 |
220 incf sim_CNS,W ; Detect CNS simulation overflow. | |
221 bz simulator_decoplan_cns_1 | |
222 | |
223 movlw .100 ; Detect if CNS > 100% | |
224 cpfslt sim_CNS | |
225 call PLED_warnings_color ; Yes: draw in red ! | |
226 | |
445 | 227 STRCPY TXT_CNS4 |
292 | 228 movff char_O_CNS_fraction,lo ; Current CNS, before dive. |
229 output_8 | |
230 STRCAT "%\x92" ; Right-arrow | |
440 | 231 |
430 | 232 movff sim_CNS,lo ; Get back CNS value. |
292 | 233 output_8 ; CNS after dive. |
234 STRCAT_PRINT "%" | |
440 | 235 bra simulator_decoplan_cns_2 |
124 | 236 |
440 | 237 simulator_decoplan_cns_1: |
238 call PLED_warnings_color ; Yes: draw in red ! | |
445 | 239 STRCPY_PRINT TXT_CNSGR10 |
440 | 240 |
241 simulator_decoplan_cns_2: | |
242 call PLED_standard_color ; Back to normal. | |
124 | 243 WIN_INVERT .1 ; Init new Wordprocessor |
244 DISPLAYTEXT .188 ; Sim. Results: | |
245 WIN_INVERT .0 ; Init new Wordprocessor | |
34 | 246 |
64 | 247 simulator_show_decoplan1: |
369 | 248 bcf switch_left |
249 bcf switch_right | |
0 | 250 simulator_show_decoplan2: |
369 | 251 btfsc uart_dump_screen ; Asked to dump screen contains ? |
252 call dump_screen ; Yes! | |
253 | |
254 btfss onesecupdate | |
255 bra simulator_show_decoplan3 | |
256 | |
257 call timeout_surfmode | |
258 call set_dive_modes | |
259 call test_charger ; check if charger IC is active | |
260 call get_battery_voltage ; get battery voltage | |
261 | |
262 bcf onesecupdate ; End of one second tasks | |
0 | 263 |
264 simulator_show_decoplan3: | |
64 | 265 btfsc switch_right |
369 | 266 bra menu_simulator1 ; Quit display |
0 | 267 |
64 | 268 btfsc switch_left |
224 | 269 bra simulator_show_decoplan5 ; Next decoplan-page. |
0 | 270 |
271 btfsc sleepmode | |
272 goto more_menu | |
273 | |
274 btfsc divemode | |
275 goto restart ; exit menu, restart and enter divemode | |
276 | |
277 bra simulator_show_decoplan2 | |
278 | |
64 | 279 simulator_show_decoplan5: |
124 | 280 incf decoplan_page,F |
64 | 281 btfsc last_ceiling_gf_shown ; last ceiling shown? |
282 bra simulator_show_decoplan5_0 ; All done, clear and return | |
283 | |
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
168
diff
changeset
|
284 call PLED_decoplan ; Re-Draw Current page of GF Decoplan |
64 | 285 bra simulator_show_decoplan1 |
286 | |
231
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
287 ;---- In OCR mode, show the gas Usage special page --------------------------- |
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
288 simulator_show_decoplan5_0: |
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
289 btfss display_see_deco ; Already displayed ? |
369 | 290 bra menu_simulator1 ; Exit to menu. |
231
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
291 |
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
168
diff
changeset
|
292 bcf display_see_deco ; clear flag |
224 | 293 |
231
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
294 btfsc FLAG_const_ppO2_mode ; In CCR mode ? |
369 | 295 bra menu_simulator1 ; YES: finished. |
231
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
296 |
290
4dbff2aa31ee
Hunting for refusing to ignore disabled gas in list...
JeanDo
parents:
279
diff
changeset
|
297 ; Make sure to pass first gas |
240
d995e220ddac
BUGFIX Gas Usage when first gas is not #1 (bug BB22).
JeanDo
parents:
236
diff
changeset
|
298 clrf EEADRH |
290
4dbff2aa31ee
Hunting for refusing to ignore disabled gas in list...
JeanDo
parents:
279
diff
changeset
|
299 read_int_eeprom .33 ; First gas. |
240
d995e220ddac
BUGFIX Gas Usage when first gas is not #1 (bug BB22).
JeanDo
parents:
236
diff
changeset
|
300 movff EEDATA,char_I_first_gas |
225 | 301 |
302 ; Compute gas consumption for each tank. | |
224 | 303 call deco_gas_volumes |
304 movlb 1 | |
305 | |
230
9406a5b0ba5e
BUGFIX Clear bottom stops when display gas usage (bug BB23)
JeanDo
parents:
229
diff
changeset
|
306 ; Clear the complete stop result column: |
292 | 307 WIN_BOX_BLACK .0, .239, .85, .160 ;top, bottom, left, right |
224 | 308 |
309 movlw d'10' | |
310 movwf waitms_temp ; Row for gas list is .10+.25 | |
311 clrf wait_temp ; Gas counter | |
312 lfsr FSR0,int_O_gas_volumes ; Initialize indexed addressing. | |
313 | |
314 WIN_LEFT .90 ; Set column | |
270
fda90f19486a
Don't show gas 1 usage black on back (bb28 followup)
JeanDo
parents:
269
diff
changeset
|
315 call PLED_standard_color |
224 | 316 |
317 simulator_show_decoplan5_loop: | |
318 incf wait_temp,F ; Increment gas # | |
319 | |
320 movlw .25 | |
321 addwf waitms_temp,F ; Increase row position | |
322 movff waitms_temp,win_top ; Set Row | |
323 | |
324 movff POSTINC0,lo ; Read (16bit) result, low first, | |
325 movff POSTINC0,hi ; then high. | |
326 movf lo,W ; Null ? | |
327 iorwf hi,W | |
328 bz simulator_show_decoplan5_1 ; Skip printing. | |
329 | |
330 movf lo,W ; == 65535 (saturated ?) | |
225 | 331 andwf hi,W |
224 | 332 incf WREG |
333 bnz simulator_show_decoplan5_2 | |
334 call PLED_warnings_color | |
265 | 335 STRCPY_PRINT "= xxxx.x" |
336 call PLED_standard_color | |
337 bra simulator_show_decoplan5_1 | |
224 | 338 |
339 simulator_show_decoplan5_2: | |
340 STRCPY "= " | |
341 | |
232 | 342 bsf leftbind |
441
4826dd98514b
NEW: Decoplanner OC volumes in liters (or bars), up to 65000.
JeanDo
parents:
440
diff
changeset
|
343 output_16 ; No decimal anymore. |
232 | 344 bcf leftbind |
224 | 345 call word_processor ; No unit: can be bars or litters. |
346 | |
347 ; Loop for all 5 gas | |
348 simulator_show_decoplan5_1: | |
349 movlw d'5' ; list all five gases | |
350 cpfseq wait_temp ; All gases shown? | |
351 bra simulator_show_decoplan5_loop ; No | |
352 | |
353 WIN_INVERT 1 | |
231
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
354 DISPLAYTEXTH .301 ; OCR Gas Usage: |
224 | 355 WIN_INVERT 0 |
356 | |
357 bra simulator_show_decoplan1 | |
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
168
diff
changeset
|
358 |
271 | 359 ;============================================================================= |
360 ; OSTC Simulator: compute a new runtime | |
361 ; | |
0 | 362 simulator_calc_deco: |
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
363 call simulator_save_tissue_data ; Stores 32 floats "pre_tissue" into bank3 |
0 | 364 |
369 | 365 movff char_I_dive_interval,WREG ; Any interval ? |
366 iorlw 0 ; Test for null | |
367 btfss STATUS,Z | |
368 call deco_calc_dive_interval ; NZ: call interval subroutine. | |
369 movlb 1 | |
370 | |
292 | 371 bsf simulatormode_active ; normal simulator mode |
372 bsf standalone_simulator ; Standalone Simulator active | |
373 bsf no_sensor_int ; Disable sensor interrupt | |
390 | 374 clrf T3CON ; Disable timer3 counter, |
292 | 375 clrf TMR3L ; so the simu won't stop right away. |
537 | 376 nop |
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
377 clrf TMR3H |
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
378 |
292 | 379 call diveloop_boot ; configure gases, etc. |
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
380 |
224 | 381 ; Save dive parameters for gas volume estimation: |
430 | 382 movff sim_btm_depth,char_I_bottom_depth |
383 movff sim_btm_time,char_I_bottom_time | |
224 | 384 |
430 | 385 movff sim_btm_depth,xA+0 ; Bottom depth. |
0 | 386 clrf xA+1 |
387 movlw d'100' | |
388 movwf xB+0 | |
389 clrf xB+1 | |
292 | 390 call mult16x16 ;xA*xB=xC, Depth in m*100 |
0 | 391 |
62 | 392 movlw LOW d'1000' |
0 | 393 addwf xC+0,F |
62 | 394 movlw HIGH d'1000' |
398
ab962c4b19d6
Fixing issue 50, correct "Bar" to "bar" in texts and comments
heinrichsweikamp
parents:
390
diff
changeset
|
395 addwfc xC+1,F ; add 1000mbar |
62 | 396 |
0 | 397 movff xC+0,sim_pressure+0 |
398 movff xC+1,sim_pressure+1 | |
399 | |
124 | 400 call PLED_topline_box |
0 | 401 WIN_INVERT .1 |
292 | 402 DISPLAYTEXT .12 ; "Wait..." |
0 | 403 WIN_INVERT .0 |
404 | |
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
292
diff
changeset
|
405 ; This override is done in ISR too, but do it right now also: |
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
292
diff
changeset
|
406 movff sim_pressure+0,amb_pressure+0 |
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
407 movff sim_pressure+1,amb_pressure+1 |
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
408 |
197 | 409 call divemode_check_decogases ; Checks for decogases and sets the gases |
410 call divemode_prepare_flags_for_deco | |
292 | 411 call set_first_gas ; Set current N2/He/O2 ratios. |
412 call set_actual_ppo2 ; Then configure char_I_actual_ppO2 | |
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
413 |
278 | 414 ; First minute is special: init everything. |
200 | 415 movlw d'3' ; Begin of deco cycle (reset table). |
197 | 416 movff WREG,char_O_deco_status ; Reset Deco module. |
417 | |
278 | 418 movlw d'1' |
419 movff WREG,char_I_step_is_1min ; 1 minute mode. | |
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
420 |
278 | 421 call deco_calc_hauptroutine ; Reset table + sim one minute for descent. |
292 | 422 call deco_calc_CNS_fraction ; Also calculate CNS (in 1min loop) |
197 | 423 movlb b'00000001' ; rambank 1 selected |
32 | 424 |
430 | 425 decf sim_btm_time,F ; One minute done. |
439
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
426 bz simulator_calc_deco_loop_end |
0 | 427 |
278 | 428 ; Loop for bottom time duration |
32 | 429 simulator_calc_deco_loop2: |
292 | 430 call PLED_simulator_data ; Update display of bottom time. |
32 | 431 |
292 | 432 call deco_calc_tissue ; JUST calc tissue (faster). |
433 call deco_calc_CNS_fraction ; Also calculate CNS (in 1min loop) | |
434 movlb b'00000001' ; rambank 1 selected | |
435 ostc_debug 'C' ; Sends debug-information to screen if debugmode active | |
197 | 436 |
430 | 437 decfsz sim_btm_time,F ; Decrement bottom time, |
278 | 438 bra simulator_calc_deco_loop2 ; and loop while not finished. |
32 | 439 |
439
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
440 ; Now the bottom time is finish, restart a full ascent simulation: |
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
441 simulator_calc_deco_loop_end: |
32 | 442 movlw d'0' |
278 | 443 movff WREG,char_I_step_is_1min ; Back to 2 second deco mode |
197 | 444 |
271 | 445 clrf timeout_counter2 ; timeout used as maxloop here |
278 | 446 movff char_I_bottom_depth,char_O_deco_last_stop |
447 | |
197 | 448 simulator_calc_deco2: |
449 call deco_calc_hauptroutine ; calc_tissue | |
450 movlb b'00000001' ; rambank 1 selected | |
0 | 451 |
430 | 452 movff char_O_deco_last_stop,sim_btm_depth |
278 | 453 call PLED_simulator_data ; Animate ascent simu. |
454 | |
271 | 455 dcfsnz timeout_counter2,F ; Abort loop (max. 256 tries)? |
262 | 456 bra simulator_calc_deco3 ; Yes... |
457 | |
197 | 458 movff char_O_deco_status,WREG |
278 | 459 iorwf WREG ; deco_status=0 if decompression calculation done |
460 bnz simulator_calc_deco2 ; Not finished | |
0 | 461 |
292 | 462 ; Finished |
262 | 463 simulator_calc_deco3: |
439
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
464 call deco_calc_CNS_planning ; Compute cNS after full ascent. |
442 | 465 movlb 0x01 ; Back to RAM Bank1 |
430 | 466 movff char_O_CNS_fraction,sim_CNS ; Save calculated CNS. |
292 | 467 rcall simulator_restore_tissue_data ; Restore CNS & 32 floats "pre_tissue" from vault |
0 | 468 |
197 | 469 bcf simulatormode_active ; normal simulator mode |
470 bcf standalone_simulator ; Standalone Simulator active | |
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
471 bcf no_sensor_int ; Re-enable sensor interrupt |
0 | 472 |
473 WAITMS d'250' | |
474 WAITMS d'250' | |
197 | 475 WAITMS d'250' ; Wait for Pressure Sensor to get real pressure again... |
0 | 476 |
335 | 477 movlw d'5' ; Pre-Set Cursor to "Show Decoplan" |
197 | 478 movwf menupos |
430 | 479 movff char_I_bottom_time,sim_btm_time ; Restore bottom time, |
480 movff char_I_bottom_depth,sim_btm_depth ; and depth. | |
369 | 481 |
482 clrf timeout_counter2 ; Restart menu timeout. | |
483 bra simulator_show_decoplan ; Done. | |
49 | 484 |
439
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
485 ;============================================================================= |
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
486 |
49 | 487 simulator_save_tissue_data: |
335 | 488 bsf restore_deco_data ; Set restore flag |
489 ostc_debug 'S' ; Sends debug-information to screen if debugmode active | |
116 | 490 call deco_push_tissues_to_vault |
335 | 491 movlb 0x01 ; Back to RAM Bank1 |
492 ostc_debug 'T' ; Sends debug-information to screen if debugmode active | |
49 | 493 return |
494 | |
439
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
495 ;============================================================================= |
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
496 |
49 | 497 simulator_restore_tissue_data: |
229
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
225
diff
changeset
|
498 bcf restore_deco_data ; clear restore flag |
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
225
diff
changeset
|
499 ostc_debug 'S' ; Sends debug-information to screen if debugmode active |
292 | 500 call deco_pull_tissues_from_vault ; Restore CNS too... |
49 | 501 movlb 0x01 ; Back to RAM Bank1 |
229
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
225
diff
changeset
|
502 ostc_debug 'T' ; Sends debug-information to screen if debugmode active |
49 | 503 |
504 ostc_debug 'G' ; Sends debug-information to screen if debugmode active | |
116 | 505 call deco_calc_desaturation_time ; calculate desaturation time |
229
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
225
diff
changeset
|
506 movlb b'00000001' ; select ram bank 1 |
519 | 507 |
508 ; Reset gradient factor until next computation, to avoid spurious | |
509 ; displays after simulation. | |
510 clrf WREG | |
511 movff WREG,char_O_gradient_factor | |
512 movff WREG,char_O_relative_gradient_GF | |
513 | |
229
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
225
diff
changeset
|
514 ; Note: should not reset nofly-time here: the true value have continued to be decremented |
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
225
diff
changeset
|
515 ; during simulation, which is the right thing to do... |
49 | 516 ostc_debug 'H' ; Sends debug-information to screen if debugmode active |
517 | |
518 return |