Mercurial > public > mk2
annotate code_part1/OSTC_code_asm_part1/simulator.asm @ 842:454ef5c2e6aa default tip
Bugfix: Auto-SP did not show >9m for some 2C hardware versions in German language firmware
Make year settings until 2040 possible (This is likely the final release for this model)
| author | heinrichsweikamp |
|---|---|
| date | Sat, 29 Nov 2025 14:11:07 +0100 |
| parents | 2a0e5d884fc3 |
| children |
| rev | line source |
|---|---|
| 0 | 1 |
| 815 | 2 ; OSTC Mk.2, 2N and 2C - diving computer code |
|
807
c50296c3059e
BUGFIX: Divetime had unwanted "." behind the minutes
heinrichsweikamp
parents:
760
diff
changeset
|
3 ; Copyright (C) 2015 HeinrichsWeikamp GbR |
| 0 | 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 ; | |
| 760 | 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 | |
| 430 | 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: | |
| 681 | 48 call DISP_brightness_full ;max. brightness |
| 49 call DISP_ClearScreen | |
| 50 call DISP_simulator_mask | |
| 0 | 51 |
| 52 menu_simulator2: | |
| 576 | 53 call menu_pre_loop_common ; Clear some menu flags, timeout and switches |
| 681 | 54 call DISP_simulator_data |
| 55 call DISP_menu_cursor | |
| 0 | 56 |
| 57 menu_simulator_loop: | |
| 58 call check_switches_menu | |
| 59 menu_simulator_loop2: | |
| 575 | 60 btfsc onesecupdate |
| 61 call menu_check_dive_and_timeout ; "Goto restart" or sets sleepmode flag | |
| 0 | 62 bcf onesecupdate ; End of one second tasks |
| 63 | |
| 64 btfsc menubit2 | |
| 65 goto menu_simulator_do ; call submenu | |
| 66 | |
| 67 btfss menubit | |
| 35 | 68 goto menu_simulator_exit |
| 0 | 69 |
| 70 btfsc sleepmode | |
| 35 | 71 goto menu_simulator_exit |
| 0 | 72 |
| 73 bra menu_simulator_loop | |
| 74 | |
| 75 menu_simulator_do: ; calls submenu | |
| 76 dcfsnz menupos,F | |
| 369 | 77 bra simulator_inc_interval |
| 78 dcfsnz menupos,F | |
| 0 | 79 bra simulator_startdive |
| 80 dcfsnz menupos,F | |
| 81 bra simulator_inc_bottomtime | |
| 82 dcfsnz menupos,F | |
| 83 bra simulator_inc_maxdepth | |
| 84 dcfsnz menupos,F | |
| 85 bra simulator_calc_deco | |
| 369 | 86 |
| 35 | 87 menu_simulator_exit: |
| 0 | 88 movlw d'4' |
| 89 movwf menupos | |
| 369 | 90 goto more_menu2 ; exit... |
| 0 | 91 |
| 369 | 92 simulator_inc_interval: |
| 93 movff char_I_dive_interval,PRODL | |
| 389 | 94 movlw .3 |
| 95 addwf PRODL,F | |
| 369 | 96 movlw .24*6 ; Max 24h delay. |
| 97 cpfslt PRODL | |
| 98 clrf PRODL | |
| 99 movff PRODL,char_I_dive_interval | |
| 100 | |
| 101 movlw d'1' | |
| 102 movwf menupos | |
| 103 bra menu_simulator2 | |
| 104 | |
| 0 | 105 simulator_inc_bottomtime: |
| 106 movlw d'2' | |
| 430 | 107 addwf sim_btm_time,F ; Here: Bottomtime in m |
| 0 | 108 movlw d'199' |
| 430 | 109 cpfslt sim_btm_time |
| 110 movwf sim_btm_time | |
| 369 | 111 movlw d'3' |
| 0 | 112 movwf menupos |
| 113 bra menu_simulator2 | |
| 114 | |
| 115 simulator_inc_maxdepth: | |
| 116 movlw d'3' | |
| 430 | 117 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
|
118 movlw d'120' |
| 430 | 119 cpfslt sim_btm_depth |
| 120 movwf sim_btm_depth | |
| 369 | 121 movlw d'4' |
| 0 | 122 movwf menupos |
| 123 bra menu_simulator2 | |
| 124 | |
| 369 | 125 ;============================================================================= |
| 126 | |
| 0 | 127 simulator_startdive: |
| 33 | 128 ; Descent to -15m depth |
| 0 | 129 ; Set standalone_simulator flag (Displays Simulator menu during simulation by pressing ENTER button) |
| 130 ; Clear standalone_simulator after (any) dive | |
| 131 bsf simulatormode_active ; normal simulator mode | |
| 132 bsf standalone_simulator ; Standalone Simulator active | |
| 369 | 133 |
| 430 | 134 movff sim_btm_depth,xA+0 |
| 0 | 135 clrf xA+1 |
| 136 movlw d'100' | |
| 137 movwf xB+0 | |
| 138 clrf xB+1 | |
| 139 call mult16x16 ;xA*xB=xC ; Depth in m*100 | |
| 140 | |
| 62 | 141 movlw LOW d'1000' |
| 0 | 142 addwf xC+0,F |
| 62 | 143 movlw HIGH d'1000' |
|
398
ab962c4b19d6
Fixing issue 50, correct "Bar" to "bar" in texts and comments
heinrichsweikamp
parents:
390
diff
changeset
|
144 addwfc xC+1,F ; add 1000mbar |
| 62 | 145 |
| 0 | 146 movff xC+0,sim_pressure+0 |
| 147 movff xC+1,sim_pressure+1 | |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
292
diff
changeset
|
148 |
|
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
292
diff
changeset
|
149 ; 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
|
150 movff sim_pressure+0,amb_pressure+0 |
| 0 | 151 movff sim_pressure+1,amb_pressure+1 |
| 385 | 152 call comp_air_pressure0 ; Make sure to have depth in rel_pressure:2 |
| 0 | 153 |
| 154 bcf menubit2 | |
| 155 bcf menubit3 | |
| 156 bcf menubit | |
| 576 | 157 call wait_switches ; Waits until switches are released, resets flag if button stays pressed! |
| 0 | 158 |
| 369 | 159 call simulator_save_tissue_data ; Stores 32 floats "pre_tissue" into bank3 |
| 0 | 160 |
| 369 | 161 movff char_I_dive_interval,WREG ; Any interval ? |
| 162 iorlw 0 ; Test for null | |
| 163 btfss STATUS,Z | |
| 164 call deco_calc_dive_interval ; NZ: call interval subroutine. | |
| 165 movlb 1 | |
| 166 | |
| 167 movlw d'3' ; Begin of deco cycle (reset table). | |
| 168 movff WREG,char_O_deco_status ; Reset Deco module. | |
| 200 | 169 |
| 369 | 170 bsf divemode ; Set divemode flag |
| 171 ostc_debug 'P' ; Sends debug-information to screen if debugmode active | |
| 172 goto diveloop ; Start Divemode | |
| 0 | 173 |
|
279
8514588eb6a2
Mark gas-switch stops for decoplans, displayed in yellow.
JeanDo
parents:
278
diff
changeset
|
174 ;============================================================================= |
|
8514588eb6a2
Mark gas-switch stops for decoplans, displayed in yellow.
JeanDo
parents:
278
diff
changeset
|
175 ; Show decoplanning result. |
|
8514588eb6a2
Mark gas-switch stops for decoplans, displayed in yellow.
JeanDo
parents:
278
diff
changeset
|
176 ; |
| 0 | 177 simulator_show_decoplan: |
| 681 | 178 call DISP_ClearScreen |
| 179 call DISP_simdata_screen | |
| 124 | 180 call divemenu_see_decoplan |
| 181 | |
| 184 | 182 WIN_LEFT .0 |
| 681 | 183 call DISP_standard_color |
| 184 | 184 |
| 124 | 185 ; Display TTS, if any... |
| 168 | 186 movff int_O_ascenttime+0,lo |
| 187 movff int_O_ascenttime+1,hi | |
| 188 movf lo,W | |
| 189 iorwf hi,W | |
| 124 | 190 bz simulator_decoplan_notts |
| 184 | 191 |
| 292 | 192 WIN_TOP .162 |
| 184 | 193 lfsr FSR2, letter |
|
279
8514588eb6a2
Mark gas-switch stops for decoplans, displayed in yellow.
JeanDo
parents:
278
diff
changeset
|
194 OUTPUTTEXT .85 ; TTS |
| 184 | 195 STRCAT ": " |
| 196 bsf leftbind | |
| 197 output_16 | |
| 198 STRCAT_PRINT "'" | |
| 199 | |
| 200 simulator_decoplan_notts: | |
| 292 | 201 WIN_TOP .190 ; Print calculated CNS before and after dive |
| 440 | 202 |
| 203 incf sim_CNS,W ; Detect CNS simulation overflow. | |
| 204 bz simulator_decoplan_cns_1 | |
| 205 | |
| 206 movlw .100 ; Detect if CNS > 100% | |
| 207 cpfslt sim_CNS | |
| 681 | 208 call DISP_warnings_color ; Yes: draw in red ! |
| 440 | 209 |
| 445 | 210 STRCPY TXT_CNS4 |
| 292 | 211 movff char_O_CNS_fraction,lo ; Current CNS, before dive. |
| 212 output_8 | |
| 213 STRCAT "%\x92" ; Right-arrow | |
| 440 | 214 |
| 430 | 215 movff sim_CNS,lo ; Get back CNS value. |
| 292 | 216 output_8 ; CNS after dive. |
| 217 STRCAT_PRINT "%" | |
| 440 | 218 bra simulator_decoplan_cns_2 |
| 124 | 219 |
| 440 | 220 simulator_decoplan_cns_1: |
| 681 | 221 call DISP_warnings_color ; Yes: draw in red ! |
| 445 | 222 STRCPY_PRINT TXT_CNSGR10 |
| 440 | 223 |
| 224 simulator_decoplan_cns_2: | |
| 717 | 225 call DISP_divemask_color |
| 124 | 226 DISPLAYTEXT .188 ; Sim. Results: |
| 717 | 227 call DISP_standard_color |
| 34 | 228 |
| 64 | 229 simulator_show_decoplan1: |
| 576 | 230 call wait_switches ; Waits until switches are released, resets flag if button stays pressed! |
| 0 | 231 simulator_show_decoplan2: |
| 575 | 232 btfsc uart_dump_screen ; Asked to dump screen contains ? |
| 233 call dump_screen ; Yes! | |
| 369 | 234 |
| 575 | 235 btfsc onesecupdate |
| 236 call menu_check_dive_and_timeout ; "Goto restart" or sets sleepmode flag | |
| 237 | |
| 238 bcf onesecupdate ; End of one second tasks | |
| 0 | 239 |
| 240 simulator_show_decoplan3: | |
| 64 | 241 btfsc switch_right |
| 369 | 242 bra menu_simulator1 ; Quit display |
| 0 | 243 |
| 64 | 244 btfsc switch_left |
| 224 | 245 bra simulator_show_decoplan5 ; Next decoplan-page. |
| 0 | 246 |
| 247 btfsc sleepmode | |
| 248 goto more_menu | |
| 249 | |
| 250 bra simulator_show_decoplan2 | |
| 251 | |
| 64 | 252 simulator_show_decoplan5: |
| 124 | 253 incf decoplan_page,F |
| 64 | 254 btfsc last_ceiling_gf_shown ; last ceiling shown? |
| 255 bra simulator_show_decoplan5_0 ; All done, clear and return | |
| 256 | |
| 681 | 257 call DISP_decoplan ; Re-Draw Current page of GF Decoplan |
| 64 | 258 bra simulator_show_decoplan1 |
| 259 | |
|
231
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
260 ;---- 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
|
261 simulator_show_decoplan5_0: |
|
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
262 btfss display_see_deco ; Already displayed ? |
| 369 | 263 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
|
264 |
|
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
168
diff
changeset
|
265 bcf display_see_deco ; clear flag |
| 224 | 266 |
|
231
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
267 btfsc FLAG_const_ppO2_mode ; In CCR mode ? |
| 369 | 268 bra menu_simulator1 ; YES: finished. |
|
231
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
269 |
|
290
4dbff2aa31ee
Hunting for refusing to ignore disabled gas in list...
JeanDo
parents:
279
diff
changeset
|
270 ; Make sure to pass first gas |
|
240
d995e220ddac
BUGFIX Gas Usage when first gas is not #1 (bug BB22).
JeanDo
parents:
236
diff
changeset
|
271 clrf EEADRH |
|
290
4dbff2aa31ee
Hunting for refusing to ignore disabled gas in list...
JeanDo
parents:
279
diff
changeset
|
272 read_int_eeprom .33 ; First gas. |
|
240
d995e220ddac
BUGFIX Gas Usage when first gas is not #1 (bug BB22).
JeanDo
parents:
236
diff
changeset
|
273 movff EEDATA,char_I_first_gas |
| 225 | 274 |
| 275 ; Compute gas consumption for each tank. | |
| 224 | 276 call deco_gas_volumes |
| 277 movlb 1 | |
| 278 | |
|
230
9406a5b0ba5e
BUGFIX Clear bottom stops when display gas usage (bug BB23)
JeanDo
parents:
229
diff
changeset
|
279 ; Clear the complete stop result column: |
| 682 | 280 WIN_BOX_BLACK .0, .239, .85, .159 ;top, bottom, left, right |
| 224 | 281 |
| 282 movlw d'10' | |
| 283 movwf waitms_temp ; Row for gas list is .10+.25 | |
| 284 clrf wait_temp ; Gas counter | |
| 285 lfsr FSR0,int_O_gas_volumes ; Initialize indexed addressing. | |
| 286 | |
| 287 WIN_LEFT .90 ; Set column | |
| 681 | 288 call DISP_standard_color |
| 224 | 289 |
| 290 simulator_show_decoplan5_loop: | |
| 291 incf wait_temp,F ; Increment gas # | |
| 292 | |
| 293 movlw .25 | |
| 294 addwf waitms_temp,F ; Increase row position | |
| 295 movff waitms_temp,win_top ; Set Row | |
| 296 | |
| 297 movff POSTINC0,lo ; Read (16bit) result, low first, | |
| 298 movff POSTINC0,hi ; then high. | |
| 299 movf lo,W ; Null ? | |
| 300 iorwf hi,W | |
| 301 bz simulator_show_decoplan5_1 ; Skip printing. | |
| 302 | |
| 303 movf lo,W ; == 65535 (saturated ?) | |
| 225 | 304 andwf hi,W |
| 224 | 305 incf WREG |
| 306 bnz simulator_show_decoplan5_2 | |
| 681 | 307 call DISP_warnings_color |
| 265 | 308 STRCPY_PRINT "= xxxx.x" |
| 681 | 309 call DISP_standard_color |
| 265 | 310 bra simulator_show_decoplan5_1 |
| 224 | 311 |
| 312 simulator_show_decoplan5_2: | |
| 313 STRCPY "= " | |
| 314 | |
| 232 | 315 bsf leftbind |
|
441
4826dd98514b
NEW: Decoplanner OC volumes in liters (or bars), up to 65000.
JeanDo
parents:
440
diff
changeset
|
316 output_16 ; No decimal anymore. |
| 232 | 317 bcf leftbind |
| 224 | 318 call word_processor ; No unit: can be bars or litters. |
| 319 | |
| 320 ; Loop for all 5 gas | |
| 321 simulator_show_decoplan5_1: | |
| 322 movlw d'5' ; list all five gases | |
| 323 cpfseq wait_temp ; All gases shown? | |
| 324 bra simulator_show_decoplan5_loop ; No | |
| 325 | |
| 719 | 326 call DISP_divemask_color |
|
231
f9d42f8ff97b
BUGFIX Don't show (nosense) gas consumption in CCR mode (bug BB20).
JeanDo
parents:
230
diff
changeset
|
327 DISPLAYTEXTH .301 ; OCR Gas Usage: |
| 719 | 328 call DISP_standard_color |
| 224 | 329 |
| 330 bra simulator_show_decoplan1 | |
|
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
168
diff
changeset
|
331 |
| 271 | 332 ;============================================================================= |
| 333 ; OSTC Simulator: compute a new runtime | |
| 334 ; | |
| 0 | 335 simulator_calc_deco: |
|
664
9c13bf8a3033
Ignore decoplanner in gauge and apnoe mode
heinrichsweikamp
parents:
596
diff
changeset
|
336 btfsc gauge_mode ; In Gauge mode? |
|
9c13bf8a3033
Ignore decoplanner in gauge and apnoe mode
heinrichsweikamp
parents:
596
diff
changeset
|
337 bra menu_simulator ; Yes, igonore decoplaner |
|
9c13bf8a3033
Ignore decoplanner in gauge and apnoe mode
heinrichsweikamp
parents:
596
diff
changeset
|
338 btfsc FLAG_apnoe_mode ; In Apnoe mode? |
|
9c13bf8a3033
Ignore decoplanner in gauge and apnoe mode
heinrichsweikamp
parents:
596
diff
changeset
|
339 bra menu_simulator ; Yes, igonore decoplaner |
|
9c13bf8a3033
Ignore decoplanner in gauge and apnoe mode
heinrichsweikamp
parents:
596
diff
changeset
|
340 |
|
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
341 call simulator_save_tissue_data ; Stores 32 floats "pre_tissue" into bank3 |
| 0 | 342 |
| 369 | 343 movff char_I_dive_interval,WREG ; Any interval ? |
| 344 iorlw 0 ; Test for null | |
| 345 btfss STATUS,Z | |
| 346 call deco_calc_dive_interval ; NZ: call interval subroutine. | |
| 347 movlb 1 | |
| 348 | |
| 292 | 349 bsf simulatormode_active ; normal simulator mode |
| 350 bsf standalone_simulator ; Standalone Simulator active | |
| 351 bsf no_sensor_int ; Disable sensor interrupt | |
| 390 | 352 clrf T3CON ; Disable timer3 counter, |
| 292 | 353 clrf TMR3L ; so the simu won't stop right away. |
| 537 | 354 nop |
|
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
355 clrf TMR3H |
|
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
356 |
| 292 | 357 call diveloop_boot ; configure gases, etc. |
|
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
358 |
| 224 | 359 ; Save dive parameters for gas volume estimation: |
| 430 | 360 movff sim_btm_depth,char_I_bottom_depth |
| 361 movff sim_btm_time,char_I_bottom_time | |
| 224 | 362 |
| 430 | 363 movff sim_btm_depth,xA+0 ; Bottom depth. |
| 0 | 364 clrf xA+1 |
| 365 movlw d'100' | |
| 366 movwf xB+0 | |
| 367 clrf xB+1 | |
| 292 | 368 call mult16x16 ;xA*xB=xC, Depth in m*100 |
| 0 | 369 |
| 62 | 370 movlw LOW d'1000' |
| 0 | 371 addwf xC+0,F |
| 62 | 372 movlw HIGH d'1000' |
|
398
ab962c4b19d6
Fixing issue 50, correct "Bar" to "bar" in texts and comments
heinrichsweikamp
parents:
390
diff
changeset
|
373 addwfc xC+1,F ; add 1000mbar |
| 62 | 374 |
| 0 | 375 movff xC+0,sim_pressure+0 |
| 376 movff xC+1,sim_pressure+1 | |
| 377 | |
| 717 | 378 call DISP_divemask_color |
| 292 | 379 DISPLAYTEXT .12 ; "Wait..." |
| 717 | 380 call DISP_standard_color |
| 0 | 381 |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
292
diff
changeset
|
382 ; 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
|
383 movff sim_pressure+0,amb_pressure+0 |
|
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
384 movff sim_pressure+1,amb_pressure+1 |
|
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
385 |
| 197 | 386 call divemode_check_decogases ; Checks for decogases and sets the gases |
| 387 call divemode_prepare_flags_for_deco | |
| 292 | 388 call set_first_gas ; Set current N2/He/O2 ratios. |
| 593 | 389 call set_actual_ppo2 ; Then configure char_I_actual_ppO2 (For CNS) |
|
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
390 |
|
592
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
391 read_int_eeprom d'34' ; Read deco data |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
392 movlw .6 |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
393 cpfseq EEDATA |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
394 bra simulator_calc_deco1 |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
395 ; in PSCR mode, compute fO2 into char_I_O2_ratio |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
396 call compute_pscr_ppo2 ; pSCR ppO2 into sub_c:2 |
| 596 | 397 movff sub_c+0,xA+0 |
| 398 movff sub_c+1,xA+1 | |
| 399 movlw d'100' | |
| 400 movwf xB+0 | |
| 401 clrf xB+1 | |
| 402 call div16x16 ; /100 | |
| 403 tstfsz xC+1 ; Is ppO2 > 2.55bar ? | |
| 404 setf xC+0 ; yes: bound to 2.55... better than wrap around. | |
| 405 movff xC+0,char_I_actual_ppO2 ; copy last ppO2 to buffer register (for pSCR CNS) | |
|
592
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
406 movff sub_c+0,xA+0 |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
407 movff sub_c+1,xA+1 |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
408 movlw LOW .10 |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
409 movwf xB+0 |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
410 movlw HIGH .10 |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
411 movwf xB+1 |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
412 call mult16x16 ;xA*xB=xC -> xC:4 = ppO2*1000 |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
413 |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
414 SAFE_2BYTE_COPY amb_pressure, xB |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
415 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
416 ; xC+0 has O2 in percent |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
417 movff xC+0,char_I_O2_ratio |
|
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
418 |
| 593 | 419 |
|
592
cda5b45b953f
NEW: Deco mode "pSCR-GF": Computes deco and CNS based on pSCR parameters (CF62/63)
heinrichsweikamp
parents:
576
diff
changeset
|
420 simulator_calc_deco1: |
| 278 | 421 ; First minute is special: init everything. |
| 200 | 422 movlw d'3' ; Begin of deco cycle (reset table). |
| 197 | 423 movff WREG,char_O_deco_status ; Reset Deco module. |
| 424 | |
| 278 | 425 movlw d'1' |
| 426 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
|
427 |
| 278 | 428 call deco_calc_hauptroutine ; Reset table + sim one minute for descent. |
| 292 | 429 call deco_calc_CNS_fraction ; Also calculate CNS (in 1min loop) |
| 197 | 430 movlb b'00000001' ; rambank 1 selected |
| 32 | 431 |
| 430 | 432 decf sim_btm_time,F ; One minute done. |
|
439
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
433 bz simulator_calc_deco_loop_end |
| 0 | 434 |
| 278 | 435 ; Loop for bottom time duration |
| 32 | 436 simulator_calc_deco_loop2: |
| 681 | 437 call DISP_simulator_data ; Update display of bottom time. |
| 32 | 438 |
| 292 | 439 call deco_calc_tissue ; JUST calc tissue (faster). |
| 440 call deco_calc_CNS_fraction ; Also calculate CNS (in 1min loop) | |
| 441 movlb b'00000001' ; rambank 1 selected | |
| 442 ostc_debug 'C' ; Sends debug-information to screen if debugmode active | |
| 197 | 443 |
| 430 | 444 decfsz sim_btm_time,F ; Decrement bottom time, |
| 278 | 445 bra simulator_calc_deco_loop2 ; and loop while not finished. |
| 32 | 446 |
|
439
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
447 ; 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
|
448 simulator_calc_deco_loop_end: |
| 32 | 449 movlw d'0' |
| 278 | 450 movff WREG,char_I_step_is_1min ; Back to 2 second deco mode |
| 197 | 451 |
| 271 | 452 clrf timeout_counter2 ; timeout used as maxloop here |
| 278 | 453 movff char_I_bottom_depth,char_O_deco_last_stop |
| 454 | |
| 197 | 455 simulator_calc_deco2: |
| 456 call deco_calc_hauptroutine ; calc_tissue | |
| 457 movlb b'00000001' ; rambank 1 selected | |
| 0 | 458 |
| 430 | 459 movff char_O_deco_last_stop,sim_btm_depth |
| 681 | 460 call DISP_simulator_data ; Animate ascent simu. |
| 278 | 461 |
| 271 | 462 dcfsnz timeout_counter2,F ; Abort loop (max. 256 tries)? |
| 262 | 463 bra simulator_calc_deco3 ; Yes... |
| 464 | |
| 197 | 465 movff char_O_deco_status,WREG |
| 278 | 466 iorwf WREG ; deco_status=0 if decompression calculation done |
| 467 bnz simulator_calc_deco2 ; Not finished | |
| 0 | 468 |
| 292 | 469 ; Finished |
| 262 | 470 simulator_calc_deco3: |
|
439
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
471 call deco_calc_CNS_planning ; Compute cNS after full ascent. |
| 442 | 472 movlb 0x01 ; Back to RAM Bank1 |
| 430 | 473 movff char_O_CNS_fraction,sim_CNS ; Save calculated CNS. |
| 292 | 474 rcall simulator_restore_tissue_data ; Restore CNS & 32 floats "pre_tissue" from vault |
| 0 | 475 |
| 197 | 476 bcf simulatormode_active ; normal simulator mode |
| 477 bcf standalone_simulator ; Standalone Simulator active | |
|
269
be06783f533b
hunting for bug#30 - solved by disabling timer3 (?)
heinrichsweikamp
parents:
265
diff
changeset
|
478 bcf no_sensor_int ; Re-enable sensor interrupt |
| 0 | 479 |
| 480 WAITMS d'250' | |
| 481 WAITMS d'250' | |
| 197 | 482 WAITMS d'250' ; Wait for Pressure Sensor to get real pressure again... |
| 0 | 483 |
| 335 | 484 movlw d'5' ; Pre-Set Cursor to "Show Decoplan" |
| 197 | 485 movwf menupos |
| 430 | 486 movff char_I_bottom_time,sim_btm_time ; Restore bottom time, |
| 487 movff char_I_bottom_depth,sim_btm_depth ; and depth. | |
| 369 | 488 |
| 489 clrf timeout_counter2 ; Restart menu timeout. | |
| 490 bra simulator_show_decoplan ; Done. | |
| 49 | 491 |
|
439
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
492 ;============================================================================= |
|
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
493 |
| 49 | 494 simulator_save_tissue_data: |
| 335 | 495 bsf restore_deco_data ; Set restore flag |
| 496 ostc_debug 'S' ; Sends debug-information to screen if debugmode active | |
| 116 | 497 call deco_push_tissues_to_vault |
| 335 | 498 movlb 0x01 ; Back to RAM Bank1 |
| 499 ostc_debug 'T' ; Sends debug-information to screen if debugmode active | |
| 49 | 500 return |
| 501 | |
|
439
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
502 ;============================================================================= |
|
b9cf06de8aca
BUGFIX: Decoplanner accumulates CNS during ascent (bug #55)
JeanDo
parents:
430
diff
changeset
|
503 |
| 49 | 504 simulator_restore_tissue_data: |
|
229
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
225
diff
changeset
|
505 bcf restore_deco_data ; clear restore flag |
|
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
225
diff
changeset
|
506 ostc_debug 'S' ; Sends debug-information to screen if debugmode active |
| 292 | 507 call deco_pull_tissues_from_vault ; Restore CNS too... |
| 49 | 508 movlb 0x01 ; Back to RAM Bank1 |
|
229
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
225
diff
changeset
|
509 ostc_debug 'T' ; Sends debug-information to screen if debugmode active |
| 49 | 510 |
| 511 ostc_debug 'G' ; Sends debug-information to screen if debugmode active | |
| 116 | 512 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
|
513 movlb b'00000001' ; select ram bank 1 |
| 519 | 514 |
| 515 ; Reset gradient factor until next computation, to avoid spurious | |
| 516 ; displays after simulation. | |
| 517 clrf WREG | |
| 518 movff WREG,char_O_gradient_factor | |
| 519 movff WREG,char_O_relative_gradient_GF | |
| 520 | |
|
229
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
225
diff
changeset
|
521 ; 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
|
522 ; during simulation, which is the right thing to do... |
| 49 | 523 ostc_debug 'H' ; Sends debug-information to screen if debugmode active |
| 524 | |
| 525 return |
