Mercurial > public > hwos_code
comparison src/simulator.asm @ 582:b455b31ce022
work on 2.97 stable
| author | heinrichsweikamp |
|---|---|
| date | Mon, 26 Feb 2018 16:40:28 +0100 |
| parents | b7eb98dbd800 |
| children | e1f0f5e3d4e4 |
comparison
equal
deleted
inserted
replaced
| 581:f5de1ff88814 | 582:b455b31ce022 |
|---|---|
| 1 ;============================================================================= | 1 ;============================================================================= |
| 2 ; | 2 ; |
| 3 ; File simulator.asm REFACTORED VERSION V2.95a1 | 3 ; File simulator.asm REFACTORED VERSION V2.98 |
| 4 ; | 4 ; |
| 5 ; Decoplan interface to C model code. | 5 ; Decoplan interface to C model code. |
| 6 ; | 6 ; |
| 7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. | 7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. |
| 8 ;============================================================================= | 8 ;============================================================================= |
| 9 ; HISTORY | 9 ; HISTORY |
| 10 ; 2011-07-09 : [jDG] Creation... | 10 ; 2011-07-09 : [jDG] Creation... |
| 11 | 11 |
| 12 #include "hwos.inc" ; Mandatory include | 12 #include "hwos.inc" ; Mandatory include |
| 13 #include "convert.inc" ; output_* | 13 #include "convert.inc" ; output_* |
| 14 #include "shared_definitions.h" ; Mailbox from/to p2_deco.c | 14 #include "shared_definitions.h" ; Mailbox from/to p2_deco.c |
| 15 #include "strings.inc" ; STRCPY,... | 15 #include "strings.inc" ; STRCPY,... |
| 16 #include "tft.inc" ; WIN_LEFT,... | 16 #include "tft.inc" ; WIN_LEFT,... |
| 17 #include "wait.inc" ; speed_* | 17 #include "wait.inc" ; speed_* |
| 18 #include "start.inc" | 18 #include "start.inc" |
| 19 #include "divemode.inc" | 19 #include "divemode.inc" |
| 20 #include "math.inc" | 20 #include "math.inc" |
| 21 #include "eeprom_rs232.inc" | 21 #include "eeprom_rs232.inc" |
| 22 #include "tft_outputs.inc" | 22 #include "tft_outputs.inc" |
| 23 #include "gaslist.inc" | 23 #include "gaslist.inc" |
| 24 | 24 #include "isr.inc" |
| 25 gui CODE | 25 |
| 26 | 26 gui CODE |
| 27 extern deco_clear_tissue | 27 |
| 28 extern deco_push_tissues_to_vault | 28 extern deco_clear_tissue |
| 29 extern deco_calc_dive_interval | 29 extern deco_push_tissues_to_vault |
| 30 extern deco_calc_hauptroutine | 30 extern deco_calc_dive_interval |
| 31 extern deco_pull_tissues_from_vault | 31 extern deco_calc_hauptroutine |
| 32 extern TFT_display_decotype_surface1 | 32 extern deco_pull_tissues_from_vault |
| 33 extern get_first_dil_to_WREG | 33 extern TFT_display_decotype_surface1 |
| 34 extern get_first_gas_to_WREG | 34 extern get_first_dil_to_WREG |
| 35 extern setup_dil_registers | 35 extern get_first_gas_to_WREG |
| 36 extern setup_gas_registers | 36 extern setup_dil_registers |
| 37 extern deco_setup_cc_diluents | 37 extern setup_gas_registers |
| 38 extern deco_setup_oc_gases | 38 extern deco_setup_cc_diluents |
| 39 | 39 extern deco_setup_oc_gases |
| 40 | 40 extern log_screendump_and_onesecond |
| 41 extern log_screendump_and_onesecond, logbook_preloop_tasks | 41 extern logbook_preloop_tasks |
| 42 extern do_planner_menu | 42 extern do_return_demo_planner |
| 43 | 43 |
| 44 ;---- Private temp variables ------------------------------------------------- | 44 |
| 45 | 45 ;---- Private local variables ------------------------------------------------- |
| 46 CBLOCK tmp+0x12 ; Reserved space for word processor and convert | 46 |
| 47 decoplan_index ; within each page | 47 CBLOCK local1 ; max size is 16 Byte !!! |
| 48 decoplan_gindex ; global index | 48 decoplan_index ; within each page |
| 49 decoplan_last ; Depth of last stop (CF#29) | 49 decoplan_gindex ; global index |
| 50 decoplan_flags ; Various private flags. | 50 decoplan_last ; Depth of last stop (CF#29) |
| 51 decoplan_page ; page number | 51 decoplan_flags ; Various private flags. |
| 52 decoplan_warnings ; deco engine warnings (ex reserved to tmp+0x18...) | 52 decoplan_page ; page number |
| 53 ENDC | 53 decoplan_warnings ; deco engine warnings |
| 54 | 54 gas_counter ; counter for looping through the gases |
| 55 row_pos ; used for positioning of graphic elements | |
| 56 ENDC ; used: 8 byte, remaining: 8 byte | |
| 57 | |
| 55 ;---- Defines ---------------------------------------------------------------- | 58 ;---- Defines ---------------------------------------------------------------- |
| 56 | 59 |
| 57 #define decoplan_last_ceiling_shown decoplan_flags,0 | 60 #define decoplan_last_ceiling_shown decoplan_flags,0 |
| 58 #define decoplan_abort decoplan_flags,1 | 61 #define decoplan_abort decoplan_flags,1 |
| 59 | 62 |
| 60 ;---- Demo deco planner ------------------------------------------------------ | 63 ;---- Demo deco planner ------------------------------------------------------ |
| 61 global do_demo_planner | 64 |
| 62 | 65 global do_demo_planner |
| 63 do_demo_planner: | 66 do_demo_planner: |
| 64 btfsc FLAG_gauge_mode ; =1: In Gauge mode | 67 btfsc FLAG_gauge_mode ; =1: In Gauge mode |
| 65 goto do_planner_menu | 68 goto do_return_demo_planner |
| 66 btfsc FLAG_apnoe_mode ; =1: In Apnea mode | 69 btfsc FLAG_apnoe_mode ; =1: In Apnea mode |
| 67 goto do_planner_menu | 70 goto do_return_demo_planner |
| 68 bcf decoplan_abort ; initialize (clear) abort flag | 71 bcf decoplan_abort ; initialize (clear) abort flag |
| 69 bcf is_bailout ; clear bailout condition (may have remained set from last invocation) | 72 bcf is_bailout ; clear bailout condition (may have remained set from last invocation) |
| 70 rcall deco_planer | 73 rcall deco_planer |
| 71 btfss decoplan_abort ; skip recall deco_show_plan if calculations were aborted | 74 btfss decoplan_abort ; skip recall deco_show_plan if calculations were aborted |
| 72 rcall deco_show_plan | 75 rcall deco_show_plan |
| 73 goto do_planner_menu | 76 goto do_return_demo_planner |
| 74 | 77 |
| 75 | 78 |
| 76 global deco_setup | 79 global deco_setup |
| 77 deco_setup: | 80 deco_setup: |
| 78 banksel common | |
| 79 btfsc FLAG_ccr_mode | 81 btfsc FLAG_ccr_mode |
| 80 bra deco_setup_cc | 82 bra deco_setup_cc |
| 81 btfsc FLAG_pscr_mode | 83 btfsc FLAG_pscr_mode |
| 82 bra deco_setup_cc | 84 bra deco_setup_cc |
| 83 deco_setup_oc: | 85 deco_setup_oc: |
| 84 call get_first_gas_to_WREG ; gets first gas (1-5) into WREG | 86 call get_first_gas_to_WREG ; gets first gas (1-5) into WREG |
| 85 call setup_gas_registers ; with WREG=Gas 1-5 | 87 call setup_gas_registers ; with WREG=Gas 1-5 |
| 86 call deco_setup_oc_gases ; setup OC/Bailout Gases and configure for OC deco calculation | 88 call deco_setup_oc_gases ; setup OC/Bailout Gases and configure for OC deco calculation |
| 87 bra deco_setup_cont | 89 bra deco_setup_cont |
| 88 deco_setup_cc: | 90 deco_setup_cc: |
| 89 call get_first_dil_to_WREG ; gets first gas (1-5) into WREG | 91 call get_first_dil_to_WREG ; gets first gas (1-5) into WREG |
| 90 call setup_dil_registers ; with WREG=Gas 1-5 | 92 call setup_dil_registers ; with WREG=Gas 1-5 |
| 91 call deco_setup_cc_diluents ; setup CCR/pSCR diluents and configure for CCR/pSCR deco calculation | 93 call deco_setup_cc_diluents ; setup CCR/pSCR diluents and configure for CCR/pSCR deco calculation |
| 92 deco_setup_cont: | 94 deco_setup_cont: |
| 93 ; use ambient conditions for simulation ## V2.94 | 95 ; use ambient conditions for simulation |
| 94 #include "isr.inc" | |
| 95 SAFE_2BYTE_COPY last_surfpressure_30min, int_I_pres_surface ; copy surface pressure to deco routine | 96 SAFE_2BYTE_COPY last_surfpressure_30min, int_I_pres_surface ; copy surface pressure to deco routine |
| 96 | 97 |
| 97 movlw deco_distance | 98 movlw deco_distance |
| 98 movff WREG,char_I_deco_distance | 99 movff WREG,char_I_deco_distance |
| 99 | 100 |
| 100 movff opt_last_stop,char_I_depth_last_deco | 101 movff opt_last_stop,char_I_depth_last_deco |
| 101 movff opt_GF_low,char_I_GF_Low_percentage | 102 movff opt_GF_low,char_I_GF_Low_percentage |
| 102 movff opt_GF_high,char_I_GF_High_percentage | 103 movff opt_GF_high,char_I_GF_High_percentage |
| 103 | 104 |
| 104 ; overwrite GF if aGF is wanted | 105 ; overwrite GF if aGF is wanted |
| 105 bsf use_agf | 106 bsf use_agf |
| 106 TSTOSS opt_sim_use_aGF | 107 TSTOSS opt_sim_use_aGF |
| 107 bcf use_agf | 108 bcf use_agf |
| 108 | 109 |
| 109 btfsc use_agf ; =1: Use aGF | 110 btfsc use_agf ; =1: Use aGF |
| 110 movff opt_aGF_low,char_I_GF_Low_percentage | 111 movff opt_aGF_low,char_I_GF_Low_percentage |
| 111 btfsc use_agf ; =1: Use aGF | 112 btfsc use_agf ; =1: Use aGF |
| 112 movff opt_aGF_high,char_I_GF_High_percentage | 113 movff opt_aGF_high,char_I_GF_High_percentage |
| 113 | 114 |
| 114 bcf is_bailout | 115 bcf is_bailout |
| 115 | 116 |
| 116 ; setup char_I_const_ppO2 for CC modes | 117 ; setup char_I_const_ppO2 for CC modes |
| 117 clrf WREG | 118 clrf WREG |
| 118 btfsc FLAG_pscr_mode | 119 btfsc FLAG_pscr_mode |
| 119 movff WREG,char_I_const_ppO2 ; configure pSCR computations to calculated ppO2 | 120 movff WREG,char_I_const_ppO2 ; configure pSCR computations to calculated ppO2 |
| 120 btfss FLAG_ccr_mode | 121 btfss FLAG_ccr_mode |
| 121 return ; done if not in CCR mode | 122 return ; done if not in CCR mode |
| 122 movff opt_sim_setpoint_number,WREG ; configure CCR computations to selected setpoint | 123 movff opt_sim_setpoint_number,WREG ; configure CCR computations to selected setpoint |
| 123 decf WREG,W ; 1-5 -> 0-4 | 124 decf WREG,W ; 1-5 -> 0-4 |
| 124 lfsr FSR1,char_I_setpoint_cbar ; load base address of setpoint list | 125 lfsr FSR1,char_I_setpoint_cbar ; load base address of setpoint list |
| 125 movff PLUSW1,char_I_const_ppO2 ; setup setpoint | 126 movff PLUSW1,char_I_const_ppO2 ; setup setpoint |
| 126 return | 127 return |
| 127 | 128 |
| 128 ;============================================================================= | 129 ;============================================================================= |
| 129 ; Launch deco planning | 130 ; Launch deco planning |
| 130 ; | 131 ; |
| 131 global deco_planer | 132 global deco_planer |
| 132 deco_planer: | 133 deco_planer: |
| 133 call speed_fastest ; Quick ! | 134 call speed_fastest ; Quick ! |
| 134 call deco_push_tissues_to_vault | 135 call deco_push_tissues_to_vault ; C-code: back-up state of the real tissues |
| 135 rcall deco_setup ; Setup all model parameters. | 136 banksel common |
| 137 rcall deco_setup ; Setup all model parameters. | |
| 136 | 138 |
| 137 ;---- Specific settings ------------------------------------------------------ | 139 ;---- Specific settings ------------------------------------------------------ |
| 138 | 140 |
| 139 ; configure the deco engine for normal plan, CNS & gas volume calculation and no delayed ascent | 141 ; configure the deco engine for normal plan, CNS & gas volume calculation and no delayed ascent |
| 140 movff char_O_deco_status,WREG ; bank-safe copy | 142 movff char_O_deco_status,WREG ; bank-safe copy |
| 141 bcf WREG,DECO_PLAN_FLAG ; normal plan mode, | 143 bcf WREG,DECO_PLAN_FLAG ; normal plan mode, |
| 142 bsf WREG,DECO_CNS_FLAG ; enable CNS calculation (CNS at end of dive), | 144 bsf WREG,DECO_CNS_FLAG ; enable CNS calculation (CNS at end of dive), |
| 143 bsf WREG,DECO_VOLUME_FLAG ; enable gas volume calculation, and | 145 bsf WREG,DECO_VOLUME_FLAG ; enable gas volume calculation, and |
| 144 bcf WREG,DECO_ASCENT_FLAG ; disable delayed ascent calculation | 146 bcf WREG,DECO_ASCENT_FLAG ; disable delayed ascent calculation |
| 145 movff WREG,char_O_deco_status ; bank-safe copy back | 147 movff WREG,char_O_deco_status ; bank-safe copy back |
| 146 | 148 |
| 147 ; configure the deco engine for total-dive gas volume calculation | 149 ; configure the deco engine for total-dive gas volume calculation |
| 148 movff char_O_main_status,WREG ; bank-safe copy | 150 movff char_O_main_status,WREG ; bank-safe copy |
| 149 bsf WREG,DECO_BOTTOM_FLAG ; set bottom flag | 151 bsf WREG,DECO_BOTTOM_FLAG ; set bottom flag |
| 150 movff WREG,char_O_main_status ; bank-safe copy back | 152 movff WREG,char_O_main_status ; bank-safe copy back |
| 151 | 153 |
| 152 deco_planer_redo: | 154 deco_planer_redo: |
| 153 | 155 ; show deco calculation is in progress |
| 154 ; show deco calculation is in progress | 156 call TFT_ClearScreen |
| 155 call TFT_ClearScreen | 157 WIN_COLOR color_greenish |
| 156 WIN_COLOR color_greenish | 158 TEXT_SMALL .20,.40, tCalculating |
| 157 TEXT_SMALL .20,.40, tCalculating | 159 WIN_COLOR color_lightblue |
| 158 WIN_COLOR color_lightblue | 160 WIN_SMALL .1,.215 |
| 159 WIN_SMALL .1,.215 | 161 STRCPY_TEXT_PRINT tAbort |
| 160 STRCPY_TEXT_PRINT tAbort | 162 |
| 161 | 163 ; configure the deco engine for restart: |
| 162 ; configure the deco engine for restart: | 164 movff char_O_deco_status,WREG ; bank-safe copy |
| 163 movff char_O_deco_status,WREG ; bank-safe copy | 165 bsf WREG,DECO_STATUS_0_FLAG ; configure init ... |
| 164 bsf WREG,DECO_STATUS_0_FLAG ; configure init ... | 166 bsf WREG,DECO_STATUS_1_FLAG ; ... state, |
| 165 bsf WREG,DECO_STATUS_1_FLAG ; ... state, | 167 movff WREG,char_O_deco_status ; bank-safe copy back |
| 166 movff WREG,char_O_deco_status ; bank-safe copy back | |
| 167 | 168 |
| 168 ;---- Add delay at surface, if needed ---------------------------------------- | 169 ;---- Add delay at surface, if needed ---------------------------------------- |
| 169 | 170 banksel char_I_dive_interval |
| 170 banksel char_I_dive_interval | 171 tstfsz char_I_dive_interval |
| 171 tstfsz char_I_dive_interval | 172 call deco_calc_dive_interval |
| 172 call deco_calc_dive_interval | |
| 173 | 173 |
| 174 ;---- Dive loop -------------------------------------------------------------- | 174 ;---- Dive loop -------------------------------------------------------------- |
| 175 | 175 ; Compute dive ambient conditions |
| 176 ; Compute dive ambient conditions | 176 banksel char_I_bottom_depth |
| 177 banksel char_I_bottom_depth | 177 movf char_I_bottom_depth,W |
| 178 movf char_I_bottom_depth,W | 178 mullw .100 |
| 179 mullw .100 | 179 movlw LOW(.1000) |
| 180 movlw LOW(.1000) | 180 addwf PRODL,W |
| 181 addwf PRODL,W | 181 movwf int_I_pres_respiration+0 |
| 182 movwf int_I_pres_respiration+0 | 182 movlw HIGH(.1000) |
| 183 movlw HIGH(.1000) | 183 addwfc PRODH,W |
| 184 addwfc PRODH,W | 184 movwf int_I_pres_respiration+1 |
| 185 movwf int_I_pres_respiration+1 | 185 banksel common |
| 186 | 186 |
| 187 banksel common | 187 movff char_I_bottom_time,char_I_sim_advance_time |
| 188 | 188 |
| 189 movff char_I_bottom_time,char_I_sim_advance_time | 189 clrf TMR5L |
| 190 | 190 clrf TMR5H ; 30,51757813µs/bit in TMR5L:TMR5H |
| 191 clrf TMR5L | 191 |
| 192 clrf TMR5H ; 30,51757813µs/bit in TMR5L:TMR5H | 192 call deco_calc_hauptroutine ; C-code: initialization + complete bottom time part |
| 193 | 193 banksel common |
| 194 call deco_calc_hauptroutine ; initialization + complete bottom time part | 194 |
| 195 banksel common | |
| 196 | |
| 197 ;---- BAILOUT: Switch to OC gases for ascent cycles -------------------------- | 195 ;---- BAILOUT: Switch to OC gases for ascent cycles -------------------------- |
| 198 | 196 btfss is_bailout ; Doing a bailout deco plan ? |
| 199 btfss is_bailout ; Doing a bailout deco plan ? | 197 bra deco_planer_finishing ; NO - keep gases |
| 200 bra deco_planer_finishing ; NO - keep gases | |
| 201 ; YES - switch to OC gas | 198 ; YES - switch to OC gas |
| 202 | 199 |
| 203 ; reconfigure the deco engine for delayed ascent mode | 200 ; reconfigure the deco engine for delayed ascent mode |
| 204 movff char_O_deco_status,lo ; bank-safe copy | 201 movff char_O_deco_status,lo ; bank-safe copy |
| 205 bsf lo,DECO_ASCENT_FLAG ; set flag for delayed ascent calculation | 202 bsf lo,DECO_ASCENT_FLAG ; set flag for delayed ascent calculation |
| 206 movff lo,char_O_deco_status ; bank-safe copy back | 203 movff lo,char_O_deco_status ; bank-safe copy back |
| 207 | 204 |
| 208 ; configure the deco engine for delayed ascent part gas volume calculation | 205 ; configure the deco engine for delayed ascent part gas volume calculation |
| 209 movff char_O_main_status,WREG ; bank-safe copy | 206 movff char_O_main_status,WREG ; bank-safe copy |
| 210 bcf WREG,DECO_BOTTOM_FLAG ; set bottom flag | 207 bcf WREG,DECO_BOTTOM_FLAG ; set bottom flag |
| 211 movff WREG,char_O_main_status ; bank-safe copy back | 208 movff WREG,char_O_main_status ; bank-safe copy back |
| 212 | 209 |
| 213 ; reconfigure gas settings to OC gases | 210 ; reconfigure gas settings to OC gases |
| 214 call get_first_gas_to_WREG ; get first gas (1-5) into WREG | 211 call get_first_gas_to_WREG ; get first gas (1-5) into WREG |
| 215 call setup_gas_registers ; With WREG=Gas 1-5 (or 6, not applicable here) | 212 call setup_gas_registers ; With WREG=Gas 1-5 (or 6, not applicable here) |
| 216 call deco_setup_oc_gases ; With WREG=Gas 1-5 (or 6, not applicable here) | 213 call deco_setup_oc_gases ; With WREG=Gas 1-5 (or 6, not applicable here) |
| 217 | 214 |
| 218 ; set the gas change override flag to allow gas changes before deco stops as done in alternative plan | 215 ; set the gas change override flag to allow gas changes before deco stops as done in alternative plan |
| 219 movff char_O_main_status,lo ; bank-safe copy | 216 movff char_O_main_status,lo ; bank-safe copy |
| 220 bsf lo,DECO_GASCHANGE_OVRD ; set flag for gas change override | 217 bsf lo,DECO_GASCHANGE_OVRD ; set flag for gas change override |
| 221 movff lo,char_O_main_status ; bank-safe copy back | 218 movff lo,char_O_main_status ; bank-safe copy back |
| 222 | 219 |
| 223 ;---- Wait until status reaches zero ------------------------------------------- | 220 ;---- Wait until status reaches zero ------------------------------------------- |
| 224 | |
| 225 deco_planer_finishing: | 221 deco_planer_finishing: |
| 226 call deco_calc_hauptroutine ; Simulate more dive time to trigger the deco calculations | 222 call deco_calc_hauptroutine ; C-code: Simulate more dive time to trigger the deco calculations |
| 227 banksel common | 223 banksel common |
| 228 | 224 |
| 229 btfss switch_left ; check if left button was pressed | 225 btfss switch_left ; check if left button was pressed |
| 230 bra deco_planer_finishing_1 ; NO - continue calculations | 226 bra deco_planer_finishing_1 ; NO - continue calculations |
| 231 bsf decoplan_abort ; YES - set abort flag so that deco_show_plan will not be called | 227 bsf decoplan_abort ; YES - set abort flag so that deco_show_plan will not be called |
| 232 bra deco_planer_finishing_2 ; do some clean-up and return | 228 bra deco_planer_finishing_2 ; do some clean-up and return |
| 233 deco_planer_finishing_1: | 229 deco_planer_finishing_1: |
| 234 movff char_O_deco_status,lo ; working copy of char_O_deco_status in bank common | 230 movff char_O_deco_status,lo ; working copy of char_O_deco_status in bank common |
| 235 movlw DECO_STATUS_MASK ; bit mask for deco status bit set | 231 movlw DECO_STATUS_MASK ; bit mask for deco status bit set |
| 236 andwf lo,W ; mask out bits showing state of computation | 232 andwf lo,W ; mask out bits showing state of computation |
| 237 tstfsz WREG ; check if a compute cycle is finished (bits 1 and 0 == 0) | 233 tstfsz WREG ; check if a compute cycle is finished (bits 1 and 0 == 0) |
| 238 bra deco_planer_finishing ; NO - needs more computation cycles | 234 bra deco_planer_finishing ; NO - needs more computation cycles |
| 239 | 235 |
| 240 ;---- Done: add CNS from decoplan, and restore tissues | 236 ;---- Done: add CNS from decoplan, and restore tissues |
| 241 | |
| 242 deco_planer_finishing_2: | 237 deco_planer_finishing_2: |
| 243 | |
| 244 movff char_O_deco_warnings,decoplan_warnings ; copy warnings | 238 movff char_O_deco_warnings,decoplan_warnings ; copy warnings |
| 245 | 239 |
| 246 call deco_pull_tissues_from_vault ; restore "real" deco data | 240 call deco_pull_tissues_from_vault ; C-code: restore status of the real tissues |
| 247 banksel common ; back to bank 1 | 241 banksel common ; back to bank 1 |
| 248 | 242 |
| 249 movlw b'00111000' ; 1:8 Prescaler -> 65,536ms@16MHz | 243 movlw b'00111000' ; 1:8 Prescaler -> 65,536ms@16MHz |
| 250 movwf T3CON | 244 movwf T3CON |
| 251 goto speed_normal ;(and return) | 245 goto speed_normal ; (and return) |
| 252 | 246 |
| 253 ;----------------------------------------------------------------------------- | 247 ;----------------------------------------------------------------------------- |
| 254 ; Draw a stop of the deco plan (simulator or dive). | 248 ; Draw a stop of the deco plan (simulator or dive). |
| 255 ; Inputs: lo = depth. Range 3m...93m | 249 ; Inputs: lo = depth |
| 256 ; + 0x80 if this is a switch-gas stop. | 250 ; hi = minutes |
| 257 ; up = minutes. range 1'..240'. | 251 ; win_top = line to draw on screen. |
| 258 ; win_top = line to draw on screen. | 252 ; |
| 259 ; Trashed: up, lo, win_height, win_leftx2, win_width, win_color*, | 253 ; Trashed: hi, lo, |
| 254 ; win_height, win_leftx2, win_width, win_color*, | |
| 260 ; WREG, PROD, TBLPTR TABLAT. | 255 ; WREG, PROD, TBLPTR TABLAT. |
| 261 ; | 256 ; |
| 262 deco_plan_show_stop: | 257 deco_plan_show_stop: |
| 263 | 258 ;---- Print depth ---------------------------------------------------- |
| 264 ;---- Print depth ---------------------------------------------------- | 259 lfsr FSR2,char_O_deco_gas ; needed to be initialized here every time because... |
| 265 bcf lo,7 ; clear gas-switch flag (not used any more anyhow) | 260 movf decoplan_gindex,W ; ...FSR2 is also used for string operations |
| 266 lfsr FSR2,char_O_deco_gas | 261 movff PLUSW2,WREG ; get current gas and copy it to WREG for color-coding |
| 267 movf decoplan_gindex,W ; index | 262 call TFT_color_code_gas ; set output color dependent on gas (1-5) |
| 268 movff PLUSW2,WREG ; get current gas | 263 |
| 269 rcall simulator_color_gas ; set output color dependent on gas (1-5) | 264 lfsr FSR2,buffer |
| 270 | 265 |
| 271 lfsr FSR2,buffer | 266 TSTOSS opt_units ; 0=Meters, 1=Feets |
| 272 | 267 bra deco_plan_show_nstd_stop_metric |
| 273 TSTOSS opt_units ; 0=Meters, 1=Feets | 268 |
| 274 bra deco_plan_show_nstd_stop_metric | 269 WIN_LEFT .85 |
| 275 | 270 movf lo,W ; lo = m |
| 276 WIN_LEFT .85 | 271 mullw .100 ; PRODL:PRODH = mbar |
| 277 movf lo,W ; lo = m | 272 movff PRODL,lo |
| 278 mullw .100 ; PRODL:PRODH = mbar | 273 movff PRODH,hi |
| 279 movff PRODL,lo | 274 ; Convert with 334feet/100m to have 10ft, 20ft, 30ft stops... |
| 280 movff PRODH,hi | 275 movff lo,xA+0 |
| 281 ; Convert with 334feet/100m to have 10ft, 20ft, 30ft stops... | 276 movff hi,xA+1 |
| 282 movff lo,xA+0 | 277 movlw LOW d'334' ; 334feet/100m |
| 283 movff hi,xA+1 | 278 movwf xB+0 |
| 284 movlw LOW d'334' ; 334feet/100m | 279 movlw HIGH d'334' |
| 285 movwf xB+0 | 280 movwf xB+1 |
| 286 movlw HIGH d'334' | 281 call mult16x16 ; xA*xB=xC (lo:hi * 328) |
| 287 movwf xB+1 | 282 movlw d'50' ; round up |
| 288 call mult16x16 ; xA*xB=xC (lo:hi * 328) | 283 addwf xC+0,F |
| 289 movlw d'50' ; round up | 284 movlw .0 |
| 290 addwf xC+0,F | 285 addwfc xC+1,F |
| 291 movlw 0 | 286 addwfc xC+2,F |
| 292 addwfc xC+1,F | 287 addwfc xC+3,F |
| 293 addwfc xC+2,F | 288 movlw d'100' |
| 294 addwfc xC+3,F | 289 movwf xB+0 |
| 295 movlw d'100' | 290 clrf xB+1 |
| 296 movwf xB+0 | 291 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder |
| 297 clrf xB+1 | 292 movff xC+0,lo |
| 298 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | 293 movff xC+1,hi ; restore lo and hi with updated value |
| 299 movff xC+0,lo | 294 bsf leftbind |
| 300 movff xC+1,hi ; restore lo and hi with updated value | 295 bsf ignore_digit4 ; Only full feet |
| 301 bsf leftbind | 296 output_16 |
| 302 bsf ignore_digit4 ; Only full feet | 297 bcf leftbind |
| 303 output_16 | 298 STRCAT_PRINT "ft " |
| 304 bcf leftbind | 299 bra deco_plan_show_nstd_stop_common |
| 305 STRCAT_PRINT "ft " | |
| 306 bra deco_plan_show_nstd_stop_common | |
| 307 | 300 |
| 308 deco_plan_show_nstd_stop_metric: | 301 deco_plan_show_nstd_stop_metric: |
| 309 WIN_LEFT .90 | 302 WIN_LEFT .90 |
| 310 bsf leftbind | 303 bsf leftbind |
| 311 output_8 ; outputs into Postinc2! | 304 output_8 ; outputs into Postinc2! |
| 312 bcf leftbind | 305 bcf leftbind |
| 313 STRCAT_PRINT "m " | 306 STRCAT_PRINT "m " |
| 307 | |
| 314 deco_plan_show_nstd_stop_common: | 308 deco_plan_show_nstd_stop_common: |
| 315 ;---- Print duration ------------------------------------------------- | 309 ;---- Print duration ------------------------------------------------- |
| 316 WIN_LEFT .135 | 310 WIN_LEFT .135 |
| 317 lfsr FSR2,buffer | 311 lfsr FSR2,buffer |
| 318 | 312 |
| 319 movf lo,W ; Swap up & lo | 313 movf lo,W ; Swap hi & lo |
| 320 movff up,lo | 314 movff hi,lo |
| 321 movwf up | 315 movwf hi |
| 322 | 316 |
| 323 output_8 ; Allow up to 240' | 317 output_8 ; Allow up to 240' |
| 324 STRCAT "' " ; 1 to 3 chars for depth. | 318 clrf WREG |
| 325 clrf WREG | 319 movff WREG,buffer+.3 ; limit to 2 chars |
| 326 movff WREG,buffer+.3 ; limit to 4 chars | 320 STRCAT_PRINT "" |
| 327 STRCAT_PRINT "" | 321 |
| 328 | 322 movf lo,W ; Swap back hi & lo |
| 329 movf lo,W ; Swap back up & lo | 323 movff hi,lo |
| 330 movff up,lo | 324 movwf hi |
| 331 movwf up | 325 |
| 332 | 326 ;--------------------------------------------------------------------- |
| 333 ;--------------------------------------------------------------------- | 327 ; Draw the bar graph used for deco stops (deco plan in simulator or dive). |
| 334 ; Draw the bar graph used for deco stops (deco plan in simulator or dive). | 328 incf win_top,F |
| 335 incf win_top,F | 329 movlw .19 |
| 336 movlw .19 | 330 movwf win_height |
| 337 movwf win_height | 331 movlw .118 |
| 338 movlw .118 | 332 movwf win_leftx2 ; column left (0-159) |
| 339 movwf win_leftx2 ; column left (0-159) | 333 movlw .16 |
| 340 movlw .16 | 334 movwf win_width+0 ; column max width. |
| 341 movwf win_width+0 ; column max width. | 335 clrf win_width+1 |
| 342 clrf win_width+1 | 336 |
| 343 | 337 ; Draw used area (hi = minutes): |
| 344 ; Draw used area (up = minutes): | 338 movlw .16 ; Limit length (16min) |
| 345 movlw .16 ; Limit length (16min) | 339 cpfslt hi |
| 346 cpfslt up | 340 movwf hi |
| 347 movwf up | 341 movff hi,win_bargraph ; Active width, the rest is cleared. |
| 348 movff up,win_bargraph ; Active width, the rest is cleared. | 342 call TFT_box |
| 349 call TFT_box | 343 |
| 350 | 344 ; Restore win_top |
| 351 ; Restore win_top | 345 call TFT_standard_color |
| 352 call TFT_standard_color | 346 decf win_top,F ; Restore win_top |
| 353 decf win_top,F ; Restore win_top | 347 return |
| 354 return | |
| 355 | 348 |
| 356 ;----------------------------------------------------------------------------- | 349 ;----------------------------------------------------------------------------- |
| 357 ; Clear unused area below last stop | 350 ; Clear unused area below last stop |
| 358 ; Inputs: win_top : last used area... | 351 ; Inputs: win_top : last used area... |
| 359 deco_plan_show_clear_bottom: | 352 deco_plan_show_clear_bottom: |
| 360 movf win_top,W ; Get back from bank0 | 353 movf win_top,W ; Get back from bank0 |
| 361 sublw .239 ; No: bottom row in planning | 354 sublw .239 ; No: bottom row in planning |
| 362 movwf win_height | 355 movwf win_height |
| 363 | 356 |
| 364 WIN_LEFT .85 ; Full dive menu width | 357 WIN_LEFT .85 ; Full dive menu width |
| 365 movlw .159-.85+1 | 358 movlw .159-.85+.1 |
| 366 movwf win_width+0 | 359 movwf win_width+0 |
| 367 clrf win_width+1 | 360 clrf win_width+1 |
| 368 | 361 |
| 369 clrf win_color1 ; Fill with black | 362 clrf win_color1 ; Fill with black |
| 370 clrf win_color2 | 363 clrf win_color2 |
| 371 | 364 |
| 372 goto TFT_box ; and return | 365 goto TFT_box ; and return |
| 373 | 366 |
| 374 ;----------------------------------------------------------------------------- | 367 ;----------------------------------------------------------------------------- |
| 375 ; Display the deco plan (simulator). | 368 ; Display the deco plan (simulator). |
| 376 ; Inputs: char_O_deco_table (array of stop times, in minutes) | 369 ; Inputs: char_O_deco_table (array of stop times, in minutes) |
| 377 ; decoplan_page = page number. | 370 ; decoplan_page = page number. |
| 378 ; | 371 ; |
| 379 deco_show_plan_page: | 372 deco_show_plan_page: |
| 380 bcf win_invert ; Reset invert flag | 373 bcf win_invert ; Reset invert flag |
| 381 | 374 |
| 382 ;---- Is there deco stops ? ------------------------------------------ | 375 ;---- Is there deco stops ? ------------------------------------------ |
| 383 movff char_O_first_deco_depth,WREG | 376 movff char_O_first_deco_depth,WREG |
| 384 iorwf WREG | 377 iorwf WREG |
| 385 bnz deco_plan_show_1 | 378 bnz deco_plan_show_1 |
| 386 | 379 |
| 387 ;---- No Deco -------------------------------------------------------- | 380 ;---- No Deco -------------------------------------------------------- |
| 388 call TFT_standard_color | 381 call TFT_standard_color |
| 389 TEXT_SMALL .80, .0, tNoDeco | 382 TEXT_SMALL .80, .0, tNoDeco |
| 390 bsf decoplan_last_ceiling_shown | 383 bsf decoplan_last_ceiling_shown |
| 391 return | 384 return |
| 392 | 385 |
| 393 deco_plan_show_1: | 386 deco_plan_show_1: |
| 394 lfsr FSR0,char_O_deco_depth ; Initialize indexed addressing. | 387 lfsr FSR0,char_O_deco_depth ; Initialize indexed addressing. |
| 395 lfsr FSR1,char_O_deco_time | 388 lfsr FSR1,char_O_deco_time |
| 396 | 389 |
| 397 clrf decoplan_index ; Start with index = 0 | 390 clrf decoplan_index ; Start with index = 0 |
| 398 clrf win_top ; and row = 0 | 391 clrf win_top ; and row = 0 |
| 399 | 392 |
| 400 ; Read stop parameters, indexed by decoplan_index and decoplan_page | 393 ; Read stop parameters, indexed by decoplan_index and decoplan_page |
| 401 movf decoplan_page,W ; decoplan_gindex = 6*decoplan_page + decoplan_index | 394 movf decoplan_page,W ; decoplan_gindex = 6*decoplan_page + decoplan_index |
| 402 mullw .8 ; 8 lines/page in deco plan | 395 mullw .8 ; 8 lines/page in deco plan |
| 403 movf decoplan_index,W | 396 movf decoplan_index,W |
| 404 addwf PRODL,W | 397 addwf PRODL,W |
| 405 movwf decoplan_gindex ; --> decoplan_gindex | 398 movwf decoplan_gindex ; --> decoplan_gindex |
| 406 | 399 |
| 407 bcf decoplan_last_ceiling_shown ; Not finished yet... | 400 bcf decoplan_last_ceiling_shown ; Not finished yet... |
| 408 | 401 |
| 409 deco_plan_show_2: | 402 deco_plan_show_2: |
| 410 btfsc decoplan_gindex,5 ; Reached table length (32) ? | 403 btfsc decoplan_gindex,5 ; Reached table length (32) ? |
| 411 bra deco_plan_show_99 ; YES: finished... | 404 bra deco_plan_show_99 ; YES: finished... |
| 412 | 405 |
| 413 ; Read stop parameters, indexed by decoplan_index | 406 ; Read stop parameters, indexed by decoplan_index |
| 414 movf decoplan_gindex,W ; index | 407 movf decoplan_gindex,W ; index |
| 415 movff PLUSW1,up ; char_O_deco_time [gindex] --> up | 408 movff PLUSW0,lo ; char_O_deco_depth[gindex] |
| 416 movff PLUSW0,lo ; char_O_deco_depth[gindex] | 409 movff PLUSW1,hi ; char_O_deco_time [gindex] |
| 417 movf lo,W | 410 movf lo,W |
| 418 bz deco_plan_show_99 ; depth == 0 : finished. | 411 bz deco_plan_show_99 ; depth == 0 : finished. |
| 419 | 412 |
| 420 ; Display the stop line | 413 ; Display the stop line |
| 421 rcall deco_plan_show_stop | 414 rcall deco_plan_show_stop |
| 422 | 415 |
| 423 ; Next | 416 ; Next |
| 424 movlw .24 | 417 movlw .24 |
| 425 addwf win_top,F ; row: += 24 | 418 addwf win_top,F ; row: += 24 |
| 426 incf decoplan_index,F ; local index += 1 | 419 incf decoplan_index,F ; local index += 1 |
| 427 incf decoplan_gindex,F ; global index += 1 | 420 incf decoplan_gindex,F ; global index += 1 |
| 428 | 421 |
| 429 ; Max number of lines/page reached ? | 422 ; Max number of lines/page reached ? |
| 430 movlw .8 ; 8 lines/page in deco plan | 423 movlw .8 ; 8 lines/page in deco plan |
| 431 cpfseq decoplan_index | 424 cpfseq decoplan_index |
| 432 bra deco_plan_show_2 ; NO: loop | 425 bra deco_plan_show_2 ; NO: loop |
| 433 | 426 |
| 434 ; Check if next stop is end-of-list ? | 427 ; Check if next stop is end-of-list ? |
| 435 movf decoplan_gindex,W | 428 movf decoplan_gindex,W |
| 436 movf PLUSW0,W ; char_O_deco_depth[gindex] | 429 movf PLUSW0,W ; char_O_deco_depth[gindex] |
| 437 bz deco_plan_show_99 ; End of list... | 430 bz deco_plan_show_99 ; End of list... |
| 438 | 431 |
| 439 ; Display the message "more..." | 432 ; Display the message "more..." |
| 440 rcall deco_plan_show_clear_bottom ; Clear from next line | 433 rcall deco_plan_show_clear_bottom ; Clear from next line |
| 441 | 434 |
| 442 call TFT_standard_color | 435 call TFT_standard_color |
| 443 TEXT_SMALL .88, .220, tMore | 436 TEXT_SMALL .88, .220, tMore |
| 444 return | 437 return |
| 445 | 438 |
| 446 deco_plan_show_99: | 439 deco_plan_show_99: |
| 447 bsf decoplan_last_ceiling_shown ; Nothing more in table to display. | 440 bsf decoplan_last_ceiling_shown ; Nothing more in table to display. |
| 448 rcall deco_plan_show_clear_bottom ; Clear from next line | 441 rcall deco_plan_show_clear_bottom ; Clear from next line |
| 449 return | 442 return |
| 450 | 443 |
| 451 ;----------------------------------------------------------------------------- | 444 ;----------------------------------------------------------------------------- |
| 452 ; Loop to show all pages of the deco plan (surface mode) | 445 ; Loop to show all pages of the deco plan (surface mode) |
| 453 | 446 |
| 454 global deco_show_plan | 447 global deco_show_plan |
| 455 deco_show_plan: | 448 deco_show_plan: |
| 456 clrf decoplan_page | 449 clrf decoplan_page |
| 457 call TFT_ClearScreen | 450 call TFT_ClearScreen |
| 458 WIN_COLOR color_greenish | 451 WIN_COLOR color_greenish |
| 459 btfsc is_bailout | 452 btfsc is_bailout |
| 460 bra deco_show_plan_bail_title | 453 bra deco_show_plan_bail_title |
| 461 TEXT_SMALL .1,.1, tDivePlan | 454 TEXT_SMALL .1,.1, tDivePlan |
| 462 bra deco_show_plan2 | 455 bra deco_show_plan2 |
| 463 deco_show_plan_bail_title: | 456 deco_show_plan_bail_title: |
| 464 TEXT_SMALL .1,.1, tDiveBailout | 457 TEXT_SMALL .1,.1, tDiveBailout |
| 465 deco_show_plan2: | 458 deco_show_plan2: |
| 466 call TFT_standard_color | 459 call TFT_standard_color |
| 467 ;---- Display Plan Parameters | 460 ;---- Display Plan Parameters |
| 468 WIN_SMALL .0,.25 | 461 WIN_SMALL .0,.25 |
| 469 STRCPY "Int:" | 462 STRCPY "Int:" |
| 470 movff char_I_dive_interval,lo | 463 movff char_I_dive_interval,lo |
| 471 bsf leftbind | 464 bsf leftbind |
| 472 output_8 | 465 output_8 |
| 473 bcf leftbind | 466 bcf leftbind |
| 474 STRCAT_PRINT "'" | 467 STRCAT_PRINT "'" |
| 475 WIN_SMALL .0,.50 | 468 WIN_SMALL .0,.50 |
| 476 STRCPY_TEXT tBtTm_short | 469 STRCPY_TEXT tBtTm_short |
| 477 movff char_I_bottom_time,lo | 470 movff char_I_bottom_time,lo |
| 478 bsf leftbind | 471 bsf leftbind |
| 479 output_8 | 472 output_8 |
| 480 bcf leftbind | 473 bcf leftbind |
| 481 STRCAT_PRINT "'" | 474 STRCAT_PRINT "'" |
| 482 WIN_SMALL .0,.75 | 475 WIN_SMALL .0,.75 |
| 483 STRCPY_TEXT tDepth | 476 STRCPY_TEXT tDepth |
| 484 PUTC ":" | 477 PUTC ":" |
| 485 movff char_I_bottom_depth,lo | 478 movff char_I_bottom_depth,lo |
| 486 bsf leftbind | 479 bsf leftbind |
| 487 output_8 | 480 output_8 |
| 488 bcf leftbind | 481 bcf leftbind |
| 489 STRCAT_PRINT "m" | 482 STRCAT_PRINT "m" |
| 490 | 483 WIN_SMALL .0,.105 ; set position for warnings or sat/dsat factors |
| 491 WIN_SMALL .0,.105 ; set position for warnings or sat/dsat factors | 484 |
| 492 | 485 ;---- Check for Stop Table Overflow |
| 493 ;---- Check for Stop Table Overflow | 486 btfss decoplan_warnings,stoptable_overflow ; check if we have a overflow warning |
| 494 btfss decoplan_warnings,stoptable_overflow ; check if we have a overflow warning | 487 bra deco_show_plan2a ; NO - skip |
| 495 bra deco_show_plan2a ; NO - skip | 488 ;---- Display Overflow warning |
| 496 ;---- Display Overflow warning | 489 call TFT_warnings_color ; YES - show overflow warning |
| 497 call TFT_warnings_color ; YES - show overflow warning | 490 STRCAT_PRINT "incomplete" ; max 10 characters |
| 498 STRCAT_PRINT "incomplete" ; max 10 characters | 491 bra deco_show_plan_m1 ; skip displaying sat/dsat factors |
| 499 bra deco_show_plan_m1 ; skip displaying sat/dsat factors | 492 |
| 500 | 493 deco_show_plan2a: |
| 501 deco_show_plan2a: | 494 ;---- Check for IBCD Warning |
| 502 ;---- Check for IBCD Warning | 495 btfss decoplan_warnings,IBCD_warning_lock ; check if we have a locked IBCD warning |
| 503 btfss decoplan_warnings,IBCD_warning_lock ; check if we have a locked IBCD warning | 496 bra deco_show_plan2b ; NO - skip |
| 504 bra deco_show_plan2b ; NO - skip | 497 ;---- Display IBCD warning |
| 505 ;---- Display IBCD warning | 498 call TFT_attention_color ; YES - show IBCD warning |
| 506 call TFT_attention_color ; YES - show IBCD warning | 499 STRCAT_PRINT "IBCD!" ; max 10 characters |
| 507 STRCAT_PRINT "IBCD!" ; max 10 characters | 500 bra deco_show_plan_m1 ; skip displaying sat/dsat factors |
| 508 bra deco_show_plan_m1 ; skip displaying sat/dsat factors | 501 |
| 509 | |
| 510 deco_show_plan2b: | 502 deco_show_plan2b: |
| 511 ;---- Display Sat/Desat Factors --> is skipped if there were warnings | 503 ;---- Display Sat/Desat Factors --> omitted if there were warnings |
| 512 STRCAT_PRINT "SD:" | 504 STRCAT_PRINT "SD:" |
| 513 WIN_SMALL .25,.105 | 505 WIN_SMALL .25,.105 |
| 514 movff char_I_saturation_multiplier,lo | 506 movff char_I_saturation_multiplier,lo |
| 515 output_8 | 507 output_8 |
| 516 STRCAT "/" | 508 STRCAT "/" |
| 517 movff char_I_desaturation_multiplier,lo | 509 movff char_I_desaturation_multiplier,lo |
| 518 output_8 | 510 output_8 |
| 519 STRCAT_PRINT "" | 511 STRCAT_PRINT "" |
| 520 | 512 |
| 521 deco_show_plan_m1: | 513 deco_show_plan_m1: |
| 522 call TFT_standard_color ; clean-up from warnings | 514 call TFT_standard_color ; clean-up from warnings |
| 523 | 515 |
| 524 ;---- Get Model | 516 ;---- Get Model |
| 525 movff char_I_deco_model,WREG | 517 movff char_I_deco_model,WREG |
| 526 iorwf WREG | 518 iorwf WREG |
| 527 bz deco_show_plan_m2 | 519 bz deco_show_plan_m2 |
| 528 | 520 |
| 529 ;---- Display GF low/high values | 521 ;---- Display GF low/high values |
| 530 WIN_SMALL .0,.130 | 522 WIN_SMALL .0,.130 |
| 531 STRCAT_PRINT "GF:" | 523 STRCAT_PRINT "GF:" |
| 532 WIN_SMALL .25,.130 | 524 WIN_SMALL .25,.130 |
| 533 movff char_I_GF_Low_percentage,lo | 525 movff char_I_GF_Low_percentage,lo |
| 534 output_99x | 526 output_99x |
| 535 STRCAT "/" | 527 STRCAT "/" |
| 536 movff char_I_GF_High_percentage,lo | 528 movff char_I_GF_High_percentage,lo |
| 537 output_99x | 529 output_99x |
| 538 STRCAT_PRINT "" | 530 STRCAT_PRINT "" |
| 539 | 531 |
| 540 deco_show_plan_m2: | 532 deco_show_plan_m2: |
| 541 ;---- Display Deco Mode | 533 ;---- Display Deco Mode |
| 542 WIN_SMALL .0,.155 | 534 WIN_SMALL .0,.155 |
| 543 lfsr FSR2,buffer | 535 lfsr FSR2,buffer |
| 544 movff opt_dive_mode,lo ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR | 536 movff opt_dive_mode,lo ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR |
| 545 call TFT_display_decotype_surface1 | 537 call TFT_display_decotype_surface1 |
| 546 btfss FLAG_ccr_mode ; current dive mode = CCR ? | 538 btfss FLAG_ccr_mode ; current dive mode = CCR ? |
| 547 bra deco_show_plan2c ; NO - branch | 539 bra deco_show_plan2c ; NO - branch |
| 548 WIN_SMALL .25,.155 | 540 WIN_SMALL .25,.155 |
| 549 STRCPY "SP:" ; output setpoint used for calculation | 541 STRCPY "SP:" ; output setpoint used for calculation |
| 550 movff opt_sim_setpoint_number,lo | 542 movff opt_sim_setpoint_number,lo |
| 551 bsf leftbind | 543 bsf leftbind |
| 552 output_8 | 544 output_8 |
| 553 bcf leftbind | 545 bcf leftbind |
| 554 STRCAT_PRINT "" | 546 STRCAT_PRINT "" |
| 555 | 547 |
| 556 deco_show_plan2c: | 548 deco_show_plan2c: |
| 557 ;---- Display TTS result | 549 ;---- Display TTS result |
| 558 WIN_SMALL .0,.180 | 550 WIN_SMALL .0,.180 |
| 559 STRCPY_TEXT tTTS | 551 STRCPY_TEXT tTTS |
| 560 STRCAT ": " | 552 STRCAT ": " |
| 561 movff int_O_ascenttime+0,lo | 553 movff int_O_ascenttime+0,lo |
| 562 movff int_O_ascenttime+1,hi | 554 movff int_O_ascenttime+1,hi |
| 563 bsf leftbind | 555 bsf leftbind |
| 564 output_16 | 556 output_16 |
| 565 bcf leftbind | 557 bcf leftbind |
| 566 STRCAT_PRINT "'" | 558 STRCAT_PRINT "'" |
| 567 | 559 |
| 568 ;---- Display CNS result | 560 ;---- Display CNS result |
| 569 WIN_TOP .205 | 561 WIN_TOP .205 |
| 570 STRCPY_TEXT tCNS2 ; "CNS:" | 562 STRCPY_TEXT tCNS2 ; "CNS:" |
| 571 movff int_O_CNS_fraction+0,lo | 563 movff int_O_CNS_fraction+0,lo |
| 572 movff int_O_CNS_fraction+1,hi | 564 movff int_O_CNS_fraction+1,hi |
| 573 TFT_color_code warn_cns ; Color-code CNS output | 565 call TFT_color_code_cns ; Color-code CNS output |
| 574 bsf leftbind | 566 bsf leftbind |
| 575 output_16_3 ; limit to 999 and display only (0-999) | 567 output_16_3 ; limit to 999 and display only (0-999) |
| 576 bcf leftbind | 568 bcf leftbind |
| 577 STRCAT "%\x92" ; "->" | 569 STRCAT "%\x92" ; "->" |
| 578 movff int_O_normal_CNS_fraction+0,lo | 570 movff int_O_normal_CNS_fraction+0,lo |
| 579 movff int_O_normal_CNS_fraction+1,hi | 571 movff int_O_normal_CNS_fraction+1,hi |
| 580 TFT_color_code warn_cns ; Color-code CNS output | 572 call TFT_color_code_cns ; Color-code CNS output |
| 581 bsf leftbind | 573 bsf leftbind |
| 582 output_16_3 ; limit to 999 and display only (0-999) | 574 output_16_3 ; limit to 999 and display only (0-999) |
| 583 bcf leftbind | 575 bcf leftbind |
| 584 STRCAT_PRINT "%" | 576 STRCAT_PRINT "%" |
| 585 call TFT_standard_color | 577 call TFT_standard_color |
| 586 | 578 |
| 587 ;---- Loop through pages | 579 ;---- Loop through pages |
| 588 deco_show_plan_1: | 580 deco_show_plan_1: |
| 589 ; Clear the complete stop result column: | 581 ; Clear the complete stop result column: |
| 590 WIN_BOX_BLACK .0, .239, .80, .159 ; top, bottom, left, right | 582 WIN_BOX_BLACK .0, .239, .80, .159 ; top, bottom, left, right |
| 591 | 583 |
| 592 rcall deco_show_plan_page | 584 rcall deco_show_plan_page |
| 593 incf decoplan_page,F | 585 incf decoplan_page,F |
| 594 call logbook_preloop_tasks | 586 call logbook_preloop_tasks |
| 595 deco_show_plan_2: | 587 deco_show_plan_2: |
| 596 btfsc switch_right | 588 btfsc switch_right |
| 597 bra deco_show_plan_3 | 589 bra deco_show_plan_3 |
| 598 btfsc switch_left | 590 btfsc switch_left |
| 599 return ; Return to simulator menu | 591 return ; Return to simulator menu |
| 600 call log_screendump_and_onesecond ; Check if we need to make a screen shot and check for new second | 592 call log_screendump_and_onesecond ; Check if we need to make a screen shot and check for new second |
| 601 btfsc sleepmode ; Timeout? | 593 btfsc sleepmode ; Timeout? |
| 602 goto restart | 594 goto restart |
| 603 bra deco_show_plan_2 | 595 bra deco_show_plan_2 |
| 604 | 596 |
| 605 deco_show_plan_3: | 597 deco_show_plan_3: |
| 606 btfss decoplan_last_ceiling_shown | 598 btfss decoplan_last_ceiling_shown |
| 607 bra deco_show_plan_1 | 599 bra deco_show_plan_1 |
| 608 ; All stops shown | 600 ; All stops shown |
| 609 | 601 |
| 610 ;---- In CCR and pSCR mode, compute a BAILOUT deco plan ----------------------- | 602 ;---- In CCR and pSCR mode, compute a BAILOUT deco plan ----------------------- |
| 611 | 603 movff char_O_deco_status,WREG ; get deco calculation status |
| 612 banksel common | 604 btfss WREG,DECO_MODE_LOOP_FLAG ; check if in CCR or pSCR mode |
| 613 movff char_O_deco_status,WREG ; get deco calculation status | 605 bra simulator_show_decoplan5_0 ; NO - normal OC mode: just display |
| 614 btfss WREG,DECO_MODE_LOOP_FLAG ; check if in CCR or pSCR mode | 606 bsf is_bailout ; YES - redo 2nd deco-plan in bailout mode |
| 615 bra simulator_show_decoplan5_0 ; NO - normal OC mode: just display | 607 rcall deco_planer_redo ; redo plan computation |
| 616 bsf is_bailout ; YES - redo 2nd deco-plan in bailout mode | 608 |
| 617 rcall deco_planer_redo ; redo plan computation | 609 btfss decoplan_abort ; shall we abort? |
| 618 | 610 bra deco_show_plan ; NO - display bailout stops |
| 619 btfss decoplan_abort ; shall we abort? | 611 return ; YES |
| 620 bra deco_show_plan ; NO - display bailout stops | 612 |
| 621 return ; YES | 613 |
| 622 | 614 ;---- In OC+BAIL modes, show the gas usage special page ----------------------- |
| 623 | 615 simulator_show_decoplan5_0: |
| 624 ;---- In OC+BAIL modes, show the gas Usage special page ----------------------- | 616 ; Clear the complete stop result column: |
| 625 simulator_show_decoplan5_0: | 617 WIN_BOX_BLACK .0, .239, .80, .159 ; top, bottom, left, right |
| 626 | 618 |
| 627 movlb .1 | 619 movlw .25 |
| 628 | 620 movwf row_pos ; Row for gas list is .25+.25 |
| 629 ; Clear the complete stop result column: | 621 clrf gas_counter ; Gas counter |
| 630 WIN_BOX_BLACK .0, .239, .80, .159 ; top, bottom, left, right | 622 lfsr FSR0,int_O_gas_volumes ; Initialize indexed addressing. |
| 631 | 623 |
| 632 movlw .25 | 624 WIN_LEFT .80 ; Set column |
| 633 movwf waitms_temp ; Row for gas list is .25+.25 | 625 call TFT_standard_color |
| 634 clrf wait_temp ; Gas counter | |
| 635 lfsr FSR0,int_O_gas_volumes ; Initialize indexed addressing. | |
| 636 | |
| 637 WIN_LEFT .80 ; Set column | |
| 638 call TFT_standard_color | |
| 639 | 626 |
| 640 simulator_show_decoplan5_loop: | 627 simulator_show_decoplan5_loop: |
| 641 movff wait_temp,PRODL ; Copy to PRODL first | 628 movff gas_counter,PRODL ; Copy to PRODL first |
| 642 incf wait_temp,F ; Increment gas # | 629 incf gas_counter,F ; Increment gas # |
| 643 | 630 |
| 644 movff wait_temp,WREG | 631 movff gas_counter,WREG ; copy current gas to WREG for color-coding |
| 645 rcall simulator_color_gas ; set output color according to gas (number 1-5 in WREG) | 632 call TFT_color_code_gas ; set output color according to gas (1-5) |
| 646 | 633 |
| 647 lfsr FSR2,buffer | 634 lfsr FSR2,buffer |
| 648 bsf short_gas_decriptions | 635 bsf short_gas_decriptions |
| 649 bsf divemode ; Tweak "customview_show_mix:" | 636 bsf divemode ; Tweak "customview_show_mix:" |
| 650 call gaslist_strcat_gas ; Input: PRODL : gas number (0..4), Output: "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2 | 637 call gaslist_strcat_gas ; Input: PRODL : gas number (0..4), Output: "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2 |
| 651 bcf divemode ; Tweak "customview_show_mix:" | 638 bcf divemode ; Tweak "customview_show_mix:" |
| 652 | 639 |
| 653 movlw .25 | 640 movlw .25 |
| 654 addwf waitms_temp,F ; Increase row position | 641 addwf row_pos,F ; Increase row position |
| 655 movff waitms_temp,win_top ; Set Row | 642 movff row_pos,win_top ; Set Row |
| 656 | 643 |
| 657 movff POSTINC0,lo ; Read (16bit) result, low first, | 644 movff POSTINC0,lo ; Read (16bit) result, low first, |
| 658 movff POSTINC0,hi ; then high. | 645 movff POSTINC0,hi ; then high. |
| 659 | 646 |
| 660 movf lo,W | 647 movf lo,W |
| 661 andwf hi,W | 648 andwf hi,W |
| 662 incf WREG ; > 65535? | 649 incf WREG ; > 65535? |
| 663 bnz simulator_show_decoplan5_2 ; NO | 650 bnz simulator_show_decoplan5_1 ; NO |
| 664 STRCAT_PRINT ">65500" ; YES | 651 STRCAT_PRINT ">65500" ; YES |
| 665 bra simulator_show_decoplan5_1 | 652 bra simulator_show_decoplan5_2 |
| 666 | 653 |
| 667 simulator_show_decoplan5_2: | |
| 668 PUTC ":" | |
| 669 bsf leftbind | |
| 670 output_16 ; No decimal anymore. | |
| 671 bcf leftbind | |
| 672 STRCAT_PRINT "" ; No unit: can be bars or litters. | |
| 673 | |
| 674 ; Loop for all 5 gas | |
| 675 simulator_show_decoplan5_1: | 654 simulator_show_decoplan5_1: |
| 676 movlw d'5' ; list all five gases | 655 PUTC ":" |
| 677 cpfseq wait_temp ; All gases shown? | 656 bsf leftbind |
| 657 output_16 ; No decimal anymore. | |
| 658 bcf leftbind | |
| 659 STRCAT_PRINT "" | |
| 660 | |
| 661 ; Loop for all 5 gas | |
| 662 simulator_show_decoplan5_2: | |
| 663 movlw d'5' ; list all five gases | |
| 664 cpfseq gas_counter ; All gases shown? | |
| 678 bra simulator_show_decoplan5_loop ; No | 665 bra simulator_show_decoplan5_loop ; No |
| 679 | 666 |
| 680 WIN_COLOR color_greenish | 667 WIN_COLOR color_greenish |
| 681 WIN_SMALL .80,.25 | 668 |
| 682 STRCPY_TEXT tGasUsage ; OC: "Gas Usage" | 669 movlw .30 |
| 683 STRCAT_PRINT ":" | 670 addwf row_pos,F ; Increase row position |
| 684 call TFT_standard_color | 671 movff row_pos,win_top ; Set Row |
| 685 call logbook_preloop_tasks | 672 STRCPY_TEXT_PRINT tBarLiter ; "Bar Liter" |
| 673 | |
| 674 WIN_SMALL .80,.25 | |
| 675 STRCPY_TEXT tGasUsage ; "Gas Usage" | |
| 676 STRCAT_PRINT ":" | |
| 677 | |
| 678 call TFT_standard_color | |
| 679 call logbook_preloop_tasks | |
| 686 | 680 |
| 687 simulator_show_decoplan5_3: | 681 simulator_show_decoplan5_3: |
| 688 btfss switch_right | 682 btfss switch_right |
| 689 bra simulator_show_decoplan5_3a | 683 bra simulator_show_decoplan5_3a |
| 690 bcf switch_right | 684 bcf switch_right |
| 691 clrf decoplan_page | 685 clrf decoplan_page |
| 692 bra deco_show_plan_1 ; toggle between stops plan and gas usage | 686 bra deco_show_plan_1 ; toggle between stops plan and gas usage |
| 693 simulator_show_decoplan5_3a: | 687 simulator_show_decoplan5_3a: |
| 694 btfss switch_left | 688 btfss switch_left |
| 695 bra simulator_show_decoplan5_4 | 689 bra simulator_show_decoplan5_4 |
| 696 bcf is_bailout ; Back to normal | 690 bcf is_bailout ; Back to normal |
| 697 bcf ccr_diluent_setup ; init for OC/Bailout | 691 bcf ccr_diluent_setup ; init for OC/Bailout |
| 698 return ; Return to simulator menu | 692 return ; Return to simulator menu |
| 699 | 693 |
| 700 simulator_show_decoplan5_4: | 694 simulator_show_decoplan5_4: |
| 701 call log_screendump_and_onesecond ; Check if we need to make a screen shot and check for new second | 695 call log_screendump_and_onesecond ; Check if we need to make a screen shot and check for new second |
| 702 btfsc sleepmode ; Timeout? | 696 btfsc sleepmode ; Timeout? |
| 703 goto restart | 697 goto restart |
| 704 bra simulator_show_decoplan5_3 | 698 bra simulator_show_decoplan5_3 |
| 705 | 699 |
| 706 | 700 END |
| 707 simulator_color_gas: ; set output color dependent on gas (1-5, in WREG) | |
| 708 movwf tft_temp1 ; used in TFT_set_color anyway | |
| 709 dcfsnz tft_temp1,F | |
| 710 movlw color_white ; color for Gas 1 | |
| 711 dcfsnz tft_temp1,F | |
| 712 movlw color_green ; color for Gas 2 | |
| 713 dcfsnz tft_temp1,F | |
| 714 movlw color_red ; Color for Gas 3 | |
| 715 dcfsnz tft_temp1,F | |
| 716 movlw color_yellow ; color for Gas 4 | |
| 717 dcfsnz tft_temp1,F | |
| 718 movlw color_cyan ; color for Gas 5 | |
| 719 goto TFT_set_color ; set color and return... | |
| 720 | |
| 721 ;============================================================================= | |
| 722 ; | |
| 723 global do_demo_divemode | |
| 724 do_demo_divemode: | |
| 725 extern option_save_all | |
| 726 call option_save_all ; Save all settings into EEPROM before starting simulation | |
| 727 call deco_push_tissues_to_vault | |
| 728 banksel common ; Bank1 | |
| 729 | |
| 730 ; +++ COMMENTED OUT FOR TESTING PURPOSE ONLY !!! +++ | |
| 731 ; +++ DO NOT COMMENT OUT IN OPERATIONAL USE !!! +++ | |
| 732 bsf restore_deco_data ; Restore tissue and CNS after simulator use | |
| 733 | |
| 734 bcf pressure_refresh | |
| 735 btfss pressure_refresh ; Wait for sensor | |
| 736 bra $-2 | |
| 737 | |
| 738 bsf simulatormode_active ; Set Flag | |
| 739 ; Compute dive ambient conditions | |
| 740 banksel char_I_bottom_depth | |
| 741 movf char_I_bottom_depth,W | |
| 742 mullw .100 | |
| 743 movff PRODL,rel_pressure+0 | |
| 744 movff PRODH,rel_pressure+1 | |
| 745 movlw LOW(.1000) | |
| 746 addwf PRODL,W | |
| 747 movff WREG,sim_pressure+0 | |
| 748 movlw HIGH(.1000) | |
| 749 addwfc PRODH,W | |
| 750 movff WREG,sim_pressure+1 | |
| 751 | |
| 752 banksel common ; Bank1 | |
| 753 bsf divemode | |
| 754 goto diveloop ; Switch into Divemode! | |
| 755 | |
| 756 | |
| 757 END |
