Mercurial > public > mk2
annotate code_part1/OSTC_code_asm_part1/surfmode.asm @ 258:abbf9a2c2c48
Small p2_deco optimizations:
Removed pres_tissue_limit[] and sim_pres_tissue_limit[] (Unused).
Separated read_buhlmann_times() and read_buhlmann_coefficients().
| author | JeanDo |
|---|---|
| date | Sun, 10 Apr 2011 14:17:53 +0200 |
| parents | f8f869bafd92 |
| children | 4ec488f046f4 |
| rev | line source |
|---|---|
| 254 | 1 f |
| 0 | 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 ; routines for Surface mode | |
| 20 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com | |
| 21 ; written: 10/01/05 | |
| 22 ; last updated: 080905 | |
| 23 ; known bugs: | |
| 24 ; ToDo: | |
| 25 | |
| 26 surfloop: | |
| 27 ; Boot tasks for all modes | |
| 28 call restart_set_modes_and_flags ; Sets decomode flags | |
| 29 clrf lo | |
| 30 movff lo,char_I_const_ppO2 ; reset to standard mode, OSTC assumes Air breathing at the surface! | |
| 31 | |
| 32 call PLED_brightness_full ;max. brightness | |
| 33 | |
| 34 call I2CReset | |
| 35 call enable_rs232 | |
| 36 call PLED_boot | |
| 37 call PLED_serial ; Show OSTC serial and firmware version | |
| 38 call PLED_clock ; display time | |
| 39 call update_date ; display date | |
| 40 movff last_surfpressure_30min+0,int_I_pres_respiration+0 ; copy surface air pressure to deco routine | |
| 41 movff last_surfpressure_30min+1,int_I_pres_respiration+1 ; 30min old values | |
| 42 movff last_surfpressure_30min+0,int_I_pres_surface+0 ; copy surface air pressure to deco routine | |
| 43 movff last_surfpressure_30min+1,int_I_pres_surface+1 ; 30min old values | |
| 44 | |
| 156 | 45 clrf menupos3 ; Reset Custom views (Default: No custom view) |
| 46 | |
| 0 | 47 btfsc gauge_mode ; Ignore in gauge mode |
| 48 bra surfloop1 | |
| 49 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode | |
| 50 bra surfloop1 | |
| 51 | |
| 52 ; Startup tasks for decompression modes | |
| 43 | 53 call PLED_display_cns_surface ; Update surface CNS display (If allowed by CF15) |
| 0 | 54 call PLED_desaturation_time ; display desaturation time |
| 55 call PLED_nofly_time ; display nofly time | |
| 13 | 56 |
| 0 | 57 call PLED_active_gas_surfmode ; Show start gas |
| 58 call PLED_display_decotype_surface ; Show deco mode (ZH-L16, const. ppO2 or Multi-GF) | |
| 59 | |
| 60 surfloop1: | |
| 61 btfss gauge_mode ; Display only in gauge mode | |
| 62 bra surfloop2 | |
| 63 DISPLAYTEXT d'103' ; Gauge mode | |
| 64 surfloop2: | |
| 65 btfss FLAG_apnoe_mode ; Display only in Apnoe mode | |
| 66 bra surfloop3 | |
| 67 DISPLAYTEXT d'116' ; Apnoe mode | |
| 68 | |
| 69 surfloop3: | |
| 70 ; Startup tasks for all modes | |
| 71 clrf timeout_counter2 | |
| 72 clrf timeout_counter3 | |
| 73 bcf premenu ; clear premenu flag | |
| 74 bcf menubit ; clear menu flag | |
| 75 bcf pressure_refresh | |
| 76 clrf last_pressure+0 | |
| 77 clrf last_pressure+1 | |
| 78 clrf last_temperature+0 | |
| 79 clrf last_temperature+1 | |
| 80 | |
| 81 movlw d'5' | |
| 82 movwf timeout_counter ; reload counter | |
| 83 | |
| 21 | 84 bcf LED_blue |
| 85 bcf LED_red | |
| 0 | 86 bcf simulatormode_active ; Quit simulator mode (if active) |
| 87 bcf standalone_simulator ; Quit simulator mode (if active) | |
| 88 WIN_TOP .0 | |
| 89 WIN_LEFT .0 | |
| 90 WIN_FONT FT_SMALL | |
| 91 WIN_INVERT .0 ; Init new Wordprocessor | |
| 3 | 92 call PLED_standard_color |
| 93 | |
| 0 | 94 bcf switch_left |
| 95 bcf switch_right | |
| 4 | 96 call PLED_active_gas_surfmode ; Show start gas / SetPoint |
| 0 | 97 call PLED_custom_text ; Displays custom text |
| 100 | 98 clrf cf_checker_counter ; next cf to check |
| 0 | 99 ostc_debug 'G' ; Sends debug-information to screen if debugmode active |
| 233 | 100 |
| 101 ; Desaturation time needs: | |
| 102 ; int_I_pres_surface | |
| 103 ; char_I_desaturation_multiplier | |
| 0 | 104 GETCUSTOM8 d'12' ; Desaturation multiplier % |
| 233 | 105 movff WREG,char_I_desaturation_multiplier |
| 106 | |
| 116 | 107 call deco_calc_desaturation_time ; calculate desaturation time |
| 0 | 108 movlb b'00000001' ; select ram bank 1 |
| 109 ostc_debug 'H' ; Sends debug-information to screen if debugmode active | |
| 110 | |
| 111 call wait_switches ; Waits until switches are released, resets flag if button stays pressed! | |
| 112 | |
| 113 surfloop_loop: | |
| 114 btfss onesecupdate ; do every second tasks? | |
| 115 bra surfloop_loop2 ; no, loop | |
| 116 | |
| 117 btfss FLAG_const_ppO2_mode ; are we in const. ppO2 mode? | |
| 118 bra surfloop_loop1 ; No | |
| 119 ; One Second tasks for ppO2 modes | |
| 120 | |
| 121 bra surfloop_loop1 ; Do not search for sensor in CC mode | |
| 122 | |
| 123 surfloop_loop1: | |
| 124 ; One Second tasks for all modes | |
| 125 call PLED_clock ; update clock | |
| 126 call test_charger ; check if charger IC is active | |
| 127 call timeout_surfmode ; check timeout | |
| 128 call get_battery_voltage ; get battery voltage | |
| 129 call update_batt_voltage ; display battery voltage | |
| 130 call timeout_premenu ; timeout premenu | |
| 131 call set_leds_surfmode ; Sets Warning and No-Fly LEDs | |
| 94 | 132 call check_customfunctions ; Checks CF functions and displays warning symbol if something critical is wrong |
| 0 | 133 call PLED_display_decotype_surface ; Show deco mode |
| 107 | 134 call surfcustomview_second ; Do every-second tasks for the custom view area |
| 110 | 135 call dive_type_icons ; Draw Air/Nitrox/Trimix color icon. |
| 0 | 136 btfsc enter_error_sleep ; Enter Fatal Error Routine? |
|
86
b40a0a6284da
adding custom functions with limits (jeando)
heinrichsweikamp
parents:
70
diff
changeset
|
137 call fatal_error_sleep ; Yes (In Sleepmode.asm!) |
| 0 | 138 bcf onesecupdate ; every second tasks done |
| 139 | |
| 140 surfloop_loop2: | |
| 141 ; Tasks approx. every 50ms for all modes | |
| 142 call test_switches_surfmode ; check switches | |
| 143 | |
| 144 ; Sensor tasks for all modes | |
| 145 btfsc pressure_refresh ; new pressure available? | |
| 146 call update_surf_press ; display surface pressure | |
| 147 btfsc pressure_refresh ; new temperature available? | |
| 148 call PLED_temp_surfmode ; Displays temperature | |
| 149 btfsc pressure_refresh ; new pressure available? | |
| 150 call set_dive_modes ; tests if depth>threshold | |
| 125 | 151 |
| 152 ; jDG TESTS ========================= | |
| 153 btfss pressure_refresh ; new pressure available? | |
| 154 bra surfloop_loop3 | |
| 155 call altimeter_calc | |
| 156 movf menupos3,W ; Get customview status. | |
| 157 bnz surfloop_loop3 ; Already used ? | |
| 158 call altimeter_display | |
| 159 surfloop_loop3: | |
| 160 ; jDG TESTS ========================= | |
| 161 | |
| 0 | 162 bcf pressure_refresh ; until new pressure is available |
| 163 | |
| 164 ; One minute tasks for all modes | |
| 165 btfsc oneminupdate ; do every minute tasks | |
| 166 call update_surfloop60 ; yes, e.g. update time and date | |
| 167 | |
| 168 ; Mode tasks | |
| 169 btfsc menubit ; Menu? | |
| 170 goto menu ; Menu! | |
| 171 btfsc divemode ; Divemode active? | |
| 172 goto diveloop ; Yes, switch into Divemode! | |
| 173 btfsc sleepmode ; Sleepmode active? | |
| 174 goto sleeploop ; Yes, switch into sleepmode! | |
| 107 | 175 |
| 176 btfsc toggle_customview ; Next view? | |
| 177 call surfcustomview_toggle ; Yes, show next customview (and delete this flag) | |
| 178 | |
| 0 | 179 ; Check for the different UART flags |
| 180 btfsc dump_external_eeprom ; Start interface (dumps EEPROM BANK 0 + additional data)? | |
| 181 goto menu_interface ; Yes! | |
| 182 btfsc uart_settime ; Sync clock with PC? | |
| 183 goto sync_clock ; Yes! | |
| 184 btfsc internal_eeprom_write ; Access internal EEPROM BANK 0 via UART module | |
| 185 goto internal_eeprom_access_b0 ; Yes! | |
| 186 btfsc internal_eeprom_write2 ; Access internal EEPROM BANK 1 via UART module | |
| 187 goto internal_eeprom_access_b1 ; Yes! | |
| 188 btfsc uart_send_hash ; Send MD2 hash values | |
| 189 goto send_md2_hash ; Yes! | |
| 190 btfsc uart_send_int_eeprom ; Send internal EEPROM BANK 0 | |
| 191 goto send_int_eeprom_b0 ; Yes! | |
| 192 btfsc uart_reset_decodata ; Reset Deco Data? | |
| 193 goto reset_decodata ; Yes! | |
| 194 btfsc uart_send_int_eeprom2 ; Send internal EEPROM BANK 1 | |
| 195 goto send_int_eeprom_b1 ; Yes! | |
| 196 btfsc uart_store_tissue_data ; Store tissue data?` | |
| 197 goto uart_store_tissues ; Yes! | |
| 198 | |
| 199 bra surfloop_loop ; loop surfacemode | |
| 200 | |
| 201 | |
| 202 update_surfloop60: | |
| 203 ; One minute tasks for all modes | |
| 4 | 204 ; call PLED_active_gas_surfmode ; Show start gas / SetPoint |
| 0 | 205 call update_date ; and date in divemode |
| 206 call calc_deko_surfmode ; calculate desaturation every minute | |
| 207 call check_temp_extrema ; check for new temperature extremas | |
| 208 call PLED_custom_text ; Displays custom text | |
| 209 call calc_surface_interval ; Increases Surface-Interval time | |
| 107 | 210 call surfcustomview_minute ; Do every-minute tasks for the custom view area |
| 0 | 211 |
| 212 btfsc gauge_mode ; Ignore in gauge mode | |
| 213 bra update_surfloop60_2 | |
| 214 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode | |
| 215 bra update_surfloop60_2 | |
| 216 | |
| 217 ; One Minute tasks for deco modes | |
| 43 | 218 call PLED_display_cns_surface ; Update surface CNS display (If allowed by CF15) |
| 0 | 219 call PLED_nofly_time ; display nofly time |
| 220 call PLED_desaturation_time ; display desaturation time | |
| 13 | 221 btfsc premenu ; Not when "Menu?" is displayed! |
| 222 bra update_surfloop60_2 | |
| 223 | |
| 0 | 224 update_surfloop60_2: |
| 225 call nofly_timeout60 ; checks if nofly time is > 0 | |
| 226 bcf oneminupdate | |
| 227 return | |
| 228 | |
| 229 nofly_timeout60: | |
|
229
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
230 movf nofly_time+0,W ; Is nofly null ? |
|
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
231 iorwf nofly_time+1,W |
|
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
232 bnz nofly_timeout60_1 ; No... |
|
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
233 |
|
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
234 bcf nofly_active ; Clear flag |
|
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
235 bcf LED_blue ; Clear led. |
|
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
236 return |
|
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
237 |
|
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
238 nofly_timeout60_1: |
|
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
239 bsf nofly_active ; Set flag |
| 0 | 240 movlw d'1' |
| 241 subwf nofly_time+0,F | |
| 242 movlw d'0' | |
|
229
85ea09d3b9d8
Nofly should not be reset after dive simulation (bug BB18).
JeanDo
parents:
156
diff
changeset
|
243 subwfb nofly_time+1,F ; reduce by one |
| 0 | 244 return |
| 245 | |
| 246 calc_surface_interval: | |
| 247 movff int_O_desaturation_time+0,lo ; divide by 60... | |
| 248 movff int_O_desaturation_time+1,hi | |
| 249 tstfsz lo ;=0? | |
| 250 bra calc_surface_interval2 ; No | |
| 251 tstfsz hi ;=0? | |
| 252 bra calc_surface_interval2 ; No | |
| 253 clrf surface_interval+0 | |
| 254 clrf surface_interval+1 ; Clear surface interval timer | |
| 255 return | |
| 256 | |
| 257 calc_surface_interval2: ; Increase surface interval timer | |
| 258 movlw d'1' | |
| 259 addwf surface_interval+0,F | |
| 260 movlw d'0' | |
| 261 addwfc surface_interval+1,F | |
| 262 return | |
| 263 | |
| 264 set_leds_surfmode: | |
| 265 btfsc nofly_active | |
| 21 | 266 btg LED_blue |
| 0 | 267 return |
| 268 | |
| 269 calc_deko_surfmode: | |
| 270 ostc_debug 'I' ; Sends debug-information to screen if debugmode active | |
| 271 | |
| 272 movff last_surfpressure+0,int_I_pres_surface+0 ; copy surface air pressure to deco routine | |
| 273 movff last_surfpressure+1,int_I_pres_surface+1 | |
| 274 clrf wait_temp ; Use as buffer | |
| 275 movff wait_temp,char_I_He_ratio ; No He at the Surface | |
| 276 movlw d'79' ; 79% N2 | |
| 277 movwf wait_temp ; Use as buffer | |
| 278 movff wait_temp,char_I_N2_ratio ; No He at the Surface | |
| 279 | |
| 280 movff amb_pressure+0,int_I_pres_respiration+0 ; copy surface air pressure to deco routine | |
| 281 movff amb_pressure+1,int_I_pres_respiration+1 | |
| 282 GETCUSTOM8 d'11' ; Saturation multiplier % | |
| 236 | 283 movff WREG,char_I_saturation_multiplier |
| 0 | 284 GETCUSTOM8 d'12' ; Desaturation multiplier % |
| 236 | 285 movff WREG,char_I_desaturation_multiplier |
| 0 | 286 |
| 116 | 287 call deco_calc_wo_deco_step_1_min ; calculate deco in surface mode |
| 0 | 288 movlb b'00000001' ; select ram bank 1 |
| 289 ostc_debug 'J' ; Sends debug-information to screen if debugmode active | |
| 254 | 290 |
|
257
f8f869bafd92
Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents:
254
diff
changeset
|
291 movff int_O_desaturation_time+0,desaturation_time_buffer+0 |
|
f8f869bafd92
Use timer TMR3 to limit loops in calc_hauptroutine_calc_deco()
JeanDo
parents:
254
diff
changeset
|
292 movff int_O_desaturation_time+1,desaturation_time_buffer+1 |
| 254 | 293 |
| 0 | 294 return |
| 295 | |
| 296 | |
| 297 test_charger: | |
| 298 bcf TRISC,1 ; CHRG_OUT output | |
| 299 bsf CHRG_OUT | |
| 300 | |
| 301 bcf cc_active ; Constant Current mode active? | |
| 302 btfss CHRG_IN ; If CHRG_IN=0 -> CC active | |
| 303 bsf cc_active ; Constant Current mode Active! | |
| 304 | |
| 305 bcf CHRG_OUT | |
| 306 bsf TRISC,1 ; CHRG_OUT high impedance | |
| 307 | |
| 308 WAIT10US d'10' | |
| 309 | |
| 310 bcf cv_active ; Constant Voltage mode Active? | |
| 311 btfss CHRG_IN ; If CHRG_IN=0 -> CV active | |
| 312 bsf cv_active ; Constant Voltage mode active! | |
| 313 | |
| 314 bcf TRISC,1 ; CHRG_OUT output | |
| 315 bcf CHRG_OUT | |
| 316 | |
| 317 btfsc cc_active | |
| 318 bra show_cc_active | |
| 319 btfsc cv_active | |
| 320 bra show_cv_active | |
| 321 | |
| 322 bsf TRISC,1 ; CHRG_OUT high impedance | |
| 323 | |
| 324 ; Charger inactive or ready | |
| 325 btfss charge_done ; charge done? | |
| 326 bra test_charger2 ; No, add incomplete cycle! | |
| 327 | |
| 328 ; Yes, store all data for complete cycle | |
| 329 bcf charge_started ; Clear flag | |
| 330 bcf charge_done ; Clear flag | |
| 331 ; Store incomplete/total cycles | |
| 332 read_int_eeprom d'50' ; Read byte (stored in EEDATA) | |
| 333 movff EEDATA,temp1 ; Low byte | |
| 334 read_int_eeprom d'51' ; Read byte (stored in EEDATA) | |
| 335 movff EEDATA,temp2 ; high byte | |
| 336 bcf STATUS,C | |
| 337 movlw d'1' | |
| 338 addwf temp1 | |
| 339 movlw d'0' | |
| 340 addwfc temp2 | |
| 341 movff temp1,EEDATA | |
| 342 write_int_eeprom d'50' ; write byte stored in EEDATA | |
| 343 movff temp2,EEDATA | |
| 344 write_int_eeprom d'51' ; write byte stored in EEDATA | |
| 345 | |
| 346 ; Store complete cycles | |
| 347 read_int_eeprom d'52' ; Read byte (stored in EEDATA) | |
| 348 movff EEDATA,temp1 ; Low byte | |
| 349 read_int_eeprom d'53' ; Read byte (stored in EEDATA) | |
| 350 movff EEDATA,temp2 ; high byte | |
| 351 bcf STATUS,C | |
| 352 movlw d'1' | |
| 353 addwf temp1 | |
| 354 movlw d'0' | |
| 355 addwfc temp2 | |
| 356 movff temp1,EEDATA | |
| 357 write_int_eeprom d'52' ; write byte stored in EEDATA | |
| 358 movff temp2,EEDATA | |
| 359 write_int_eeprom d'53' ; write byte stored in EEDATA | |
| 360 ; Store date of complete cycle | |
| 361 movff month,EEDATA | |
| 362 write_int_eeprom d'47' | |
| 363 movff day,EEDATA | |
| 364 write_int_eeprom d'48' | |
| 365 movff year,EEDATA | |
| 366 write_int_eeprom d'49' | |
| 367 | |
| 368 return | |
| 369 | |
| 370 test_charger2: | |
| 371 btfss charge_started ; Did the charger ever start? | |
| 372 return ; No, quit! | |
| 373 | |
| 374 bcf charge_started ; Clear flag | |
| 375 ; Store incomplete/total cycles | |
| 376 read_int_eeprom d'50' ; Read byte (stored in EEDATA) | |
| 377 movff EEDATA,temp1 ; Low byte | |
| 378 read_int_eeprom d'51' ; Read byte (stored in EEDATA) | |
| 379 movff EEDATA,temp2 ; high byte | |
| 380 bcf STATUS,C | |
| 381 movlw d'1' | |
| 382 addwf temp1 | |
| 383 movlw d'0' | |
| 384 addwfc temp2 | |
| 385 movff temp1,EEDATA | |
| 386 write_int_eeprom d'50' ; write byte stored in EEDATA | |
| 387 movff temp2,EEDATA | |
| 388 write_int_eeprom d'51' ; write byte stored in EEDATA | |
| 389 return | |
| 390 | |
| 391 show_cv_active: ; CV mode | |
| 21 | 392 bsf LED_red |
| 0 | 393 WAITMS d'100' |
| 21 | 394 bcf LED_red |
| 0 | 395 WAITMS d'100' |
| 21 | 396 bsf LED_red |
| 0 | 397 bsf charge_done ; Charge cycle finished |
| 398 return | |
| 399 | |
| 400 show_cc_active: ; CC mode | |
| 21 | 401 bsf LED_red |
| 0 | 402 bsf charge_started ; Charger started in CC mode |
| 403 bcf charge_done ; Charge cycle not finished | |
| 404 return | |
| 405 | |
| 406 | |
| 407 timeout_premenu: | |
| 408 btfss premenu ; is "Menu?" displayed? | |
| 409 return ; No | |
| 410 incf timeout_counter3,F ; Yes... | |
| 411 GETCUSTOM8 d'4' ; loads premenu_timeout into WREG | |
| 412 cpfsgt timeout_counter3 ; ... longer then premenu_timeout | |
| 413 return ; No! | |
| 414 bcf premenu ; Yes, so clear "Menu?" and clear pre_menu bit | |
| 415 | |
| 416 call PLED_topline_box_clear ; Clears Bar at the top | |
| 417 | |
| 418 btfsc gauge_mode | |
| 419 bra timeout_premenu2 ; Skip in Gauge mode | |
| 420 btfsc FLAG_apnoe_mode | |
| 421 bra timeout_premenu2 ; Skip in Apnoe mode | |
| 13 | 422 |
| 0 | 423 timeout_premenu2: |
| 424 call update_surf_press ; rewrite serial number | |
| 425 call PLED_serial ; rewrite serial number | |
| 426 clrf timeout_counter3 ; Also clear timeout | |
| 427 bcf switch_left ; and debounce switches | |
| 428 bcf switch_right | |
| 429 return | |
| 430 | |
| 431 test_switches_surfmode: ; checks switches in surfacemode | |
| 432 btfsc switch_left | |
| 433 bra test_switches_surfmode2 | |
| 434 btfsc switch_right | |
| 435 bra test_switches_surfmode3 | |
| 436 | |
| 437 ; No button press, reset timer0 | |
| 438 bcf T0CON,TMR0ON ; Stop Timer 0 | |
| 439 bcf INTCON,TMR0IF ; Clear flag | |
| 440 clrf TMR0H | |
| 441 clrf TMR0L | |
| 442 bcf INTCON,INT0IF ; Clear flag | |
| 443 bcf INTCON3,INT1IF ; Clear flag | |
| 444 return | |
| 445 | |
| 446 test_switches_surfmode3: | |
| 447 bcf switch_right | |
| 448 call PLED_topline_box ; Write a filled bar at the top | |
| 449 WIN_INVERT .1 ; Init new Wordprocessor | |
| 450 DISPLAYTEXT .4 ;Menu? | |
| 451 WIN_INVERT .0 ; Init new Wordprocessor | |
| 452 bsf premenu | |
| 453 clrf timeout_counter2 | |
| 454 return | |
| 455 | |
| 456 test_switches_surfmode2: | |
| 457 bcf switch_left | |
| 458 btfss premenu | |
| 13 | 459 bra test_switches_surfmode4 |
| 0 | 460 bsf menubit ; Enter Menu! |
| 461 return | |
| 462 | |
| 13 | 463 test_switches_surfmode4: |
| 107 | 464 bsf toggle_customview ; Toggle customview (Cleared in customview.asm) |
| 13 | 465 return |
| 0 | 466 |
| 467 timeout_surfmode: | |
| 468 incf timeout_counter2,F ; increase timeout counter | |
| 469 GETCUSTOM8 d'3' ; loads surfloop_timeout into WREG | |
| 470 addlw d'5' ; adds five seconds in case timout=zero! | |
| 471 btfsc STATUS,C ; > 255? | |
| 472 movlw d'255' ; Set to 255... | |
| 473 decf WREG,F ; Limit to 254 | |
| 474 cpfsgt timeout_counter2 ; Compare with timeout_counter2 | |
| 475 return ; return, no timeout | |
| 476 bsf sleepmode ; Set Flag | |
| 477 return ; Return |
