comparison code_part1/OSTC_code_asm_part1/pled_outputs.asm.orig @ 83:3e351e25f5d1

adding anti-aliased fonts frame and merging some patches from Jeando
author heinrichsweikamp
date Tue, 07 Dec 2010 22:36:19 +0100
parents
children
comparison
equal deleted inserted replaced
82:bc3092c41335 83:3e351e25f5d1
1
2 ; OSTC - diving computer code
3 ; Copyright (C) 2008 HeinrichsWeikamp GbR
4
5 ; This program is free software: you can redistribute it and/or modify
6 ; it under the terms of the GNU General Public License as published by
7 ; the Free Software Foundation, either version 3 of the License, or
8 ; (at your option) any later version.
9
10 ; This program is distributed in the hope that it will be useful,
11 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ; GNU General Public License for more details.
14
15 ; You should have received a copy of the GNU General Public License
16 ; along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18
19 ; routines for display outputs
20 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com
21 ; written: 15/01/05
22 ; last updated: 06/06/08
23 ; known bugs:
24 ; ToDo: More comments
25
26 PLED_divemask_color:
27 GETCUSTOM8 d'36' ; Divemask output color
28 bra PLED_standard_color_0
29
30 PLED_warnings_color:
31 GETCUSTOM8 d'37' ; Warnings output color
32 bra PLED_standard_color_0
33
34 PLED_standard_color:
35 GETCUSTOM8 d'35' ; Standard output color
36 PLED_standard_color_0: ; Common entry point
37 movwf oled1_temp ; copy
38 movlw d'0'
39 cpfseq oled1_temp
40 bra PLED_standard_color_1
41 bra PLED_standard_color2
42 PLED_standard_color_1:
43 movlw d'4'
44 cpfseq oled1_temp
45 bra PLED_standard_color_2
46 bra PLED_standard_color2
47 PLED_standard_color_2:
48 movlw d'8'
49 cpfseq oled1_temp
50 bra PLED_standard_color_3
51 bra PLED_standard_color2
52 PLED_standard_color_3:
53 movlw d'192'
54 cpfseq oled1_temp
55 bra PLED_standard_color_4
56 bra PLED_standard_color2
57 PLED_standard_color_4:
58 movlw d'196'
59 cpfseq oled1_temp
60 bra PLED_standard_color_5
61 bra PLED_standard_color2
62 PLED_standard_color_5:
63 movlw d'200'
64 cpfseq oled1_temp
65 bra PLED_standard_color_6
66 bra PLED_standard_color2
67 PLED_standard_color_6:
68 movf oled1_temp,W ; Color should be OK...
69 call PLED_set_color
70 return
71 PLED_standard_color2:
72 movlw 0xFF ; Reset Color
73 call PLED_set_color
74 return
75
76 PLED_color_code macro color_code_temp
77 movlw color_code_temp
78 call PLED_color_code1
79 endm
80
81 PLED_color_code1: ; Color-codes the output, if required
82 movwf debug_temp
83 dcfsnz debug_temp,F
84 bra PLED_color_code_depth ; CF43 [mBar], 16Bit
85 dcfsnz debug_temp,F
86 bra PLED_color_code_cns ; CF44 [%]
87 dcfsnz debug_temp,F
88 bra PLED_color_code_gf ; CF45 [%]
89 dcfsnz debug_temp,F
90 bra PLED_color_code_ppo2 ; CF46 [cBar]
91 dcfsnz debug_temp,F
92 bra PLED_color_code_velocity ; CF47 [m/min]
93 dcfsnz debug_temp,F
94 bra PLED_color_code_ceiling ; Show warning if CF41=1 and current depth>shown ceiling
95 dcfsnz debug_temp,F
96 bra PLED_color_code_gaslist ; Color-code current row in Gaslist (%O2 in "EEDATA")
97
98
99 PLED_color_code_gaslist: ; %O2 in "EEDATA"
100 ; Check very high ppO2 manually
101 movff amb_pressure+0,xA+0
102 movff amb_pressure+1,xA+1
103 movlw d'10'
104 movwf xB+0
105 clrf xB+1
106 call div16x16 ; xC=p_amb/10
107 movff xC+0,xA+0
108 movff xC+1,xA+1
109 movff EEDATA,xB+0
110 clrf xB+1
111 call mult16x16 ; EEDATA * p_amb/10
112
113 tstfsz xC+2 ; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55Bar?
114 bra PLED_color_code_gaslist1 ; Yes, warn in warning color
115
116 movff xC+0,sub_a+0
117 movff xC+1,sub_a+1
118 GETCUSTOM8 d'46' ; color-code ppO2 warning [cBar]
119 mullw d'100' ; ppo2_warning_high*100
120 movff PRODL,sub_b+0
121 movff PRODH,sub_b+1
122 call sub16 ; sub_c = sub_a - sub_b
123 btfss neg_flag
124 bra PLED_color_code_gaslist1; too high -> Warning Color!
125 call PLED_standard_color
126 return
127
128 PLED_color_code_gaslist1:
129 call PLED_warnings_color
130 return
131
132
133 PLED_color_code_ceiling:
134 GETCUSTOM8 d'40' ; =1: Warn at all?
135 movwf lo
136 movlw d'1'
137 cpfseq lo ; =1?
138 bra PLED_color_code_ceiling1 ; No, Set to default color
139
140 movff char_O_array_decodepth+0,lo ; Ceiling in m
141 decf lo,F ; -1
142 movff rel_pressure+1,xA+1
143 movff rel_pressure+0,xA+0
144 movlw LOW d'100'
145 movwf xB+0
146 clrf xB+1 ; Devide/100 -> xC+0 = Depth in m
147 call div16x16 ; xA/xB=xC with xA as remainder
148 movf xC+0,W ; Depth in m
149 subwf lo,W
150 btfsc STATUS,C
151 bra PLED_color_code_ceiling2 ; Set to warning color
152 PLED_color_code_ceiling1:
153 call PLED_standard_color
154 return
155 PLED_color_code_ceiling2:
156 call PLED_warnings_color
157 return
158
159 PLED_color_code_depth:
160 movff hi,hi_temp
161 movff lo,lo_temp
162 movff rel_pressure+1,hi
163 movff rel_pressure+0,lo
164 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mBar]
165 movff lo,sub_a+0
166 movff hi,sub_a+1
167 GETCUSTOM15 d'43' ; Depth warn [mBar]
168 movff lo,sub_b+0
169 movff hi,sub_b+1
170 call sub16 ; sub_c = sub_a - sub_b
171 btfss neg_flag
172 bra PLED_color_code_depth2; Set to warning color
173 call PLED_standard_color
174 movff hi_temp,hi
175 movff lo_temp,lo ; Restore hi, lo
176 return
177 PLED_color_code_depth2:
178 call PLED_warnings_color
179 movff hi_temp,hi
180 movff lo_temp,lo ; Restore hi, lo
181 return
182
183 PLED_color_code_cns:
184 movff char_O_CNS_fraction,lo
185 GETCUSTOM8 d'44' ; CNS Warn [%]
186 subwf lo,W
187 btfsc STATUS,C
188 bra PLED_color_code_cns2 ; Set to warning color
189 call PLED_standard_color
190 return
191 PLED_color_code_cns2:
192 call PLED_warnings_color
193 return
194
195 PLED_color_code_gf:
196 movff char_O_gradient_factor,lo ; gradient factor
197 GETCUSTOM8 d'45' ; GF Warn [%]
198 subwf lo,W
199 btfsc STATUS,C
200 bra PLED_color_code_gf2 ; Set to warning color
201 call PLED_standard_color
202 return
203 PLED_color_code_gf2:
204 call PLED_warnings_color
205 return
206
207 PLED_color_code_ppo2:
208 ; Check very high ppO2 manually
209 tstfsz xC+2 ; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55Bar?
210 bra PLED_color_code_ppo22 ; Yes, warn in warning color
211
212 movff xC+0,sub_a+0
213 movff xC+1,sub_a+1
214 GETCUSTOM8 d'46' ; color-code ppO2 warning [cBar]
215 mullw d'100'
216 movff PRODL,sub_b+0
217 movff PRODH,sub_b+1
218 call sub16 ; sub_c = sub_a - sub_b
219 btfss neg_flag
220 bra PLED_color_code_ppo22; Set to warning color
221 call PLED_standard_color
222 return
223 PLED_color_code_ppo22:
224 call PLED_warnings_color
225 return
226
227 PLED_color_code_velocity:
228 btfss neg_flag ; Ignore for ascend!
229 bra PLED_color_code_velocity1 ; Skip check!
230 movff divA+0,lo
231 GETCUSTOM8 d'47' ; Velocity warn [m/min]
232 subwf lo,W
233 btfsc STATUS,C
234 bra PLED_color_code_velocity2 ; Set to warning color
235 PLED_color_code_velocity1:
236 call PLED_standard_color
237 return
238 PLED_color_code_velocity2:
239 call PLED_warnings_color
240 return
241
242 ostc_debug macro debug_temp
243 movlw debug_temp
244 call ostc_debug1
245 endm
246
247 ostc_debug1:
248 movwf debug_temp
249
250 movff debug_char+4,debug_char+5 ; Save for background debugger
251 movff debug_char+3,debug_char+4
252 movff debug_char+2,debug_char+3
253 movff debug_char+1,debug_char+2
254 movff debug_char+0,debug_char+1
255 movff debug_temp,debug_char+0
256
257 btfss debug_mode ; Are we in debugmode?
258 return ; No, return!
259
260 WIN_TOP .200
261 WIN_LEFT .100
262 WIN_FONT FT_SMALL
263 WIN_INVERT .0 ; Init new Wordprocessor
264 call PLED_standard_color
265 lfsr FSR2,letter
266 movf debug_char+0,W
267 movwf POSTINC2
268 movf debug_char+1,W
269 movwf POSTINC2
270 movf debug_char+2,W
271 movwf POSTINC2
272 movf debug_char+3,W
273 movwf POSTINC2
274 movf debug_char+4,W
275 movwf POSTINC2
276 movf debug_char+5,W
277 movwf POSTINC2
278 movlw ' '
279 movwf POSTINC2
280 call word_processor
281 return
282
283
284 PLED_resetdebugger:
285 bcf LED_blue
286 call PLED_boot ; PLED boot
287 call PLED_ClearScreen ; clean up OLED
288 call PLED_standard_color
289 WIN_INVERT .0 ; Init new Wordprocessor
290
291 DISPLAYTEXT .133
292 DISPLAYTEXT .134
293 DISPLAYTEXT .135
294 DISPLAYTEXT .136 ; Display Debug intro
295
296 WIN_TOP .100
297 WIN_LEFT .10
298 WIN_FONT FT_SMALL
299 WIN_INVERT .0 ; Init new Wordprocessor
300 call PLED_standard_color
301 lfsr FSR2,letter
302 movf debug_char+0,W
303 movwf POSTINC2
304 movf debug_char+1,W
305 movwf POSTINC2
306 movf debug_char+2,W
307 movwf POSTINC2
308 movf debug_char+3,W
309 movwf POSTINC2
310 movf debug_char+4,W
311 movwf POSTINC2
312 movf debug_char+5,W
313 movwf POSTINC2
314 movlw '.'
315 movwf POSTINC2
316 movlw ' '
317 movwf POSTINC2
318 movff flag1,lo
319 output_8
320 movlw ' '
321 movwf POSTINC2
322 movff flag2,lo
323 output_8
324 call word_processor
325
326 WIN_TOP .125
327 WIN_LEFT .10
328 WIN_FONT FT_SMALL
329 WIN_INVERT .0 ; Init new Wordprocessor
330 call PLED_standard_color
331
332 lfsr FSR2,letter
333 movff flag3,lo
334 output_8
335 movlw ' '
336 movwf POSTINC2
337 movff flag4,lo
338 output_8
339 movlw ' '
340 movwf POSTINC2
341 movff flag5,lo
342 output_8
343 movlw ' '
344 movwf POSTINC2
345 movff flag6,lo
346 output_8
347 movlw ' '
348 movwf POSTINC2
349 movff flag7,lo
350 output_8
351 call word_processor
352
353 WIN_TOP .150
354 WIN_LEFT .10
355 WIN_FONT FT_SMALL
356 WIN_INVERT .0 ; Init new Wordprocessor
357 call PLED_standard_color
358
359 lfsr FSR2,letter
360 movff flag8,lo
361 output_8
362 movlw ' '
363 movwf POSTINC2
364 movff flag9,lo
365 output_8
366 movlw ' '
367 movwf POSTINC2
368 movff flag10,lo
369 output_8
370 movlw ' '
371 movwf POSTINC2
372 movff flag11,lo
373 output_8
374 movlw ' '
375 movwf POSTINC2
376 movff flag12,lo
377 output_8
378 call word_processor
379
380 PLED_resetdebugger_loop:
381 btfss switch_left
382 bra PLED_resetdebugger_loop ; Loop
383 bcf LED_red
384 return
385
386 PLED_divemode_mask: ; Displays mask in Dive-Mode
387 call PLED_divemask_color ; Set Color for Divemode mask
388 DISPLAYTEXTH .267 ; Max Depth
389 DISPLAYTEXT .86 ; Divetime
390 DISPLAYTEXT .87 ; Depth
391 call PLED_standard_color
392 return
393
394 PLED_clear_decoarea:
395 movlw .0
396 movff WREG,box_temp+0 ; Data
397 movlw .60
398 movff WREG,box_temp+1 ; row top (0-239)
399 movlw .239
400 movff WREG,box_temp+2 ; row bottom (0-239)
401 movlw .090
402 movff WREG,box_temp+3 ; column left (0-159)
403 movlw .159
404 movff WREG,box_temp+4 ; column right (0-159)
405 call PLED_box
406 call PLED_temp_divemode ; redraw temperature
407 call PLED_active_gas_divemode ; redraw active Gas
408 return
409
410 PLED_display_ndl_mask:
411 ; Clear Dekostop and Dekosum
412 rcall PLED_clear_decoarea
413
414 call PLED_divemask_color ; Set Color for Divemode mask
415 DISPLAYTEXT d'84' ; NoStop
416 call PLED_standard_color
417
418 PLED_display_ndl_mask2:
419 ; Clears Gradient Factor
420 movlw d'8'
421 movwf temp1
422 WIN_TOP .145
423 WIN_LEFT .0
424 call PLED_display_clear_common_y1
425 return
426
427 PLED_display_ndl:
428 btfsc multi_gf_display ; Is the Multi-GF Table displayed?
429 return ; Yes, No update and return!
430
431 ostc_debug 'z' ; Sends debug-information to screen if debugmode active
432
433 WIN_TOP .185
434 WIN_LEFT .119
435 WIN_FONT FT_MEDIUM
436 WIN_INVERT .0 ; Init new Wordprocessor
437 call PLED_standard_color
438
439 lfsr FSR2,letter
440 movff char_O_nullzeit,lo ; NDL in minutes
441 output_8
442 movlw 0x27 ; "'"
443 movwf POSTINC2
444 call word_processor
445 WIN_FONT FT_SMALL
446 return
447
448 PLED_display_deko_mask:
449 rcall PLED_clear_decoarea
450 ; total deco time word
451 call PLED_divemask_color ; Set Color for Divemode mask
452 DISPLAYTEXT d'85' ; TTS
453 call PLED_standard_color
454 return
455
456 PLED_display_deko:
457 btfsc multi_gf_display ; Is the Multi-GF Table displayed?
458 return ; Yes, No update and return!
459
460 btfsc menubit ; Divemode menu active?
461 bra PLED_display_deko1 ; Yes, do not display dekostop
462
463 ostc_debug 'y' ; Sends debug-information to screen if debugmode active
464 ; deco stop word
465 call PLED_divemask_color ; Set Color for Divemode mask
466 DISPLAYTEXT d'82' ; DEKOSTOP
467 call PLED_standard_color
468
469 WIN_TOP .118
470 WIN_LEFT .94
471 WIN_FONT FT_MEDIUM
472 WIN_INVERT .0 ; Init new Wordprocessor
473 PLED_color_code warn_ceiling ; Color-code Output
474 lfsr FSR2,letter
475 movff char_O_array_decodepth+0,lo ; Ceiling in m
476 output_99
477 movlw 'm' ; "m"
478 movwf POSTINC2
479 movff char_O_array_decotime,lo ; length of first stop in m
480 output_99
481 movlw 0x27 ; "'"
482 movwf POSTINC2
483 call word_processor
484 WIN_FONT FT_SMALL
485
486 PLED_display_deko1:
487 btfsc multi_gf_display ; Is the Multi-GF Table displayed?
488 return ; Yes, No update and return!
489
490 ostc_debug 'x' ; Sends debug-information to screen if debugmode active
491
492 WIN_TOP .185
493 WIN_LEFT .119
494 WIN_FONT FT_MEDIUM
495 WIN_INVERT .0 ; Init new Wordprocessor
496 call PLED_standard_color
497 lfsr FSR2,letter
498 movff char_O_ascenttime,lo ; complete ascend time
499 movlw d'199' ; limit display of total ascend time to 99mins....
500 cpfslt lo ; skip if 199 (WREG) > lo
501 movwf lo
502 bcf leftbind
503 output_8
504 movlw 0x27 ; "'"
505 movwf POSTINC2
506 call word_processor
507
508 movff char_O_gradient_factor,lo ; gradient factor
509 GETCUSTOM8 d'8' ; threshold for display
510 cpfslt lo ; show value?
511 bra PLED_display_deko2 ; Yes
512 ; No
513 bra PLED_display_ndl_mask2 ; Clear gradient factor
514
515 PLED_display_deko2:
516 ostc_debug 'w' ; Sends debug-information to screen if debugmode active
517 ;GF
518 WIN_TOP .145
519 WIN_LEFT .0
520 WIN_FONT FT_SMALL
521 PLED_color_code warn_gf ; Color-code Output
522 lfsr FSR2,letter
523 movlw 'G'
524 movwf POSTINC2
525 movlw 'F'
526 movwf POSTINC2
527 movlw ':'
528 movwf POSTINC2
529 movff char_O_gradient_factor,lo ; gradient factor
530 output_8
531 movlw '%'
532 movwf POSTINC2
533 movlw ' '
534 movwf POSTINC2
535 call word_processor
536 call PLED_standard_color
537 return
538
539 PLED_simulator_data:
540 WIN_TOP .65
541 WIN_LEFT .105
542 WIN_FONT FT_SMALL
543 call PLED_standard_color
544 lfsr FSR2,letter
545 movff logbook_temp1,lo
546 bsf leftbind
547 output_8
548 bcf leftbind
549 movlw 'm'
550 movwf POSTINC2
551 movlw 'i'
552 movwf POSTINC2
553 movlw 'n'
554 movwf POSTINC2
555 movlw ' '
556 movwf POSTINC2
557 call word_processor
558
559 WIN_TOP .95
560 WIN_LEFT .100
561 WIN_FONT FT_SMALL
562 call PLED_standard_color
563 lfsr FSR2,letter
564 movff logbook_temp2,lo
565 bsf leftbind
566 output_8
567 bcf leftbind
568 movlw 'm'
569 movwf POSTINC2
570 movlw ' '
571 movwf POSTINC2
572 call word_processor
573 return
574
575 PLED_display_velocity:
576 btfsc multi_gf_display ; Is the Multi-GF Table displayed?
577 return ; Yes, No update and return!
578
579 ostc_debug 'v' ; Sends debug-information to screen if debugmode active
580 WIN_TOP .90
581 WIN_LEFT .0
582 WIN_FONT FT_SMALL
583 PLED_color_code warn_velocity ; Color code output
584 lfsr FSR2,letter
585 movlw '-'
586 btfsc neg_flag
587 movlw '+'
588 movwf POSTINC2
589 movff divA+0,lo
590 output_99
591 OUTPUTTEXT d'83' ; m/min
592 call word_processor
593 call PLED_standard_color
594 bsf pled_velocity_display
595 return
596
597 PLED_display_velocity_clear:
598 movlw d'8'
599 movwf temp1
600 WIN_TOP .90
601 WIN_LEFT .0
602 bcf pled_velocity_display
603 bra PLED_display_clear_common_y1
604
605 PLED_display_wait_clear
606 movlw d'6'
607 movwf temp1
608 WIN_TOP .2
609 WIN_LEFT .115
610 bra PLED_display_clear_common_y1
611
612 PLED_display_clear_common_y2: ; Clears with y-scale=2
613 WIN_FONT FT_MEDIUM
614 bra PLED_display_clear_common1
615
616 PLED_display_clear_common_y1: ; Clears with y-scale=1
617 WIN_FONT FT_SMALL
618 PLED_display_clear_common1:
619 lfsr FSR2,letter
620 PLED_display_clear_common2:
621 movlw ' '
622 movwf POSTINC2
623 decfsz temp1,F
624 bra PLED_display_clear_common2
625 call word_processor
626 WIN_FONT FT_SMALL
627 return
628
629 PLED_diveclock:
630 GETCUSTOM8 d'39' ; =1: Show clock in Divemode
631 movwf lo
632 movlw d'1'
633 cpfseq lo ; =1?
634 return ; No, Done.
635
636 btfsc menubit ; is the Dive mode menu displayed?
637 return ; Yes
638
639 WIN_TOP .2
640 WIN_LEFT .64
641 WIN_FONT FT_SMALL
642 WIN_INVERT .0 ; Init new Wordprocessor
643 call PLED_standard_color
644 lfsr FSR2,letter
645 movff hours,lo
646 output_99x
647 movlw ':'
648 movwf POSTINC2
649 movff mins,lo
650 output_99x
651 call word_processor
652 return
653
654 PLED_clock:
655 ostc_debug 'c'
656
657 ;If > 0 display surface_interval:2 and clock changing every 5 seconds
658 ;use timeout_counter for this
659 WIN_TOP .50
660 WIN_LEFT .1
661 WIN_FONT FT_SMALL
662 WIN_INVERT .0 ; Init new Wordprocessor
663 call PLED_standard_color
664
665 lfsr FSR2,letter
666
667 movff surface_interval+0,lo
668 tstfsz lo
669 bra PLED_clock0 ; Not Zero, switch between Interval and clock
670 movff surface_interval+1,lo
671 tstfsz lo
672 bra PLED_clock0 ; Not Zero, switch between Interval and clock
673 bra PLED_clock3 ; surface_interval=0, always display clock!
674
675 PLED_clock0:
676 btfss show_interval ; Show Interval?
677 bra PLED_clock2 ; No, display clock and reset counter
678
679 PLED_clock1:
680 decfsz timeout_counter,F ; =0?
681 bra PLED_clock1a ; No...
682 bra PLED_clock3 ; Yes, display clock and reset counter
683
684 PLED_clock1a:
685 bsf show_interval
686 movlw d'6'
687 cpfslt timeout_counter ; f < w? -> timeout_counter>5?
688 rcall PLED_clock_reload_timer ; No, reload counter
689
690 movff surface_interval+0,lo
691 movff surface_interval+1,hi
692 call convert_time ; lo=mins, hi=hours
693
694 movf hi,W
695 movff lo,hi
696 movwf lo ; exchange lo and hi
697
698 movlw 'I'
699 movwf POSTINC2
700 movlw 'n'
701 movwf POSTINC2
702 movlw 't'
703 movwf POSTINC2
704 movlw ':'
705 movwf POSTINC2
706 output_99x
707 movlw ':'
708 movwf POSTINC2
709 movff hi,lo
710 output_99x
711 movlw ' '
712 movwf POSTINC2
713 call word_processor
714 return
715
716 PLED_clock_reload_timer:
717 bcf show_interval
718 movlw d'5'
719 movwf timeout_counter
720 return
721
722 PLED_interval_reload_timer:
723 bsf show_interval
724 movlw d'5'
725 movwf timeout_counter
726 return
727
728 PLED_clock2:
729 decfsz timeout_counter,F ; =0?
730 bra PLED_clock3 ; No...
731 bra PLED_clock1a ; Yes, display interval and reset counter
732
733 PLED_clock3:
734 bcf show_interval
735 movlw d'6'
736 cpfslt timeout_counter ; f < w? -> timeout_counter>5?
737 rcall PLED_interval_reload_timer; No, reload counter
738
739 movff hours,lo
740 output_99x
741 movlw ':'
742 movwf POSTINC2
743 movff mins,lo
744 output_99x
745 movlw ':'
746 movwf POSTINC2
747 movff secs,lo
748 output_99x
749 movlw ' '
750 movwf POSTINC2
751 call word_processor
752 return
753
754 PLED_logbook_cursor:
755
756 PLED_menu_cursor:
757 WIN_TOP .35
758 WIN_LEFT .0
759 WIN_FONT FT_SMALL
760 WIN_INVERT .0 ; Init new Wordprocessor
761 call PLED_standard_color
762
763 lfsr FSR2,letter
764 movlw 0xB8
765 movwf POSTINC2
766 call word_processor
767
768 WIN_TOP .65
769 lfsr FSR2,letter
770 movlw 0xB8
771 movwf POSTINC2
772 call word_processor
773
774 WIN_TOP .95
775 lfsr FSR2,letter
776 movlw 0xB8
777 movwf POSTINC2
778 call word_processor
779
780 WIN_TOP .125
781 lfsr FSR2,letter
782 movlw 0xB8
783 movwf POSTINC2
784 call word_processor
785
786 WIN_TOP .155
787 call PLED_standard_color
788 lfsr FSR2,letter
789 movlw 0xB8
790 movwf POSTINC2
791 call word_processor
792
793 WIN_TOP .185
794 lfsr FSR2,letter
795 movlw 0xB8
796 movwf POSTINC2
797 call word_processor
798
799 movff menupos,temp1
800 dcfsnz temp1,F
801 movlw d'35'
802 dcfsnz temp1,F
803 movlw d'65'
804 dcfsnz temp1,F
805 movlw d'95'
806 dcfsnz temp1,F
807 movlw d'125'
808 dcfsnz temp1,F
809 movlw d'155'
810 dcfsnz temp1,F
811 movlw d'185'
812
813 movff WREG,win_top
814 lfsr FSR2,letter
815 movlw 0xB7
816 movwf POSTINC2
817 call word_processor
818 return
819
820 PLED_menu_mask:
821 call PLED_topline_box
822 WIN_INVERT .1 ; Init new Wordprocessor
823 DISPLAYTEXT .5 ; Menu:
824 WIN_INVERT .0 ; Init new Wordprocessor
825 DISPLAYTEXT .6 ; Logbook
826 DISPLAYTEXT .7 ; Gas Setup
827 DISPLAYTEXT .9 ; Reset all
828 DISPLAYTEXT .10 ; Setup...
829 DISPLAYTEXT .142 ; More...
830 DISPLAYTEXT .11 ; Exit
831 return
832
833 PLED_setup_menu_mask:
834 call PLED_topline_box
835 WIN_INVERT .1 ; Init new Wordprocessor
836 DISPLAYTEXT .98 ; Setup Menu:
837 WIN_INVERT .0 ; Init new Wordprocessor
838 DISPLAYTEXT .99 ; Custom FunctionsI
839 DISPLAYTEXT .153 ; Custom FunctionsII
840 DISPLAYTEXTH .276 ; Salinity:
841 DISPLAYTEXT .100 ; Decotype:
842 DISPLAYTEXT .142 ; More...
843 DISPLAYTEXT .11 ; Exit
844 return
845
846 PLED_more_setup_menu_mask:
847 call PLED_topline_box
848 WIN_INVERT .1 ; Init new Wordprocessor
849 DISPLAYTEXTH .258 ; Setup Menu 2:
850 WIN_INVERT .0 ; Init new Wordprocessor
851 DISPLAYTEXTH .257 ; Date format:
852 DISPLAYTEXT .129 ; Debug:
853 DISPLAYTEXT .187 ; Show License
854
855 DISPLAYTEXT .11 ; Exit
856 return
857
858 PLED_more_menu_mask:
859 call PLED_topline_box
860 WIN_INVERT .1 ; Init new Wordprocessor
861 DISPLAYTEXT .144 ; Menu 2:
862 WIN_INVERT .0 ; Init new Wordprocessor
863 DISPLAYTEXT .8 ; Set Time
864 DISPLAYTEXT .110 ; Const. ppO2 Setup
865 DISPLAYTEXT .113 ; Battery Info
866 DISPLAYTEXT .247 ; Simulator
867
868 DISPLAYTEXT .11 ; Exit
869 return
870
871 PLED_reset_menu_mask:
872 call PLED_topline_box
873 WIN_INVERT .1 ; Init new Wordprocessor
874 DISPLAYTEXT .28 ; Reset Menu
875 WIN_INVERT .0 ; Init new Wordprocessor
876 DISPLAYTEXT .21 ; Cancel Reset
877 DISPLAYTEXT .245 ; Reset CF,Gases & Deco
878 DISPLAYTEXTH .284 ; Reset Logbook
879 DISPLAYTEXTH .285 ; Reboot OSTC
880 DISPLAYTEXTH .286 ; Reset Decodata
881 DISPLAYTEXT .11 ; Exit
882 return
883
884 PLED_simulator_mask:
885 call PLED_topline_box
886 WIN_INVERT .1 ; Init new Wordprocessor
887 DISPLAYTEXT .248 ; OSTC Simulator
888 WIN_INVERT .0 ; Init new Wordprocessor
889 DISPLAYTEXT .249 ; Start Dive
890 DISPLAYTEXTH .277 ; Bottom Time:
891 DISPLAYTEXTH .278 ; Max. Depth:
892 DISPLAYTEXTH .279 ; Calculate Deco
893 DISPLAYTEXTH .280 ; Show Decoplan
894 DISPLAYTEXT .11 ; Exit
895 return
896
897
898
899
900 PLED_temp_surfmode:
901 ostc_debug 'e'
902 movff temperature+0,last_temperature+0
903 movff temperature+1,last_temperature+1
904 WIN_TOP .100
905 WIN_LEFT .1
906 WIN_FONT FT_SMALL
907 WIN_INVERT .0 ; Init new Wordprocessor
908 call PLED_standard_color
909
910 lfsr FSR2,letter
911 movlw '-'
912 btfsc neg_temp ; Show "-"?
913 movwf POSTINC2 ; Yes
914 movff temperature+0,lo
915 movff temperature+1,hi
916 movlw d'3'
917 movwf ignore_digits
918 bsf leftbind ; left orientated output
919 output_16dp d'2'
920 bcf leftbind
921 movlw '°'
922 movwf POSTINC2
923 movlw 'C'
924 movwf POSTINC2
925 movlw ' '
926 movwf POSTINC2
927 call word_processor
928 return
929
930 PLED_temp_divemode:
931 btfsc multi_gf_display ; Is the Multi-GF Table displayed?
932 return ; Yes, No update and return!
933
934 ostc_debug 'u' ; Sends debug-information to screen if debugmode active
935
936 ; temperature
937 movff temperature+0,last_temperature+0
938 movff temperature+1,last_temperature+1
939
940 WIN_TOP .216
941 WIN_LEFT .65
942 WIN_FONT FT_SMALL
943 WIN_INVERT .0 ; Init new Wordprocessor
944 call PLED_standard_color
945
946 lfsr FSR2,letter
947 movlw '-'
948 btfsc neg_temp ; Show "-"?
949 movwf POSTINC2 ; Yes
950 movff temperature+0,lo
951 movff temperature+1,hi
952 movlw d'3'
953 movwf ignore_digits
954 bsf leftbind ; left orientated output
955 output_16dp d'2'
956 bcf leftbind
957 movlw '°'
958 movwf POSTINC2
959 movlw ' '
960 movwf POSTINC2
961 call word_processor
962 return
963
964 PLED_show_ppO2: ; Show ppO2
965 ostc_debug 't' ; Sends debug-information to screen if debugmode active
966 WIN_TOP .120
967 WIN_LEFT .0
968 WIN_FONT FT_SMALL
969 PLED_color_code warn_ppo2 ; Color-code output (ppO2 stored in xC)
970
971 lfsr FSR2,letter
972 movlw 'p'
973 movwf POSTINC2
974 movlw 'p'
975 movwf POSTINC2
976 movlw 'O'
977 movwf POSTINC2
978 movlw '2'
979 movwf POSTINC2
980 movlw ':'
981 movwf POSTINC2
982
983 ; Check very high ppO2 manually
984 tstfsz xC+2 ; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55Bar?
985 bra PLED_show_ppO2_3 ; Yes, display fixed Value!
986
987 movff xC+0,lo
988 movff xC+1,hi
989 bsf ignore_digit4
990 output_16dp d'1'
991 bcf ignore_digit4
992 PLED_show_ppO2_2:
993 movlw ' '
994 movwf POSTINC2
995 call word_processor
996 call PLED_standard_color
997 return
998
999 PLED_show_ppO2_3:
1000 movlw '>'
1001 movwf POSTINC2
1002 movlw '6'
1003 movwf POSTINC2
1004 movlw '.'
1005 movwf POSTINC2
1006 movlw '6'
1007 movwf POSTINC2
1008 bra PLED_show_ppO2_2
1009
1010 PLED_show_ppO2_clear: ; Clear ppO2
1011 movlw d'10'
1012 movwf temp1
1013 WIN_TOP .120
1014 WIN_LEFT .0
1015 call PLED_display_clear_common_y1
1016 return
1017
1018 PLED_active_gas_clear: ; clears active gas!
1019 WIN_TOP .192
1020 WIN_LEFT .65
1021 movlw d'5'
1022 movwf temp1
1023 bra PLED_display_clear_common_y1; also returns!
1024
1025 PLED_active_gas_divemode: ; Displays current gas (e.g. 40/20) if a) He>0 or b) O2>Custom9
1026 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode
1027 return
1028
1029 btfsc multi_gf_display ; Is the Multi-GF Table displayed?
1030 return ; Yes, No update and return!
1031
1032 WIN_INVERT .0 ; Init new Wordprocessor
1033 call PLED_active_gas_divemode_show ; Show gas (Non-Inverted in all cases)
1034
1035 btfss better_gas_available ;=1: A better gas is available and a gas change is advised in divemode
1036 return ; Done.
1037
1038 ; Check if Gas Output should blink when a better gas is available...
1039 GETCUSTOM8 d'42' ; =1 if gas should blink
1040 movwf lo
1041 movlw d'1'
1042 cpfseq lo ; =1?
1043 return ; No, Done.
1044
1045 btg blinking_better_gas ; Toggle blink bit...
1046 btfss blinking_better_gas ; blink now?
1047 return ; No, Done.
1048 WIN_INVERT .1 ; Init new Wordprocessor
1049 call PLED_active_gas_divemode_show ; Show gas (Non-Inverted in all cases)
1050 WIN_INVERT .0 ; Init new Wordprocessor
1051 return ; Done.
1052
1053 PLED_active_gas_divemode_show:
1054 ostc_debug 's' ; Sends debug-information to screen if debugmode active
1055 ; gas
1056 WIN_TOP .192
1057 WIN_LEFT .65
1058 WIN_FONT FT_SMALL
1059 call PLED_standard_color
1060
1061 movlw d'100' ; 100% in the tank
1062 movff char_I_N2_ratio,lo ; minus N2
1063 bsf STATUS,C ; set borrow bit
1064 subfwb lo,W
1065 movff char_I_He_ratio,lo ; minus He
1066 bsf STATUS,C ; set borrow bit
1067 subfwb lo,F ; =% O2
1068 GETCUSTOM8 d'9' ; get oxygen treshold
1069 movff char_I_He_ratio,hi ; He ratio
1070 cpfsgt lo
1071 bra PLED_active_gas_divemode2 ; Check He
1072 bra PLED_active_gas_divemode3 ; Skip He check, display gas
1073
1074 PLED_active_gas_divemode2:
1075 tstfsz hi ; He = 0 %
1076 bra PLED_active_gas_divemode3 ; display gas
1077 ; O2 below treshold, He=0 -> Skip display!
1078 movlw d'5'
1079 movwf temp1
1080 bra PLED_display_clear_common_y1 ; also returns!
1081
1082 PLED_active_gas_divemode3:
1083 movlw d'21'
1084 cpfseq lo ; Air? (O2=21%)
1085 bra PLED_active_gas_divemode4 ; No!
1086 tstfsz hi ; Air? (He=0%)
1087 bra PLED_active_gas_divemode4 ; No!
1088
1089 ; Yes, display "Air" instead of 21/0
1090 lfsr FSR2,letter
1091 OUTPUTTEXTH d'264' ;"Air "
1092 movlw ' '
1093 btfsc better_gas_available ;=1: A better gas is available and a gas change is advised in divemode
1094 movlw '*'
1095 movwf POSTINC2
1096 call word_processor
1097 return
1098
1099 PLED_active_gas_divemode4:
1100 lfsr FSR2,letter
1101 bsf leftbind ; left orientated output
1102 output_8 ; O2 ratio is still in "lo"
1103 movlw '/'
1104 movwf POSTINC2
1105 movff char_I_He_ratio,lo ; copy He ratio into lo
1106 output_8
1107 movlw ' '
1108 btfsc better_gas_available ;=1: A better gas is available and a gas change is advised in divemode
1109 movlw '*'
1110 movwf POSTINC2
1111 bcf leftbind
1112 call word_processor
1113 return
1114
1115
1116
1117 PLED_display_decotype_surface:
1118 WIN_LEFT .85
1119 WIN_FONT FT_SMALL
1120 WIN_INVERT .0 ; Init new Wordprocessor
1121 clrf EEADRH
1122 read_int_eeprom d'34' ; Read deco data
1123 tstfsz EEDATA
1124 bra show_decotype_surface2
1125
1126 ;ZH-L16
1127 WIN_TOP .125
1128 call PLED_standard_color
1129
1130 lfsr FSR2,letter
1131 movlw 'O'
1132 movwf POSTINC2
1133 call word_processor
1134 WIN_LEFT .85
1135 WIN_FONT FT_SMALL
1136 WIN_INVERT .0 ; Init new Wordprocessor
1137 WIN_TOP .150
1138 call PLED_standard_color
1139
1140 lfsr FSR2,letter
1141 movlw 'C'
1142 movwf POSTINC2
1143 call word_processor
1144 return
1145 show_decotype_surface2:
1146 decf EEDATA,F
1147 tstfsz EEDATA
1148 bra show_decotype_surface3
1149 ; Gauge
1150 return
1151
1152 show_decotype_surface3:
1153 decf EEDATA,F
1154 tstfsz EEDATA
1155 bra show_decotype_surface4
1156 ; const. ppO2
1157 WIN_TOP .125
1158 call PLED_standard_color
1159
1160 lfsr FSR2,letter
1161 movlw 'C'
1162 movwf POSTINC2
1163 WIN_LEFT .85
1164 WIN_FONT FT_SMALL
1165 WIN_INVERT .0 ; Init new Wordprocessor
1166 call word_processor
1167 WIN_TOP .150
1168 call PLED_standard_color
1169
1170 lfsr FSR2,letter
1171 movlw 'C'
1172 movwf POSTINC2
1173 WIN_LEFT .85
1174 WIN_FONT FT_SMALL
1175 WIN_INVERT .0 ; Init new Wordprocessor
1176 call word_processor
1177 return
1178 show_decotype_surface4:
1179 decf EEDATA,F
1180 tstfsz EEDATA
1181 bra show_decotype_surface5
1182 ; Apnoe
1183 return
1184 show_decotype_surface5:
1185 decf EEDATA,F
1186 tstfsz EEDATA
1187 bra show_decotype_surface6
1188 ; Multi-GF OC
1189 WIN_TOP .125
1190 lfsr FSR2,letter
1191 movlw 'G'
1192 movwf POSTINC2
1193 WIN_LEFT .85
1194 WIN_FONT FT_SMALL
1195 WIN_INVERT .0 ; Init new Wordprocessor
1196 call PLED_standard_color
1197
1198 call word_processor
1199 WIN_TOP .150
1200 lfsr FSR2,letter
1201 movlw 'F'
1202 movwf POSTINC2
1203 WIN_LEFT .85
1204 WIN_FONT FT_SMALL
1205 WIN_INVERT .0 ; Init new Wordprocessor
1206 call PLED_standard_color
1207
1208 call word_processor
1209 return
1210
1211 show_decotype_surface6:
1212 ; Multi-GF CC
1213 WIN_TOP .125
1214 lfsr FSR2,letter
1215 movlw 'G'
1216 movwf POSTINC2
1217 WIN_LEFT .85
1218 WIN_FONT FT_SMALL
1219 WIN_INVERT .0 ; Init new Wordprocessor
1220 call PLED_standard_color
1221
1222 call word_processor
1223 WIN_TOP .150
1224 lfsr FSR2,letter
1225 movlw 'F'
1226 movwf POSTINC2
1227 WIN_LEFT .85
1228 WIN_FONT FT_SMALL
1229 WIN_INVERT .0 ; Init new Wordprocessor
1230 call PLED_standard_color
1231
1232 call word_processor
1233 return
1234
1235 PLED_pre_dive_screen: ;Display Pre-Dive Screen
1236 movlw .0
1237 movff WREG,box_temp+0 ; Data
1238 movlw .25
1239 movff WREG,box_temp+1 ; row top (0-239)
1240 movlw .120
1241 movff WREG,box_temp+2 ; row bottom (0-239)
1242 movlw .82
1243 movff WREG,box_temp+3 ; column left (0-159)
1244 movlw .159
1245 movff WREG,box_temp+4 ; column right (0-159)
1246 call PLED_box
1247
1248 ; List active gases/Setpoints
1249
1250 btfsc FLAG_const_ppO2_mode ; in ppO2 mode?
1251 bra PLED_pre_dive_screen3 ; Yes, display SetPoint/Sensor result list
1252
1253 PLED_pre_dive_screen2:
1254 ostc_debug 'm' ; Sends debug-information to screen if debugmode active
1255
1256 WIN_LEFT .90
1257 WIN_FONT FT_SMALL
1258 bsf leftbind
1259
1260 movlw d'2'
1261 movwf wait_temp ; here: stores eeprom address for gas list
1262 movlw d'0'
1263 movwf waitms_temp ; here: stores row for gas list
1264 clrf hi ; here: Gas counter
1265
1266 PLED_pre_dive_screen2_loop:
1267 incf hi,F ; Increase Gas
1268 movlw d'4'
1269 addwf wait_temp,F ; Increase eeprom address for gas list
1270
1271 lfsr FSR2,letter
1272 movlw 'G'
1273 movwf POSTINC2
1274 movff hi,lo ; copy gas number
1275 output_8 ; display gas number
1276 movlw ':'
1277 movwf POSTINC2
1278 movlw ' '
1279 movwf POSTINC2
1280 movff wait_temp, EEADR; Gas #hi: %O2 - Set address in internal EEPROM
1281 call read_eeprom ; get byte (stored in EEDATA)
1282 movff EEDATA,lo ; copy to lo
1283 output_8 ; outputs into Postinc2!
1284 movlw '/'
1285 movwf POSTINC2
1286 incf EEADR,F ; Gas #hi: %He - Set address in internal EEPROM
1287 call read_eeprom ; get byte (stored in EEDATA)
1288 movff EEDATA,lo ; copy to lo
1289 output_8 ; outputs into Postinc2!
1290
1291 read_int_eeprom d'27' ; read flag register
1292 movff hi,lo ; copy gas number
1293 PLED_pre_dive_screen2_loop1:
1294 rrcf EEDATA ; roll flags into carry
1295 decfsz lo,F ; max. 5 times...
1296 bra PLED_pre_dive_screen2_loop1
1297
1298 btfsc STATUS,C ; test carry
1299 bra PLED_pre_dive_white
1300
1301 movlw color_grey
1302 call PLED_set_color ; grey out inactive gases!
1303 bra PLED_pre_dive_color_done
1304
1305 PLED_pre_dive_white:
1306 call PLED_standard_color
1307
1308 PLED_pre_dive_color_done:
1309 read_int_eeprom d'33' ; Read start gas (1-5)
1310 movf EEDATA,W
1311 cpfseq hi ; Current Gas the active gas?
1312 bra PLED_pre_dive_screen2a
1313 bra PLED_pre_dive_screen2b
1314
1315 PLED_pre_dive_screen2a:
1316 movlw d'25'
1317 addwf waitms_temp,F ; Increase row
1318 WIN_LEFT .90
1319 movff waitms_temp,win_top ; Set Row
1320 call word_processor ; No, display gas
1321
1322 PLED_pre_dive_screen2b:
1323 call PLED_standard_color
1324
1325 movlw d'5' ; list all four (remaining) gases
1326 cpfseq hi ; All gases shown?
1327 bra PLED_pre_dive_screen2_loop ; No
1328
1329 return ; No, return (OC mode)
1330
1331 PLED_pre_dive_screen3:
1332 WIN_LEFT .90
1333 WIN_FONT FT_SMALL
1334 bsf leftbind
1335
1336 ; list three SP in Gaslist
1337 movlw d'35' ; 36 = current SP position in EEPROM
1338 movwf wait_temp ; here: stores eeprom address for gas list
1339 movlw d'0'
1340 movwf waitms_temp ; here: stores row for gas list
1341 clrf temp6 ; here: SP counter
1342
1343 PLED_pre_dive_screen3_loop:
1344 incf wait_temp,F ; EEPROM address
1345 incf temp6,F ; Increase SP
1346
1347 movlw d'25'
1348 addwf waitms_temp,F ; Increase row
1349 WIN_LEFT .90
1350 movff waitms_temp,win_top ; Set Row
1351
1352 lfsr FSR2,letter
1353 movlw 'S'
1354 movwf POSTINC2
1355 movlw 'P'
1356 movwf POSTINC2
1357 movff temp6,lo ; copy gas number
1358 output_8 ; display gas number
1359 movlw ':'
1360 movwf POSTINC2
1361 movlw ' '
1362 movwf POSTINC2
1363 movff wait_temp, EEADR; SP #hi position
1364 call read_eeprom ; get byte (stored in EEDATA)
1365 movff EEDATA,lo ; copy to lo
1366 clrf hi
1367 output_16dp d'3' ; outputs into Postinc2!
1368 call word_processor
1369
1370 movlw d'3' ; list all three SP
1371 cpfseq temp6 ; All gases shown?
1372 bra PLED_pre_dive_screen3_loop ;no
1373
1374 read_int_eeprom d'33' ; Read byte (stored in EEDATA)
1375 movff EEDATA,active_gas ; Read start gas (1-5)
1376 decf active_gas,W ; Gas 0-4
1377 mullw d'4'
1378 movf PRODL,W
1379 addlw d'7' ; = address for He ratio
1380 movwf EEADR
1381 call read_eeprom ; Read He ratio
1382 movff EEDATA,hi ; And copy into hold register
1383 decf active_gas,W ; Gas 0-4
1384 mullw d'4'
1385 movf PRODL,W
1386 addlw d'6' ; = address for O2 ratio
1387 movwf EEADR
1388 call read_eeprom ; Read O2 ratio
1389 movff EEDATA, lo ; O2 ratio
1390
1391 WIN_LEFT .90
1392 WIN_TOP .100
1393 lfsr FSR2,letter
1394 movlw 'D'
1395 movwf POSTINC2
1396 movlw 'i'
1397 movwf POSTINC2
1398 movlw 'l'
1399 movwf POSTINC2
1400 movlw ':'
1401 movwf POSTINC2
1402 output_8 ; O2 Ratio
1403 movlw '/'
1404 movwf POSTINC2
1405 movff hi,lo
1406 output_8 ; He Ratio
1407 call word_processor
1408
1409 bcf leftbind
1410 return ; Return (CC Mode)
1411
1412 PLED_active_gas_surfmode: ; Displays start gas/SP 1
1413 ostc_debug 'q' ; Sends debug-information to screen if debugmode active
1414
1415 btfsc FLAG_apnoe_mode ; In Apnoe mode?
1416 return ; Yes, return
1417
1418 btfsc gauge_mode ; In Gauge mode?
1419 return ; Yes, return
1420
1421 btfss FLAG_const_ppO2_mode ; are we in const. ppO2 mode?
1422 bra PLED_active_gas_surfmode2 ; No, display gases
1423
1424 ; In CC Mode
1425 WIN_TOP .135
1426 WIN_LEFT .90
1427 WIN_FONT FT_SMALL
1428 WIN_INVERT .0 ; Init new Wordprocessor
1429 call PLED_standard_color
1430
1431 lfsr FSR2,letter
1432 read_int_eeprom d'36'
1433 movff EEDATA,lo ; copy to lo
1434 clrf hi
1435 output_16dp d'3' ; outputs into Postinc2!
1436 movlw 'B'
1437 movwf POSTINC2
1438 movlw 'a'
1439 movwf POSTINC2
1440 movlw 'r'
1441 movwf POSTINC2
1442 bcf leftbind
1443 call word_processor
1444 bra PLED_active_gas_surfmode_exit
1445
1446 PLED_active_gas_surfmode2:
1447 WIN_TOP .130
1448 WIN_LEFT .100
1449 WIN_FONT FT_MEDIUM
1450 WIN_INVERT .0 ; Init new Wordprocessor
1451 call PLED_standard_color
1452
1453
1454 read_int_eeprom d'33' ; Read byte (stored in EEDATA)
1455 movff EEDATA,active_gas ; Read start gas (1-5)
1456
1457 decf active_gas,W ; Gas 0-4
1458 mullw d'4'
1459 movf PRODL,W
1460 addlw d'7' ; = address for He ratio
1461 movwf EEADR
1462 call read_eeprom ; Read He ratio
1463 movff EEDATA,char_I_He_ratio ; And copy into hold register
1464
1465 decf active_gas,W ; Gas 0-4
1466 mullw d'4'
1467 movf PRODL,W
1468 addlw d'6' ; = address for O2 ratio
1469 movwf EEADR
1470 call read_eeprom ; Read O2 ratio
1471 movff EEDATA, char_I_O2_ratio ; O2 ratio
1472 movff char_I_He_ratio, wait_temp ; copy into bank1 register
1473 bsf STATUS,C ; Borrow bit
1474 movlw d'100' ; 100%
1475 subfwb wait_temp,W ; minus He
1476 bsf STATUS,C ; Borrow bit
1477 subfwb EEDATA,F ; minus O2
1478 movff EEDATA, char_I_N2_ratio ; = N2!
1479
1480 movlw d'100' ; 100% in the tank
1481 movff char_I_N2_ratio,lo ; minus N2
1482 bsf STATUS,C ; set borrow bit
1483 subfwb lo,W
1484 movff char_I_He_ratio,lo ; minus He
1485 bsf STATUS,C ; set borrow bit
1486 subfwb lo,F ; =% O2
1487
1488 movff char_I_He_ratio,hi ; Copy into Bank1 register
1489
1490 movlw d'21'
1491 cpfseq lo ; Air? (O2=21%)
1492 bra PLED_active_gas_surfmode4 ; No!
1493 tstfsz hi ; Air? (He=0%)
1494 bra PLED_active_gas_surfmode4 ; No!
1495
1496 ; Yes, display "Air" instead of 21/0
1497 DISPLAYTEXTH d'265' ;"Air ", y-scale=2
1498 bra PLED_active_gas_surfmode_exit
1499
1500 PLED_active_gas_surfmode4:
1501 lfsr FSR2,letter
1502 bsf leftbind ; left orientated output
1503 output_99 ; O2 ratio is still in "lo"
1504 movlw '/'
1505 movwf POSTINC2
1506 movff char_I_He_ratio,lo ; copy He ratio into lo
1507 output_99
1508 bcf leftbind
1509 call word_processor
1510 bra PLED_active_gas_surfmode_exit
1511
1512 PLED_active_gas_surfmode_exit:
1513 movlw .0
1514 movff WREG,box_temp+0 ; Data
1515 movlw .122
1516 movff WREG,box_temp+1 ; row top (0-239)
1517 movlw .175
1518 movff WREG,box_temp+2 ; row bottom (0-239)
1519 movlw .82
1520 movff WREG,box_temp+3 ; column left (0-159)
1521 movlw .159
1522 movff WREG,box_temp+4 ; column right (0-159)
1523 call PLED_frame
1524 return
1525
1526 PLED_confirmbox:
1527 movlw .0
1528 movff WREG,box_temp+0 ; Data
1529 movlw .68
1530 movff WREG,box_temp+1 ; row top (0-239)
1531 movlw .146
1532 movff WREG,box_temp+2 ; row bottom (0-239)
1533 movlw .34
1534 movff WREG,box_temp+3 ; column left (0-159)
1535 movlw .101
1536 movff WREG,box_temp+4 ; column right (0-159)
1537 call PLED_box
1538
1539 GETCUSTOM8 d'35' ; Standard output color
1540 movff WREG,box_temp+0 ; Data
1541 movlw .70
1542 movff WREG,box_temp+1 ; row top (0-239)
1543 movlw .144
1544 movff WREG,box_temp+2 ; row bottom (0-239)
1545 movlw .35
1546 movff WREG,box_temp+3 ; column left (0-159)
1547 movlw .100
1548 movff WREG,box_temp+4 ; column right (0-159)
1549 call PLED_frame
1550 DISPLAYTEXT .143 ; Confirm:
1551 DISPLAYTEXT .145 ; Cancel
1552 DISPLAYTEXT .146 ; OK!
1553
1554 movlw d'1'
1555 movwf menupos
1556
1557 PLED_confirmbox2:
1558 movlw .0
1559 movff WREG,box_temp+0 ; Data
1560 movlw .96
1561 movff WREG,box_temp+1 ; row top (0-239)
1562 movlw .143
1563 movff WREG,box_temp+2 ; row bottom (0-239)
1564 movlw .39
1565 movff WREG,box_temp+3 ; column left (0-159)
1566 movlw .51
1567 movff WREG,box_temp+4 ; column right (0-159)
1568 call PLED_box
1569
1570 movff menupos,temp1
1571 movlw d'96'
1572 dcfsnz temp1,F
1573 movlw d'96'
1574 dcfsnz temp1,F
1575 movlw d'120'
1576 movff WREG,win_top
1577 WIN_LEFT .39
1578 WIN_FONT FT_SMALL
1579 WIN_INVERT .0 ; Init new Wordprocessor
1580 call PLED_standard_color
1581
1582 lfsr FSR2,letter
1583 movlw 0xB7 ; Arrow for menu
1584 movwf POSTINC2
1585 call word_processor
1586
1587 bcf sleepmode ; clear some flags
1588 bcf menubit2
1589 bcf menubit3
1590 bcf switch_right
1591 bcf switch_left
1592 clrf timeout_counter2
1593 WAITMS d'100'
1594
1595 PLED_confirmbox_loop:
1596 call check_switches_logbook
1597
1598 btfsc menubit3 ; SET/MENU?
1599 bra PLED_confirmbox_move_cursor; Move Cursor
1600 btfsc menubit2 ; ENTER?
1601 bra PLED_confirmbox_menu_do ; Do task
1602
1603 btfsc onesecupdate
1604 call timeout_surfmode ; timeout
1605
1606 btfsc onesecupdate
1607 call set_dive_modes ; check, if divemode must be entered
1608 bcf onesecupdate ; one second update
1609
1610 btfsc sleepmode ; Timeout?
1611 bra PLED_confirmbox_cancel ; back with cancel
1612 btfsc divemode
1613 bra PLED_confirmbox_cancel ; back with cancel
1614
1615 bra PLED_confirmbox_loop ; wait for something to do
1616
1617 PLED_confirmbox_cancel:
1618 retlw .0
1619 PLED_confirmbox_ok:
1620 retlw .1
1621
1622 PLED_confirmbox_menu_do:
1623 dcfsnz menupos,F
1624 bra PLED_confirmbox_cancel
1625 dcfsnz menupos,F
1626 bra PLED_confirmbox_ok
1627 bra PLED_confirmbox_cancel
1628
1629 PLED_confirmbox_move_cursor:
1630 incf menupos,F
1631 movlw d'3' ; number of menu options+1
1632 cpfseq menupos ; =limit?
1633 bra PLED_confirmbox_move_cursor2 ; No!
1634 movlw d'1' ; Yes, reset to position 1!
1635 movwf menupos
1636 PLED_confirmbox_move_cursor2:
1637 bra PLED_confirmbox2 ; Return to Profile Menu, also updates cursor
1638
1639
1640 PLED_depth:
1641 ostc_debug 'r' ; Sends debug-information to screen if debugmode active
1642 movff rel_pressure+1,hi
1643 movff rel_pressure+0,lo
1644 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mBar]
1645
1646 movlw .039
1647 cpfslt hi
1648 bra depth_greater_99_84mtr
1649
1650 btfsc depth_greater_100m ; Was depth>100m during last call
1651 call PLED_clear_depth ; Yes, clear depth area
1652 bcf depth_greater_100m ; Do this once only...
1653
1654 lfsr FSR2,letter
1655
1656 movlw HIGH d'1000'
1657 movwf sub_a+1
1658 movlw LOW d'1000'
1659 movwf sub_a+0
1660 movff hi,sub_b+1
1661 movff lo,sub_b+0
1662 incf sub_b+0,F
1663 movlw d'0'
1664 addwfc sub_b+1,F ; Add 1mBar offset
1665 call sub16 ; sub_c = sub_a - sub_b
1666 btfss neg_flag ; Depth lower then 10m?
1667 rcall depth_less_10mtr ; Yes, add extra space
1668
1669 WIN_TOP .24
1670 WIN_LEFT .0
1671 WIN_FONT FT_LARGE
1672 WIN_INVERT .0 ; Init new Wordprocessor
1673 PLED_color_code warn_depth ; Color-code the output
1674
1675 movlw HIGH d'99'
1676 movwf sub_a+1
1677 movlw LOW d'99'
1678 movwf sub_a+0
1679 movff hi,sub_b+1
1680 movff lo,sub_b+0
1681 call sub16 ; sub_c = sub_a - sub_b
1682 btfss neg_flag ; Depth lower then 1m?
1683 bra pled_depth2 ; Yes, display manual Zero
1684
1685 bsf leftbind
1686 bsf ignore_digit4
1687 output_16 ; Full meters in Big font
1688 bcf leftbind
1689 bra pled_depth3
1690
1691 pled_depth2:
1692 movlw '0'
1693 movwf POSTINC2
1694 pled_depth3:
1695 call word_processor
1696 bcf ignore_digit4
1697
1698 WIN_FONT FT_MEDIUM
1699 WIN_TOP .50
1700 WIN_LEFT .40
1701 PLED_color_code warn_depth ; Color-code the output
1702
1703 movff rel_pressure+1,hi
1704 movff rel_pressure+0,lo
1705 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mBar]
1706 lfsr FSR2,letter
1707 movlw '.'
1708 movwf POSTINC2
1709
1710 movlw HIGH d'9'
1711 movwf sub_a+1
1712 movlw LOW d'9'
1713 movwf sub_a+0
1714 movff hi,sub_b+1
1715 movff lo,sub_b+0
1716 call sub16 ; sub_c = sub_a - sub_b
1717 btfss neg_flag ; Depth lower then 0.1m?
1718 bra pled_depth4 ; Yes, display manual Zero
1719
1720 movlw d'4'
1721 movwf ignore_digits
1722 bsf ignore_digit5
1723 output_16dp d'0'
1724 bra pled_depth5
1725
1726 pled_depth4:
1727 movlw '0'
1728 movwf POSTINC2
1729
1730 pled_depth5:
1731 call word_processor ; decimeters in medium font
1732 bcf ignore_digit5
1733 WIN_FONT FT_SMALL
1734 return
1735
1736 depth_greater_99_84mtr: ; Display only in full meters
1737 btfss depth_greater_100m ; Is depth>100m already?
1738 call PLED_clear_depth ; No, clear depth area and set flag
1739 ; Depth is already in hi:lo
1740 ; Show depth in Full meters
1741 ; That means ignore figure 4 and 5
1742 lfsr FSR2,letter
1743 WIN_TOP .24
1744 WIN_LEFT .0
1745 WIN_FONT FT_LARGE
1746 WIN_INVERT .0 ; Init new Wordprocessor
1747 PLED_color_code warn_depth ; Color-code the output
1748
1749 bsf ignore_digit4
1750 bsf leftbind
1751 output_16
1752 bcf leftbind
1753 call word_processor
1754 bcf ignore_digit4
1755 WIN_FONT FT_SMALL
1756 return
1757
1758 depth_less_10mtr:
1759 movlw ' '
1760 movwf POSTINC2
1761 return
1762
1763 PLED_clear_depth ; No, clear depth area and set flag
1764 movlw .0
1765 movff WREG,box_temp+0 ; Data
1766 movlw .24
1767 movff WREG,box_temp+1 ; row top (0-239)
1768 movlw .90
1769 movff WREG,box_temp+2 ; row bottom (0-239)
1770 movlw .0
1771 movff WREG,box_temp+3 ; column left (0-159)
1772 movlw .90
1773 movff WREG,box_temp+4 ; column right (0-159)
1774 call PLED_box
1775 bsf depth_greater_100m ; Set Flag
1776 return
1777
1778
1779 PLED_desaturation_time:
1780 ostc_debug 'h'
1781 WIN_TOP .150
1782 WIN_LEFT .1
1783 WIN_FONT FT_SMALL
1784 WIN_INVERT .0 ; Init new Wordprocessor
1785 call PLED_standard_color
1786
1787 lfsr FSR2,letter
1788 OUTPUTTEXT d'14' ; Desat
1789 movlw ' '
1790 movwf POSTINC2
1791 movff int_O_desaturation_time+0,lo ; divide by 60...
1792 movff int_O_desaturation_time+1,hi
1793 call convert_time ; converts hi:lo in minutes to hours (hi) and minutes (lo)
1794 bsf leftbind
1795 movf lo,W
1796 movff hi,lo
1797 movwf hi ; exchange lo and hi...
1798 output_8 ; Hours
1799 movlw ':'
1800 movwf POSTINC2
1801 movff hi,lo ; Minutes
1802 output_99x
1803 bcf leftbind
1804 call word_processor
1805 return
1806
1807 PLED_nofly_time:
1808 ostc_debug 'g'
1809 WIN_TOP .125
1810 WIN_LEFT .1
1811 WIN_FONT FT_SMALL
1812 WIN_INVERT .0 ; Init new Wordprocessor
1813 call PLED_standard_color
1814
1815 lfsr FSR2,letter
1816 OUTPUTTEXT d'35' ; NoFly
1817 movlw ' '
1818 movwf POSTINC2
1819 movff nofly_time+0,lo ; divide by 60...
1820 movff nofly_time+1,hi
1821 call convert_time ; converts hi:lo in minutes to hours (hi) and minutes (lo)
1822 bsf leftbind
1823 movf lo,W
1824 movff hi,lo
1825 movwf hi ; exchange lo and hi...
1826 output_8 ; Hours
1827 movlw ':'
1828 movwf POSTINC2
1829 movff hi,lo ; Minutes
1830 decf lo,F
1831 btfsc lo,7 ; keep Nofly time
1832 clrf lo
1833 output_99x
1834 bcf leftbind
1835 call word_processor
1836 return
1837
1838
1839 update_surf_press:
1840 btfsc premenu ; Do not update when "Menu?" is displayed!
1841 return
1842
1843 ostc_debug 'b' ; Sends debug-information to screen if debugmode active
1844 WIN_TOP .25
1845 WIN_LEFT .1
1846 WIN_FONT FT_SMALL
1847 WIN_INVERT .0 ; Init new Wordprocessor
1848 call PLED_standard_color
1849
1850 lfsr FSR2,letter
1851 movff amb_pressure+0,lo
1852 movff amb_pressure+1,hi
1853 bsf leftbind
1854 output_16
1855 bcf leftbind
1856 movlw 'm'
1857 movwf POSTINC2
1858 movlw 'b'
1859 movwf POSTINC2
1860 movlw 'a'
1861 movwf POSTINC2
1862 movlw 'r'
1863 movwf POSTINC2
1864 movlw ' '
1865 movwf POSTINC2
1866 call word_processor
1867 return
1868
1869 update_batt_voltage_divemode:
1870 movlw -.20 ; ~Centered between ppO2 warning and max depth...
1871 movwf hi,BANKED ; Use the hi variable to offset the battery in dive mode...
1872 bra update_battery_voltage1
1873
1874 update_batt_voltage:
1875 clrf hi,BANKED ; No vertical offset...
1876
1877 update_battery_voltage1:
1878 ostc_debug 'f'
1879
1880 GETCUSTOM8 d'31' ; =1 if battery voltage should be visible
1881 movwf lo
1882 movlw d'1'
1883 cpfseq lo ; =1?
1884 bra update_batt_voltage2 ; No, show symbol
1885
1886 WIN_TOP .175
1887 WIN_LEFT .1
1888 WIN_FONT FT_SMALL
1889 WIN_INVERT .0 ; Init new Wordprocessor
1890 call PLED_standard_color
1891
1892 lfsr FSR2,letter
1893 movff batt_voltage+0,lo
1894 movff batt_voltage+1,hi
1895 movlw d'1'
1896 movwf ignore_digits
1897 bsf ignore_digit5 ; do not display mV
1898 bsf leftbind
1899 output_16dp d'2' ; e.g. 3.45V
1900 bcf leftbind
1901 movlw 'V'
1902 movwf POSTINC2
1903 movlw ' '
1904 movwf POSTINC2
1905 call word_processor
1906 return
1907
1908 update_batt_voltage2:
1909
1910 ; 4100-Vbatt
1911 movlw LOW d'4100'
1912 movwf sub_a+0
1913 movlw HIGH d'4100'
1914 movwf sub_a+1
1915 movff batt_voltage+0,sub_b+0
1916 movff batt_voltage+1,sub_b+1
1917 call sub16 ; sub_c = sub_a - sub_b
1918 ; Battery full (>4100mV?
1919 btfsc neg_flag
1920 bra update_batt_voltage2_full
1921
1922 ; Vbatt-3500
1923 movlw LOW d'3500'
1924 movwf sub_b+0
1925 movlw HIGH d'3500'
1926 movwf sub_b+1
1927 movff batt_voltage+0,sub_a+0
1928 movff batt_voltage+1,sub_a+1
1929 call sub16 ; sub_c = sub_a - sub_b
1930 ; Battery lower then 3500mV?
1931 btfsc neg_flag
1932 bra update_batt_voltage2_empty
1933
1934 ; Battery is between 3500 and 4100mV
1935 ; sub_c:2 is between 0 and 600
1936 movff sub_c+0,xA+0
1937 movff sub_c+1,xA+1
1938 movlw d'20'
1939 movwf xB+0
1940 clrf xB+1
1941 call div16x16 ;xA/xB=xC with xA as remainder
1942 ; xC is between 0 and 30
1943 movff xC+0,wait_temp ;save value
1944 incf wait_temp,F ; +1
1945
1946 movlw d'3'
1947 cpfsgt wait_temp
1948 movwf wait_temp ; Minimum = 3
1949
1950 ; Check if battery level is low...
1951 movlw d'7' ; Blink threshold at 6/30 == 20% ???
1952 cpfslt wait_temp
1953 bra update_batt_clear ; black if WREG > 6
1954
1955 update_batt_blink:
1956 ; Get BLINKING warning color, or black every other seconde:
1957 GETCUSTOM8 d'37' ; WARNING color
1958 btfss secs,0,BANKED
1959 update_batt_clear:
1960 clrf WREG
1961
1962 movwf box_temp+0,BANKED ; Data
1963 movlw .172
1964 addwf hi,W,BANKED
1965 movwf box_temp+1,BANKED ; row top (0-239)
1966 movlw .196
1967 addwf hi,W,BANKED
1968 movwf box_temp+2,BANKED ; row bottom (0-239)
1969 movlw .0
1970 movwf box_temp+3,BANKED ; column left (0-159)
1971 movlw .33
1972 movwf box_temp+4,BANKED ; column right (0-159)
1973 call PLED_box
1974
1975 movlw .179
1976 addwf hi,W,BANKED
1977 movwf box_temp+1,BANKED ; row top (0-239)
1978 movlw .189
1979 addwf hi,W,BANKED
1980 movwf box_temp+2,BANKED ; row bottom (0-239)
1981 movlw .33
1982 movwf box_temp+3,BANKED ; column left (0-159)
1983 movlw .35
1984 movwf box_temp+4,BANKED ; column right (0-159)
1985 call PLED_box ; Full Cap
1986
1987 GETCUSTOM8 d'34' ; Color battery
1988 movwf box_temp+0,BANKED ; Color Data
1989 movlw .176
1990 addwf hi,W,BANKED
1991 movwf box_temp+1,BANKED ; row top (0-239)
1992 movlw .192
1993 addwf hi,W,BANKED
1994 movwf box_temp+2,BANKED ; row bottom (0-239)
1995 movlw .2
1996 movwf box_temp+3,BANKED ; column left (0-159)
1997 movff wait_temp,box_temp+4; column right (0-159)
1998 call PLED_box
1999
2000 update_batt_voltage2a:
2001 GETCUSTOM8 d'35' ; Standard output color
2002 movwf box_temp+0,BANKED ; Data
2003 movlw .174
2004 addwf hi,W,BANKED
2005 movwf box_temp+1,BANKED ; row top (0-239)
2006 movlw .194
2007 addwf hi,W,BANKED
2008 movwf box_temp+2,BANKED ; row bottom (0-239)
2009 movlw .1
2010 movwf box_temp+3,BANKED ; column left (0-159)
2011 movlw .32
2012 movwf box_temp+4,BANKED ; column right (0-159)
2013 call PLED_frame
2014
2015 movlw .181
2016 addwf hi,W,BANKED
2017 movwf box_temp+1,BANKED ; row top (0-239)
2018 movlw .187
2019 addwf hi,W,BANKED
2020 movwf box_temp+2,BANKED ; row bottom (0-239)
2021 movlw .32
2022 movwf box_temp+3,BANKED ; column left (0-159)
2023 movlw .34
2024 movwf box_temp+4,BANKED ; column right (0-159)
2025 call PLED_box ; Full Cap
2026
2027 ; movlw .181
2028 ; movff WREG,box_temp+1 ; row top (0-239)
2029 ; movlw .187
2030 ; movff WREG,box_temp+2 ; row bottom (0-239)
2031 ; movlw .31
2032 ; movff WREG,box_temp+3 ; column left (0-159)
2033 ; movlw .33
2034 ; movff WREG,box_temp+4 ; column right (0-159)
2035 ; call PLED_frame ; Empty cap
2036 ;
2037 update_batt_voltage3:
2038
2039 call PLED_standard_color
2040 return
2041
2042 update_batt_voltage2_empty:
2043 movlw d'1'
2044 movwf wait_temp
2045 bra update_batt_blink
2046
2047 update_batt_voltage2_full:
2048 movlw d'30'
2049 movwf wait_temp
2050 bra update_batt_clear
2051
2052 PLED_convert_date: ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
2053 read_int_eeprom d'91' ; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
2054 tstfsz EEDATA
2055 bra PLED_convert_date1
2056
2057 ; Use MMDDYY
2058 movff convert_value_temp+0,lo ;month
2059 bsf leftbind
2060 output_99x
2061 bcf leftbind
2062 movlw '/'
2063 movwf POSTINC2
2064 movff convert_value_temp+1,lo ;day
2065 bra PLED_convert_date1_common ;year
2066
2067 PLED_convert_date1:
2068 read_int_eeprom d'91' ; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
2069 decfsz EEDATA,F
2070 bra PLED_convert_date2
2071
2072 ; Use DDMMYY
2073 movff convert_value_temp+1,lo ;day
2074 bsf leftbind
2075 output_99x
2076 bcf leftbind
2077 movlw '/'
2078 movwf POSTINC2
2079 movff convert_value_temp+0,lo ;month
2080
2081 PLED_convert_date1_common:
2082 bsf leftbind
2083 output_99x
2084 bcf leftbind
2085 movlw '/'
2086 movwf POSTINC2
2087 movff convert_value_temp+2,lo ;year
2088 bsf leftbind
2089 output_99x
2090 return
2091
2092 PLED_convert_date2:
2093 ; Use YYMMDD
2094 movff convert_value_temp+2,lo ;year
2095 bsf leftbind
2096 output_99x
2097 bcf leftbind
2098 movlw '/'
2099 movwf POSTINC2
2100 movff convert_value_temp+0,lo ;month
2101 bsf leftbind
2102 output_99x
2103 bcf leftbind
2104 movlw '/'
2105 movwf POSTINC2
2106 movff convert_value_temp+1,lo ;day
2107 bsf leftbind
2108 output_99x
2109 return
2110
2111 PLED_convert_date_short: ; converts into "DD/MM" or "MM/DD" or "MM/DD" in postinc2
2112 read_int_eeprom d'91' ; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
2113 tstfsz EEDATA
2114 bra PLED_convert_date_short1
2115
2116 ; Use MMDDYY
2117 PLED_convert_date_short_common:
2118 movff convert_value_temp+0,lo ;month
2119 bsf leftbind
2120 output_99x
2121 bcf leftbind
2122 movlw '/'
2123 movwf POSTINC2
2124 movff convert_value_temp+1,lo ;day
2125 bsf leftbind
2126 output_99x
2127 bcf leftbind
2128 return
2129
2130 PLED_convert_date_short1:
2131 read_int_eeprom d'91' ; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
2132 decfsz EEDATA,F
2133 bra PLED_convert_date_short_common ; Use YYMMDD
2134
2135 ; Use DDMMYY
2136 movff convert_value_temp+1,lo ;day
2137 bsf leftbind
2138 output_99x
2139 bcf leftbind
2140 movlw '/'
2141 movwf POSTINC2
2142 movff convert_value_temp+0,lo ;month
2143 bsf leftbind
2144 output_99x
2145 bcf leftbind
2146 return
2147
2148 update_date:
2149 ostc_debug 'd'
2150 WIN_TOP .75
2151 WIN_LEFT .1
2152 WIN_FONT FT_SMALL
2153 WIN_INVERT .0 ; Init new Wordprocessor
2154 call PLED_standard_color
2155
2156 lfsr FSR2,letter
2157
2158 movff month,convert_value_temp+0
2159 movff day,convert_value_temp+1
2160 movff year,convert_value_temp+2
2161 call PLED_convert_date ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
2162 call word_processor
2163 return
2164
2165 PLED_menu_clear:
2166 movlw .0
2167 movff WREG,box_temp+0 ; Data
2168 movlw .0
2169 movff WREG,box_temp+1 ; row top (0-239)
2170 movlw .26
2171 movff WREG,box_temp+2 ; row bottom (0-239)
2172 movlw .65
2173 movff WREG,box_temp+3 ; column left (0-159)
2174 movlw .100
2175 movff WREG,box_temp+4 ; column right (0-159)
2176 call PLED_box
2177 return
2178
2179 PLED_max_pressure:
2180 btfsc multi_gf_display ; Is the Multi-GF Table displayed?
2181 return ; Yes, No update and return!
2182
2183 ostc_debug 'p' ; Sends debug-information to screen if debugmode active
2184
2185 WIN_TOP .184
2186 WIN_LEFT .0
2187 WIN_FONT FT_MEDIUM
2188 WIN_INVERT .0 ; Init new Wordprocessor
2189 call PLED_standard_color
2190
2191 lfsr FSR2,letter
2192 movff max_pressure+0,lo
2193 movff max_pressure+1,hi
2194 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mBar]
2195 bsf leftbind
2196 bsf ignore_digit5 ; do not display 1cm depth
2197 output_16dp d'3'
2198 bcf leftbind
2199 bcf show_last3
2200 call word_processor
2201 WIN_FONT FT_SMALL
2202 return
2203
2204 PLED_divemins:
2205 btfsc menubit ; Divemode menu active?
2206 return ; Yes, do not update divetime
2207
2208 ostc_debug 'A' ; Sends debug-information to screen if debugmode active
2209
2210 btfsc gauge_mode ; different display in gauge mode
2211 bra PLED_divemins_gauge
2212
2213 btfsc FLAG_apnoe_mode ; different display in apnoe mode
2214 bra PLED_divemins_apnoe
2215
2216 GETCUSTOM8 d'38' ; Show seconds (=1?)
2217 movwf lo
2218 movlw d'1'
2219 cpfseq lo ; =1?
2220 bra PLED_divemins2 ; No, minutes only
2221 bra PLED_divemins_gauge ; Yes, use Gauge routine
2222
2223 PLED_divemins2:
2224 movff divemins+0,lo
2225 movff divemins+1,hi
2226 bcf leftbind
2227 lfsr FSR2,letter
2228 output_16_3 ; displays only last three figures from a 16Bit value (0-999)
2229 WIN_TOP .20
2230 WIN_LEFT .120
2231 WIN_FONT FT_MEDIUM
2232 call PLED_standard_color
2233
2234 call word_processor
2235 WIN_FONT FT_SMALL
2236 return
2237
2238 PLED_display_apnoe_surface:
2239 btfsc menubit ; Divemode menu active?
2240 return ; Yes, do not display surface mode timeout
2241
2242 call PLED_divemask_color ; Set Color for Divemode mask
2243 DISPLAYTEXT d'140' ; "SURFACE"
2244 call PLED_standard_color
2245
2246
2247 WIN_TOP .85
2248 WIN_LEFT .90
2249 WIN_FONT FT_MEDIUM
2250 call PLED_standard_color
2251
2252
2253 movff apnoe_surface_mins,lo
2254 bcf leftbind
2255 lfsr FSR2,letter
2256 output_8
2257 movlw ':'
2258 movwf POSTINC2
2259 movff apnoe_surface_secs,lo
2260 output_99x
2261 call word_processor
2262 WIN_FONT FT_SMALL
2263 return
2264
2265 PLED_apnoe_clear_surface:
2266 ; Clear Surface timer....
2267 movlw .0
2268 movff WREG,box_temp+0 ; Data
2269 movlw .60
2270 movff WREG,box_temp+1 ; row top (0-239)
2271 movlw .119
2272 movff WREG,box_temp+2 ; row bottom (0-239)
2273 movlw .90
2274 movff WREG,box_temp+3 ; column left (0-159)
2275 movlw .159
2276 movff WREG,box_temp+4 ; column right (0-159)
2277 call PLED_box
2278 return
2279
2280
2281 PLED_display_apnoe_descent:
2282 call PLED_divemask_color ; Set Color for Divemode mask
2283 DISPLAYTEXT d'139' ; "Descent"
2284 call PLED_standard_color
2285
2286
2287 WIN_TOP .145
2288 WIN_LEFT .90
2289 WIN_FONT FT_MEDIUM
2290 call PLED_standard_color
2291
2292
2293 movff apnoe_mins,lo
2294 lfsr FSR2,letter
2295 output_8
2296 movlw ':'
2297 movwf POSTINC2
2298 movff apnoe_secs,lo
2299 output_99x
2300 call word_processor
2301 WIN_FONT FT_SMALL
2302 return
2303
2304 PLED_divemins_apnoe:
2305
2306 PLED_divemins_gauge:
2307 movff divemins+0,lo
2308 movff divemins+1,hi
2309 bcf leftbind
2310 bsf show_last3
2311 lfsr FSR2,letter
2312 output_16_3 ;Displays only 0...999
2313 movlw ':'
2314 movwf POSTINC2
2315 movff divesecs,lo
2316 output_99x
2317 WIN_TOP .20
2318 WIN_LEFT .90
2319 WIN_FONT FT_MEDIUM
2320 call PLED_standard_color
2321
2322 call word_processor
2323 bcf show_last3
2324 WIN_FONT FT_SMALL
2325 return
2326
2327 PLED_stopwatch_remove:
2328 movlw .0
2329 movff WREG,box_temp+0 ; Data
2330 movlw .54
2331 movff WREG,box_temp+1 ; row top (0-239)
2332 movlw .102
2333 movff WREG,box_temp+2 ; row bottom (0-239)
2334 movlw .062
2335 movff WREG,box_temp+3 ; column left (0-159)
2336 movlw .159
2337 movff WREG,box_temp+4 ; column right (0-159)
2338 call PLED_box
2339 return
2340
2341
2342 PLED_stopwatch_show:
2343 btfsc menubit ; Divemode menu active?
2344 return ; Yes, No update and return!
2345
2346 ostc_debug 'V' ; Sends debug-information to screen if debugmode active
2347 ; Stopwatch
2348
2349 call PLED_divemask_color ; Set Color for Divemode mask
2350 DISPLAYTEXTH d'283' ; Counter
2351 call PLED_standard_color
2352
2353
2354 WIN_TOP .80
2355 WIN_LEFT .110
2356 WIN_FONT FT_SMALL
2357 call PLED_standard_color
2358
2359
2360
2361
2362 lfsr FSR2,letter
2363 movff average_divesecs+0,lo ; Stopwatch
2364 movff average_divesecs+1,hi ; Stopwatch
2365 movlw d'2'
2366 subwf lo,F
2367 movlw d'0'
2368 subwfb hi,F ; Subtract 2 seconds
2369
2370 call convert_time ; converts hi:lo in seconds to mins (hi) and secs (lo)
2371
2372 movff lo,wait_temp
2373 movff hi,lo
2374 clrf hi
2375
2376 movlw d'0'
2377 bcf leftbind
2378 bsf show_last3
2379 output_16_3 ;Displays only 0...999
2380 movlw ':'
2381 movwf POSTINC2
2382 movff wait_temp,lo
2383 output_99x
2384 bcf leftbind
2385 call word_processor
2386
2387 ostc_debug 'U' ; Sends debug-information to screen if debugmode active
2388
2389 WIN_TOP .80
2390 WIN_LEFT .62
2391 WIN_FONT FT_SMALL
2392 call PLED_standard_color
2393
2394
2395 lfsr FSR2,letter
2396 movff avr_rel_pressure+0,lo
2397 movff avr_rel_pressure+1,hi
2398 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mBar]
2399 bsf leftbind
2400 bsf ignore_digit5 ; do not display 1cm depth
2401 output_16dp d'3'
2402 bcf leftbind
2403 movlw 'm'
2404 movwf POSTINC2
2405 movlw ' '
2406 movwf POSTINC2
2407 call word_processor
2408 return
2409
2410
2411 PLED_serial: ; Writes OSTC #Serial and Firmware version in surfacemode
2412 ostc_debug 'a' ; Sends debug-information to screen if debugmode active
2413 WIN_TOP .0
2414 WIN_LEFT .1
2415 WIN_FONT FT_SMALL
2416 WIN_INVERT .0 ; Init new Wordprocessor
2417 call PLED_standard_color
2418
2419
2420 lfsr FSR2,letter
2421 OUTPUTTEXTH d'262' ; "OSTC "
2422 clrf EEADRH
2423 clrf EEADR ; Get Serial number LOW
2424 call read_eeprom ; read byte
2425 movff EEDATA,lo
2426 incf EEADR,F ; Get Serial number HIGH
2427 call read_eeprom ; read byte
2428 movff EEDATA,hi
2429
2430 bsf leftbind
2431 output_16
2432 movlw ' '
2433 movwf POSTINC2
2434 movlw 'V'
2435 movwf POSTINC2
2436 movlw softwareversion_x
2437 movwf lo
2438 bsf leftbind
2439 output_8
2440 movlw '.'
2441 movwf POSTINC2
2442 movlw softwareversion_y
2443 movwf lo
2444 bsf leftbind
2445 output_99x
2446 bcf leftbind
2447 call word_processor
2448 return
2449
2450 PLED_divemode_menu_mask_first: ; Write Divemode menu1 mask
2451 ostc_debug 'o' ; Sends debug-information to screen if debugmode active
2452 call PLED_menu_clear ; clear "Menu?"
2453
2454 btfsc FLAG_const_ppO2_mode ; are we in ppO2 mode?
2455 bra PLED_divemode_menu_mask_first2
2456
2457 ; in OC Mode
2458 DISPLAYTEXT .32 ;"Gaslist"
2459 DISPLAYTEXT .31 ;"Decoplan"
2460 DISPLAYTEXT .122 ;"Set Gas"
2461 bra PLED_divemode_menu_mask_first3
2462
2463 PLED_divemode_menu_mask_first2:
2464 ; in CC Mode
2465 DISPLAYTEXT .238 ;"SetPoint"
2466 DISPLAYTEXT .31 ;"Decoplan"
2467 DISPLAYTEXT .137 ;"Bailout"
2468
2469 PLED_divemode_menu_mask_first3:
2470 ; In all modes
2471 DISPLAYTEXT .33 ;"More"
2472 DISPLAYTEXT .34 ;"Exit"
2473 return
2474
2475 PLED_divemode_menu_mask_second: ; Write Divemode menu1 mask
2476 ostc_debug 'o' ; Sends debug-information to screen if debugmode active
2477 DISPLAYTEXT .240 ;"Graphs"
2478 DISPLAYTEXT .241 ;"Display"
2479 DISPLAYTEXTH .281 ;"L. Tissue"
2480 DISPLAYTEXT .147 ;"Stopwat."
2481 DISPLAYTEXT .244 ;"Exit"
2482 return
2483
2484 PLED_divemode_set_xgas: ; Displayes the "Set Gas" menu
2485 WIN_LEFT .100
2486 WIN_TOP .0
2487 WIN_FONT FT_SMALL
2488 call PLED_standard_color
2489
2490 lfsr FSR2,letter
2491 movlw 'S'
2492 movwf POSTINC2
2493 movlw 'e'
2494 movwf POSTINC2
2495 movlw 'l'
2496 movwf POSTINC2
2497 read_int_eeprom d'24' ; Get Gas6 %O2
2498 movff EEDATA,lo
2499 bcf leftbind
2500 output_99 ; outputs into Postinc2!
2501 movlw '/'
2502 movwf POSTINC2
2503 read_int_eeprom d'25' ; Get Gas6 %He
2504 movff EEDATA,lo
2505 output_99 ; outputs into Postinc2!
2506 call word_processor
2507 DISPLAYTEXT .123 ; O2 +
2508 DISPLAYTEXT .124 ; O2 -
2509 DISPLAYTEXT .125 ; He +
2510 DISPLAYTEXT .126 ; He -
2511 return
2512
2513 PLED_divemode_simulator_mask:
2514 DISPLAYTEXT .254 ; EXIT
2515 DISPLAYTEXT .250 ; + 1m
2516 DISPLAYTEXT .251 ; - 1m
2517 DISPLAYTEXT .252 ; +10m
2518 DISPLAYTEXT .253 ; -10m
2519 return
2520
2521 PLED_decoplan_bargraph:
2522 GETCUSTOM8 d'35' ; Standard output color
2523 movff WREG,box_temp+0 ; Data
2524 movff hi,win_top
2525 incf win_top,F ; +1
2526 movff win_top,box_temp+1 ; row top (0-239)
2527 movff win_top,box_temp+2 ;
2528 movlw d'18'
2529 addwf box_temp+2,F ; row bottom (0-239)
2530 movlw .122
2531 movff WREG,box_temp+3 ; column left (0-159)
2532 addwf lo,F ; Add time offset
2533 btfsc STATUS,C ; >255?
2534 setf lo ; limit to 255
2535 decf lo,F ; No, minus one
2536 movlw d'138' ; Limit length (16min)
2537 cpfslt lo
2538 movwf lo
2539 movff lo,box_temp+4 ; column right (0-159)
2540 call PLED_box
2541
2542 movlw .0
2543 movff WREG,box_temp+0 ; Data
2544 movff win_top,box_temp+1 ; row top (0-239)
2545 movff win_top,box_temp+2 ;
2546 movlw d'18'
2547 addwf box_temp+2,F ; row bottom (0-239)
2548 movff lo,box_temp+3 ;
2549 incf box_temp+3,F ; column left (0-159)
2550 movlw .139
2551 movff WREG,box_temp+4 ; column right (0-159)
2552 call PLED_box
2553 return
2554
2555 PLED_decoplan_delete_gf: ; Delete unused rows
2556 movlw .238
2557 movff WREG,box_temp+2 ; row bottom (0-239)
2558 bra PLED_decoplan_delete_common
2559
2560 PLED_decoplan_delete: ; Delete unused rows
2561 movlw .184
2562 movff WREG,box_temp+2 ; row bottom (0-239)
2563 PLED_decoplan_delete_common:
2564 movlw .0
2565 movff WREG,box_temp+0 ; data 00, x0, 0y, xy clear, links, rechts, beide
2566 movff hi,box_temp+1 ; row top (0-239)
2567 movlw .100
2568 movff WREG,box_temp+3 ; column left (0-159)
2569 movlw .159
2570 movff WREG,box_temp+4 ; column right (0-159)
2571 call PLED_box
2572 bsf last_ceiling_gf_shown ; Set flag
2573 return
2574
2575
2576 PLED_decoplan_gf_page_current:
2577 movlw d'0'
2578 cpfseq temp8
2579 bra PLED_decoplan_gf_page2 ; =1: Dispplay Page 2
2580 bra PLED_decoplan_gf_page1 ; =0, Display Page 1
2581
2582 PLED_decoplan_gf_page1:
2583 ostc_debug 'n' ; Sends debug-information to screen if debugmode active
2584
2585 movff char_O_array_decodepth+0,lo ; Get Depth
2586 tstfsz lo
2587 bra PLED_decoplan_gf_page1x
2588 ; No Deco, show "no Deco"
2589 DISPLAYTEXT d'239' ;"No Deco"
2590 return
2591
2592 PLED_decoplan_gf_page2:
2593 ; temp7 holds last displayed depth
2594 ; temp5 list entry
2595 movff temp5,temp9 ; save
2596 movff temp7,temp10 ; save
2597 movlw .231
2598 movwf temp6 ; row
2599 PLED_decoplan_gf_page2y:
2600 movlw d'3'
2601 addwf temp7,F ; Add 3m for next stop
2602 movlw d'25'
2603 addwf temp6,F
2604 incf temp5,F
2605 call PLED_decoplan_show_stop_gf
2606 movlw d'15' ; the next 8 Stops...
2607 cpfseq temp5
2608 bra PLED_decoplan_gf_page2y
2609 movff temp9,temp5 ; restore
2610 movff temp10,temp7 ; restore
2611 bsf last_ceiling_gf_shown ; Set flag
2612 return
2613
2614 PLED_decoplan_gf_page1x:
2615 clrf temp8 ; Page 0-3 of deco list
2616 GETCUSTOM8 d'29' ; Last Deco in m
2617 movwf temp7 ; Start with last stop
2618 setf temp5
2619 movlw .231
2620 movwf temp6 ; row
2621
2622 ; Show last stop manually
2623 movlw d'25'
2624 addwf temp6,F
2625 incf temp5,F
2626 call PLED_decoplan_show_stop_gf
2627 GETCUSTOM8 d'29' ; Last Deco in m
2628 movwf temp7 ; Last deco
2629 movlw d'4'
2630 cpfslt temp7 ; >=3m?
2631 bra PLED_decoplan_gf_page1x_next_6m
2632
2633 movlw d'3'
2634 movwf temp7
2635 bra PLED_decoplan_gf_page1y
2636
2637 PLED_decoplan_gf_page1x_next_6m:
2638 movlw d'6'
2639 movwf temp7
2640 incf temp5,F
2641 PLED_decoplan_gf_page1y:
2642 movlw d'3'
2643 addwf temp7,F ; Add 3m for next stop
2644 movlw d'25'
2645 addwf temp6,F
2646 incf temp5,F
2647 call PLED_decoplan_show_stop_gf
2648 movlw d'7' ; the next 7 Stops...
2649 cpfseq temp5
2650 bra PLED_decoplan_gf_page1y
2651 return
2652
2653
2654 PLED_decoplan_show_stop_gf:
2655 bsf leftbind
2656 WIN_LEFT .100
2657 movff temp6,win_top
2658 movff temp6,hi ; copy for PLED_decoplan_bargraph
2659
2660 movff char_O_array_decodepth+0,WREG ; Ceiling
2661 cpfslt temp7 ; Ceiling already displayed?
2662 goto PLED_decoplan_delete_gf ; Yes, quit display and RETURN
2663 movff temp7,lo ; Decodepth
2664
2665 lfsr FSR2,letter
2666 output_99x ; outputs into Postinc2!
2667 movlw 'm'
2668 movwf POSTINC2
2669 call word_processor
2670 WIN_LEFT .140
2671 movff temp6,win_top
2672 ; lfsr FSR1,0x251
2673 lfsr FSR1,0x0E1 ; Gf_decolist_copy
2674 movf temp5,W ; number of entry
2675 movff PLUSW1,lo ; Stop length
2676 incf lo,F ; add one dummy minute
2677 lfsr FSR2,letter
2678 output_99x ; outputs into Postinc2!
2679 movlw d'39' ;"'"
2680 movwf POSTINC2
2681 call word_processor
2682 tstfsz lo ; 0 min "Stop"?
2683 rcall PLED_decoplan_bargraph ; draws a box representing the decotime (stored in lo...) for this depth
2684 return
2685
2686
2687 PLED_decoplan: ; display the Decoplan
2688 ostc_debug 'n' ; Sends debug-information to screen if debugmode active
2689
2690 movff char_O_array_decodepth+0,lo ; Get Depth
2691 tstfsz lo
2692 bra PLED_decoplan1
2693 ; No Deco, show "no Deco"
2694 ; call PLED_clear_divemode_menu ; Clear Deco area
2695 DISPLAYTEXT d'239' ;"No Deco"
2696 return
2697
2698 PLED_decoplan1:
2699 setf temp5
2700 movlw .231
2701 movwf temp6 ; row
2702 PLED_decoplan2:
2703 movlw d'25'
2704 addwf temp6,F
2705 incf temp5,F
2706 call PLED_decoplan_show_stop
2707 movlw d'5' ; 6 Stops...
2708 cpfseq temp5
2709 bra PLED_decoplan2
2710 return
2711
2712 PLED_decoplan_show_stop:
2713 bsf leftbind
2714 WIN_LEFT .100
2715 movff temp6,win_top
2716 movff temp6,hi ; copy for PLED_decoplan_bargraph
2717
2718 lfsr FSR1,char_O_array_decodepth;+0
2719 movf temp5,W ; number of entry
2720 movff PLUSW1,lo
2721 movf lo,w
2722 btfsc STATUS,Z ; =0
2723 goto PLED_decoplan_delete ; Yes, quit display
2724
2725 lfsr FSR2,letter
2726 output_8 ; outputs into Postinc2!
2727 movlw 'm'
2728 movwf POSTINC2
2729 call word_processor
2730
2731 WIN_LEFT .140
2732 movff temp6,win_top
2733
2734 lfsr FSR1,char_O_array_decotime;+0
2735 movf temp5,W ; number of entry
2736 movff PLUSW1,lo
2737
2738 lfsr FSR2,letter
2739 output_99x ; outputs into Postinc2!
2740 movlw d'39' ;"'"
2741 movwf POSTINC2
2742 call word_processor
2743 tstfsz lo ; 0 min "Stop"?
2744 rcall PLED_decoplan_bargraph ; draws a box representing the decotime (stored in lo...) for this depth
2745 return
2746
2747
2748 PLED_gas_list:
2749 ostc_debug 'm' ; Sends debug-information to screen if debugmode active
2750
2751 WIN_LEFT .100
2752 WIN_FONT FT_SMALL
2753 bsf leftbind
2754
2755 movlw d'2'
2756 movwf wait_temp ; here: stores eeprom address for gas list
2757 movlw d'231'
2758 movwf waitms_temp ; here: stores row for gas list
2759 clrf hi ; here: Gas counter
2760
2761 PLED_gas_list_loop:
2762 incf hi,F ; Increase Gas
2763 movlw d'4'
2764 addwf wait_temp,F ; Increase eeprom address for gas list
2765 movlw d'25'
2766 addwf waitms_temp,F ; Increase row
2767 WIN_LEFT .100
2768 movff waitms_temp,win_top ; Set Row
2769
2770 lfsr FSR2,letter
2771 movlw 'G'
2772 movwf POSTINC2
2773 movff hi,lo ; copy gas number
2774 output_8 ; display gas number
2775 movlw ':'
2776 movwf POSTINC2
2777 movff wait_temp, EEADR; Gas #hi: %O2 - Set address in internal EEPROM
2778 call read_eeprom ; get byte (stored in EEDATA)
2779 movff EEDATA,lo ; copy to lo
2780 output_8 ; outputs into Postinc2!
2781 movlw '/'
2782 movwf POSTINC2
2783 incf EEADR,F ; Gas #hi: %He - Set address in internal EEPROM
2784 call read_eeprom ; get byte (stored in EEDATA)
2785 movff EEDATA,lo ; copy to lo
2786 output_8 ; outputs into Postinc2!
2787
2788 decf EEADR,F ; Gas #hi: %O2 - Set address in internal EEPROM
2789 call read_eeprom ; get byte (stored in EEDATA)
2790 PLED_color_code warn_gas_in_gaslist ; Color-code output (%O2 in "EEDATA")
2791 ; Check if gas needs to be greyed-out (inactive)
2792 read_int_eeprom d'27' ; read flag register
2793 movff hi,lo ; copy gas number
2794 PLED_gas_list_loop1:
2795 rrcf EEDATA ; roll flags into carry
2796 decfsz lo,F ; max. 5 times...
2797 bra PLED_gas_list_loop1
2798
2799 movlw color_grey
2800 btfss STATUS,C ; test carry
2801 call PLED_set_color ; grey out inactive gases!
2802
2803 call word_processor
2804 call PLED_standard_color
2805
2806 movlw d'5' ; list all five gases
2807 cpfseq hi ; All gases shown?
2808 bra PLED_gas_list_loop ; No
2809
2810 return ; No, return (OC mode)
2811
2812 PLED_splist_start:
2813 WIN_LEFT .100
2814 WIN_FONT FT_SMALL
2815 bsf leftbind
2816
2817 ; list three SP in Gaslist
2818 movlw d'35' ; 36 = current SP position in EEPROM
2819 movwf wait_temp ; here: stores eeprom address for gas list
2820 movlw d'231'
2821 movwf waitms_temp ; here: stores row for gas list
2822 clrf temp5 ; here: SP counter
2823
2824 PLED_splist_loop:
2825 incf wait_temp,F ; EEPROM address
2826 incf temp5,F ; Increase SP
2827
2828 movlw d'25'
2829 addwf waitms_temp,F ; Increase row
2830 movff waitms_temp,win_top ; Set Row
2831 WIN_LEFT .100
2832
2833 lfsr FSR2,letter
2834 movlw 'S'
2835 movwf POSTINC2
2836 movlw 'P'
2837 movwf POSTINC2
2838 movff temp5,lo ; copy gas number
2839 output_8 ; display gas number
2840 movlw ':'
2841 movwf POSTINC2
2842 movff wait_temp, EEADR; SP #hi position
2843 call read_eeprom ; get byte (stored in EEDATA)
2844 movff EEDATA,lo ; copy to lo
2845 clrf hi
2846 output_16dp d'3' ; outputs into Postinc2!
2847 call word_processor
2848
2849 movlw d'3' ; list all three SP
2850 cpfseq temp5 ; All gases shown?
2851 bra PLED_splist_loop ; No
2852
2853 bcf leftbind
2854 return ; no, return
2855
2856 PLED_clear_divemode_menu:
2857 movlw .0
2858 movff WREG,box_temp+0 ; Data
2859 movlw .0
2860 movff WREG,box_temp+1 ; row top (0-239)
2861 ; movlw .125
2862 movlw .185
2863 movff WREG,box_temp+2 ; row bottom (0-239)
2864 movlw .082
2865 movff WREG,box_temp+3 ; column left (0-159)
2866 movlw .159
2867 movff WREG,box_temp+4 ; column right (0-159)
2868 call PLED_box
2869 return
2870
2871 PLED_divemenu_cursor:
2872 ostc_debug 'l' ; Sends debug-information to screen if debugmode active
2873 WIN_TOP .0
2874 WIN_LEFT .85
2875 WIN_FONT FT_SMALL
2876 WIN_INVERT .0 ; Init new Wordprocessor
2877 call PLED_standard_color
2878 lfsr FSR2,letter
2879 movlw 0xB8
2880 movwf POSTINC2
2881 call word_processor
2882 WIN_TOP .25
2883 WIN_LEFT .85
2884 WIN_FONT FT_SMALL
2885 WIN_INVERT .0 ; Init new Wordprocessor
2886 call PLED_standard_color
2887 lfsr FSR2,letter
2888 movlw 0xB8
2889 movwf POSTINC2
2890 call word_processor
2891 WIN_TOP .50
2892 WIN_LEFT .85
2893 WIN_FONT FT_SMALL
2894 WIN_INVERT .0 ; Init new Wordprocessor
2895 call PLED_standard_color
2896 lfsr FSR2,letter
2897 movlw 0xB8
2898 movwf POSTINC2
2899 call word_processor
2900 WIN_TOP .75
2901 WIN_LEFT .85
2902 WIN_FONT FT_SMALL
2903 WIN_INVERT .0 ; Init new Wordprocessor
2904 call PLED_standard_color
2905 lfsr FSR2,letter
2906 movlw 0xB8
2907 movwf POSTINC2
2908 call word_processor
2909 WIN_TOP .100
2910 WIN_LEFT .85
2911 WIN_FONT FT_SMALL
2912 WIN_INVERT .0 ; Init new Wordprocessor
2913 call PLED_standard_color
2914 lfsr FSR2,letter
2915 movlw 0xB8
2916 movwf POSTINC2
2917 call word_processor
2918
2919 movff menupos,temp1
2920 movlw d'0'
2921 dcfsnz temp1,F
2922 movlw d'0'
2923 dcfsnz temp1,F
2924 movlw d'25'
2925 dcfsnz temp1,F
2926 movlw d'50'
2927 dcfsnz temp1,F
2928 movlw d'75'
2929 dcfsnz temp1,F
2930 movlw d'100'
2931 movff WREG,win_top
2932 WIN_LEFT .85
2933 WIN_FONT FT_SMALL
2934 WIN_INVERT .0 ; Init new Wordprocessor
2935 call PLED_standard_color
2936
2937 lfsr FSR2,letter
2938 movlw 0xB7 ; Arrow for menu
2939 movwf POSTINC2
2940 call word_processor
2941 return
2942
2943 ;PLED_profileview_menu:
2944 ; DISPLAYTEXT .127 ;"Exit"
2945 ; DISPLAYTEXT .128 ;"Delete"
2946 ;; DISPLAYTEXT .132 ;"Format"
2947 ; return
2948
2949 custom_warn_surfmode: ; With CF in temp1
2950 movlw .0
2951 movff WREG,box_temp+0 ; Data
2952 movlw .56
2953 movff WREG,box_temp+1 ; row top (0-239)
2954 movlw .88
2955 movff WREG,box_temp+2 ; row bottom (0-239)
2956 movlw .69
2957 movff WREG,box_temp+3 ; column left (0-159)
2958 movlw .115
2959 movff WREG,box_temp+4 ; column right (0-159)
2960 call PLED_box
2961
2962 GETCUSTOM8 d'35' ; Standard output color
2963 movff WREG,box_temp+0 ; Data
2964 movlw .58
2965 movff WREG,box_temp+1 ; row top (0-239)
2966 movlw .86
2967 movff WREG,box_temp+2 ; row bottom (0-239)
2968 movlw .70
2969 movff WREG,box_temp+3 ; column left (0-159)
2970 movlw .114
2971 movff WREG,box_temp+4 ; column right (0-159)
2972 call PLED_frame
2973 ; warning text
2974
2975 WIN_TOP .60
2976 WIN_LEFT .71
2977 WIN_FONT FT_SMALL
2978 WIN_INVERT .1 ; Init new Wordprocessor
2979 call PLED_warnings_color ; Set Color for Warning
2980 lfsr FSR2,letter
2981 movlw 'C'
2982 movwf POSTINC2
2983 movlw 'F'
2984 movwf POSTINC2
2985 movff temp1,lo
2986 output_8
2987 movlw '!'
2988 movwf POSTINC2
2989 call word_processor
2990
2991 WIN_INVERT .0 ; Init new Wordprocessor
2992 call PLED_standard_color
2993 return
2994
2995 PLED_saturation_graph_divemode:
2996 ostc_debug 'h' ; Sends debug-information to screen if debugmode active
2997 PLED_tissue_saturation_graph:
2998 ostc_debug 'i' ; Sends debug-information to screen if debugmode active
2999
3000 ; Clear graph area...
3001 movlw .0
3002 movff WREG,box_temp+0 ; Data
3003 movlw .25
3004 movff WREG,box_temp+1 ; row top (0-239)
3005 movlw .120
3006 movff WREG,box_temp+2 ; row bottom (0-239)
3007 movlw .82
3008 movff WREG,box_temp+3 ; column left (0-159)
3009 movlw .159
3010 movff WREG,box_temp+4 ; column right (0-159)
3011 call PLED_box
3012
3013 ; Draw Frame
3014 GETCUSTOM8 d'35' ; Standard output color
3015 movff WREG,box_temp+0 ; Data
3016 movlw .25
3017 movff WREG,box_temp+1 ; row top (0-239)
3018 movlw .120
3019 movff WREG,box_temp+2 ; row bottom (0-239)
3020 movlw .82
3021 movff WREG,box_temp+3 ; column left (0-159)
3022 movlw .159
3023 movff WREG,box_temp+4 ; column right (0-159)
3024 call PLED_frame
3025
3026 ; Draw N2 Tissues
3027 lfsr FSR2, char_O_tissue_saturation+.000 ; N2
3028 movlw d'16'
3029 movwf wait_temp ; 16 tissues
3030 clrf waitms_temp ; Row offset
3031 PLED_tissue_saturation_graph3:
3032 GETCUSTOM8 d'35' ; Standard output color
3033 movff WREG,box_temp+0 ; Data
3034 movlw .28
3035 addwf waitms_temp,W
3036 movff WREG,box_temp+1 ; row top (0-239)
3037 movlw .28
3038 addwf waitms_temp,W
3039 movff WREG,box_temp+2 ; row bottom (0-239)
3040
3041 incf waitms_temp,F
3042 incf waitms_temp,F
3043
3044 movlw .100
3045 movff WREG,box_temp+3 ; column left (0-159)
3046
3047 movff POSTINC2,box_temp+4
3048 bcf STATUS,C
3049 rrcf box_temp+4,F
3050 bcf STATUS,C
3051 rrcf box_temp+4,F
3052 movlw .100
3053 addwf box_temp+4,F ; column right (0-159)
3054
3055 movlw d'157' ; limit display
3056 cpfslt box_temp+4 ; skip if 157 (WREG) < box_temp+4
3057 movwf box_temp+4
3058
3059 call PLED_box
3060
3061 decfsz wait_temp,F
3062 bra PLED_tissue_saturation_graph3
3063
3064 ; Draw He Tissues
3065 lfsr FSR2, char_O_tissue_saturation+.016 ; He
3066 movlw d'16'
3067 movwf wait_temp ; 16 tissues
3068 clrf waitms_temp ; Row offset
3069 PLED_tissue_saturation_graph2:
3070 GETCUSTOM8 d'35' ; Standard output color
3071 movff WREG,box_temp+0 ; Data
3072 movlw .86
3073 addwf waitms_temp,W
3074 movff WREG,box_temp+1 ; row top (0-239)
3075 movlw .86
3076 addwf waitms_temp,W
3077 movff WREG,box_temp+2 ; row bottom (0-239)
3078
3079 incf waitms_temp,F
3080 incf waitms_temp,F
3081
3082 movlw .100
3083 movff WREG,box_temp+3 ; column left (0-159)
3084
3085 movff POSTINC2,box_temp+4
3086 bcf STATUS,C
3087 rrcf box_temp+4,F
3088 bcf STATUS,C
3089 rrcf box_temp+4,F
3090 movlw .100
3091 addwf box_temp+4,F ; column right (0-159)
3092
3093 movlw d'157' ; limit display
3094 cpfslt box_temp+4 ; skip if 157 (WREG) < box_temp+4
3095 movwf box_temp+4
3096
3097 call PLED_box
3098
3099 decfsz wait_temp,F
3100 bra PLED_tissue_saturation_graph2
3101
3102 ; Draw Text
3103 WIN_LEFT .84
3104 WIN_TOP .32
3105 call PLED_standard_color
3106 lfsr FSR2,letter
3107 movlw 'N'
3108 movwf POSTINC2
3109 movlw '2'
3110 movwf POSTINC2
3111 call word_processor
3112 WIN_LEFT .84
3113 WIN_TOP .90
3114 call PLED_standard_color
3115 lfsr FSR2,letter
3116 movlw 'H'
3117 movwf POSTINC2
3118 movlw 'e'
3119 movwf POSTINC2
3120 call word_processor
3121
3122 movff char_O_gtissue_no,wait_temp ; used as temp
3123
3124 lfsr FSR2,letter
3125 lfsr FSR1,char_O_tissue_saturation+0
3126 incf wait_temp,F ; make 1-16 of 0-15
3127 PLED_tissue_saturation_graph4: ; point to leading tissue...
3128 movff POSTINC1,lo ; copy/overwrite to lo register
3129 decfsz wait_temp,F ; count until zero
3130 bra PLED_tissue_saturation_graph4 ;loop
3131 output_8
3132 movlw '%'
3133 movwf POSTINC2
3134 movlw ' '
3135 movwf POSTINC2
3136 WIN_LEFT .84
3137 WIN_TOP .62
3138 WIN_FONT FT_SMALL
3139 call PLED_standard_color
3140 call word_processor
3141 bcf leftbind
3142
3143 ; Draw Scale
3144 GETCUSTOM8 d'35' ; Standard output color
3145 movff WREG,box_temp+0 ; Data
3146 movlw .73
3147 movff WREG,box_temp+1 ; row top (0-239)
3148 movlw .74
3149 movff WREG,box_temp+2 ; row bottom (0-239)
3150 movlw .121
3151 movff WREG,box_temp+3 ; column left (0-159)
3152 movlw .157
3153 movff WREG,box_temp+4 ; column right (0-159)
3154 call PLED_frame
3155
3156 GETCUSTOM8 d'35' ; Standard output color
3157 movff WREG,box_temp+0 ; Data
3158 movlw .61
3159 movff WREG,box_temp+1 ; row top (0-239)
3160 movlw .84
3161 movff WREG,box_temp+2 ; row bottom (0-239)
3162 movlw .121
3163 movff WREG,box_temp+3 ; column left (0-159)
3164 movlw .122
3165 movff WREG,box_temp+4 ; column right (0-159)
3166 call PLED_box
3167 GETCUSTOM8 d'35' ; Standard output color
3168 movff WREG,box_temp+0 ; Data
3169 movlw .65
3170 movff WREG,box_temp+1 ; row top (0-239)
3171 movlw .80
3172 movff WREG,box_temp+2 ; row bottom (0-239)
3173 movlw .121+.9
3174 movff WREG,box_temp+3 ; column left (0-159)
3175 movlw .122+.9
3176 movff WREG,box_temp+4 ; column right (0-159)
3177 call PLED_box
3178 GETCUSTOM8 d'35' ; Standard output color
3179 movff WREG,box_temp+0 ; Data
3180 movlw .65
3181 movff WREG,box_temp+1 ; row top (0-239)
3182 movlw .80
3183 movff WREG,box_temp+2 ; row bottom (0-239)
3184 movlw .121+.18
3185 movff WREG,box_temp+3 ; column left (0-159)
3186 movlw .122+.18
3187 movff WREG,box_temp+4 ; column right (0-159)
3188 call PLED_box
3189 GETCUSTOM8 d'35' ; Standard output color
3190 movff WREG,box_temp+0 ; Data
3191 movlw .65
3192 movff WREG,box_temp+1 ; row top (0-239)
3193 movlw .80
3194 movff WREG,box_temp+2 ; row bottom (0-239)
3195 movlw .121+.27
3196 movff WREG,box_temp+3 ; column left (0-159)
3197 movlw .122+.27
3198 movff WREG,box_temp+4 ; column right (0-159)
3199 call PLED_box
3200 GETCUSTOM8 d'35' ; Standard output color
3201 movff WREG,box_temp+0 ; Data
3202 movlw .61
3203 movff WREG,box_temp+1 ; row top (0-239)
3204 movlw .84
3205 movff WREG,box_temp+2 ; row bottom (0-239)
3206 movlw .121+.36
3207 movff WREG,box_temp+3 ; column left (0-159)
3208 movlw .122+.36
3209 movff WREG,box_temp+4 ; column right (0-159)
3210 call PLED_box
3211
3212 return
3213
3214
3215 PLED_startupscreen1:
3216 call PLED_topline_box
3217 WIN_INVERT .1 ; Init new Wordprocessor
3218 DISPLAYTEXT d'3' ; "HeinrichsWeikamp"
3219 WIN_INVERT .0 ; Init new Wordprocessor
3220 DISPLAYTEXT .68 ; Licence 1/2
3221 DISPLAYTEXT .69
3222 DISPLAYTEXT .70
3223 DISPLAYTEXT .71
3224 DISPLAYTEXT .72
3225 DISPLAYTEXT .73
3226 DISPLAYTEXT .74
3227 return
3228
3229 PLED_startupscreen2:
3230 call PLED_topline_box
3231 WIN_INVERT .1 ; Init new Wordprocessor
3232 DISPLAYTEXT d'3' ; "HeinrichsWeikamp"
3233 WIN_INVERT .0 ; Init new Wordprocessor
3234 DISPLAYTEXT .75 ; Licence 2/2
3235 DISPLAYTEXT .76
3236 DISPLAYTEXT .77
3237 DISPLAYTEXT .78
3238 DISPLAYTEXT .79
3239 DISPLAYTEXT .80
3240 DISPLAYTEXT .81
3241 return
3242
3243 PLED_new_cf_warning:
3244 call PLED_topline_box
3245 WIN_INVERT .1 ; Init new Wordprocessor
3246 DISPLAYTEXTH .271 ; New CF added!
3247 WIN_INVERT .0 ; Init new Wordprocessor
3248 DISPLAYTEXTH .272 ; New CustomFunctions
3249 DISPLAYTEXTH .273 ; were added! Check
3250 DISPLAYTEXTH .274 ; CF I and CF II Menu
3251 DISPLAYTEXTH .275 ; for Details!
3252 return
3253
3254 PLED_const_ppO2_value:
3255 btfsc multi_gf_display ; Is the Multi-GF Table displayed?
3256 return ; Yes, No update and return!
3257
3258 ostc_debug 'j' ; Sends debug-information to screen if debugmode active
3259
3260 WIN_TOP .168
3261 WIN_LEFT .65
3262 WIN_FONT FT_SMALL
3263 WIN_INVERT .0 ; Init new Wordprocessor
3264
3265 lfsr FSR2,letter
3266 movff char_I_const_ppO2,lo
3267
3268 tstfsz lo ; In Bailout mode (char_I_const_ppO2=0)?
3269 bra PLED_const_ppO2_value2 ; No, display Setpoint
3270
3271 ; Yes, Display "Bail"
3272 call PLED_standard_color
3273 OUTPUTTEXTH d'263' ;"Bail"
3274 call word_processor
3275 return
3276
3277 PLED_const_ppO2_value2: ; Display SetPoint
3278 ;Show fixed SP value
3279 movff amb_pressure+0,xA+0
3280 movff amb_pressure+1,xA+1
3281 movlw d'10'
3282 movwf xB+0
3283 clrf xB+1
3284 ;xA/xB=xC with xA as remainder
3285 call div16x16 ; xC+0=p_amb/10
3286
3287 ; char_I_const_ppO2 > p_amb/10 -> Not physically possible! -> Display actual value!
3288 tstfsz xC+1 ; xC>255
3289 setf xC+0 ; Yes, set xC+0 to 2,55bar ppO2
3290
3291 movff ppO2_setpoint_store,WREG
3292 cpfslt xC+0 ; Setpoint value possible?
3293 bra PLED_const_ppO2_value1 ; Yes
3294
3295 movff xC+0,char_I_const_ppO2 ; No, Overwrite with actual value
3296 bra PLED_const_ppO2_value1a
3297
3298 PLED_const_ppO2_value1:
3299 ; char_I_const_ppO2 < ppO2[Diluent] -> Not physically possible! -> Display actual value!
3300 movff amb_pressure+0,xA+0
3301 movff amb_pressure+1,xA+1
3302 movlw d'10'
3303 movwf xB+0
3304 clrf xB+1
3305 call div16x16 ; xC=p_amb/10
3306 movff xC+0,xA+0
3307 movff xC+1,xA+1
3308 movff char_I_O2_ratio,xB+0
3309 clrf xB+1
3310 call mult16x16 ; xC:2=char_I_O2_ratio * p_amb/10
3311
3312 movff xC+0,sub_b+0
3313 movff xC+1,sub_b+1
3314 movff ppO2_setpoint_store,WREG; Setpoint
3315 mullw d'100' ; Setpoint*100
3316 movff PRODL,sub_a+0
3317 movff PRODH,sub_a+1
3318 call sub16 ; sub_c = sub_a - sub_b
3319
3320 btfss neg_flag
3321 bra PLED_const_ppO2_value11 ; Value in range
3322
3323 ; char_I_const_ppO2 < ppO2[Diluent] -> Not physically possible! -> Display actual value!
3324
3325 movff xC+0,xA+0
3326 movff xC+1,xA+1
3327 movlw d'100'
3328 movwf xB+0
3329 clrf xB+1
3330 call div16x16 ;xA/xB=xC with xA as remainder
3331
3332 movff xC+0,char_I_const_ppO2 ; No, Overwrite with actual value
3333 bra PLED_const_ppO2_value1a
3334
3335 PLED_const_ppO2_value11:
3336
3337 ; Setpoint in possible limits
3338 movff ppO2_setpoint_store,char_I_const_ppO2 ; Restore Setpoint
3339
3340 PLED_const_ppO2_value1a:
3341 PLED_color_code warn_ppo2 ; Color-code output
3342 movff char_I_const_ppO2,lo
3343 clrf hi
3344 bsf leftbind
3345 output_16dp d'3'
3346 bcf leftbind
3347 call word_processor
3348 call PLED_standard_color
3349 return
3350
3351 PLED_show_leading_tissue:
3352 call deco_main_calc_desaturation_time ; calculate desaturation time
3353 movlb b'00000001' ; select ram bank 1
3354
3355 DISPLAYTEXTH .282 ; L. Tissue:
3356 lfsr FSR2,letter
3357 movlw '#'
3358 movwf POSTINC2
3359 movff char_O_gtissue_no,lo
3360 movff char_O_gtissue_no,wait_temp ; used as temp
3361 bsf leftbind
3362 output_8
3363 movlw ' '
3364 movwf POSTINC2
3365 movlw '('
3366 movwf POSTINC2
3367
3368 movlw d'16'
3369 cpfslt wait_temp
3370 bra PLED_show_leading_tissue_he
3371 movlw 'N'
3372 movwf POSTINC2
3373 movlw '2'
3374 movwf POSTINC2
3375 bra PLED_show_leading_tissue2
3376 PLED_show_leading_tissue_he:
3377 movlw 'H'
3378 movwf POSTINC2
3379 movlw 'e'
3380 movwf POSTINC2
3381 PLED_show_leading_tissue2:
3382 movlw ')'
3383 movwf POSTINC2
3384 movlw ' '
3385 movwf POSTINC2
3386 WIN_LEFT .100
3387 WIN_TOP .25
3388 WIN_FONT FT_SMALL
3389 call PLED_standard_color
3390 call word_processor
3391
3392 lfsr FSR2,letter
3393 lfsr FSR1,char_O_tissue_saturation+0
3394 incf wait_temp,F ; make 1-16 of 0-15
3395 PLED_show_leading_tissue3: ; point to leading tissue...
3396 movff POSTINC1,lo ; copy/overwrite to lo register
3397 decfsz wait_temp,F ; count until zero
3398 bra PLED_show_leading_tissue3 ;loop
3399 output_8
3400 movlw '%'
3401 movwf POSTINC2
3402 movlw ' '
3403 movwf POSTINC2
3404 WIN_LEFT .100
3405 WIN_TOP .50
3406 WIN_FONT FT_SMALL
3407 call PLED_standard_color
3408 call word_processor
3409 bcf leftbind
3410 return
3411
3412 PLED_topline_box_clear: ; Writes an empty box
3413 movlw .0
3414 bra PLED_topline_box2
3415 PLED_topline_box: ; Writes a filled box
3416 GETCUSTOM8 d'35'
3417 PLED_topline_box2:
3418 movff WREG,box_temp+0 ; Data
3419 movlw .000
3420 movff WREG,box_temp+1 ; row top (0-239)
3421 movlw .026
3422 movff WREG,box_temp+2 ; row bottom (0-239)
3423 movlw .000
3424 movff WREG,box_temp+3 ; column left (0-159)
3425 movlw .159
3426 movff WREG,box_temp+4 ; column right (0-159)
3427 call PLED_box
3428 return
3429
3430 PLED_display_cns:
3431 btfsc multi_gf_display ; Is the Multi-GF Table displayed?
3432 return ; Yes, No update and return!
3433
3434 btfsc gauge_mode ; Do not display in gauge mode
3435 return
3436
3437 btfsc FLAG_apnoe_mode ; Do not display in apnoe mode
3438 return
3439
3440 btfsc pled_velocity_display ; Is velocity displayed?`
3441 return ; Yes, do not overwrite until pled_velocity_clear was called
3442
3443 ostc_debug 'k' ; Sends debug-information to screen if debugmode active
3444
3445 WIN_TOP .090
3446 WIN_LEFT .0
3447 WIN_FONT FT_SMALL
3448 PLED_color_code warn_cns ; Color-code CNS output
3449
3450 lfsr FSR2,letter
3451 movlw 'C'
3452 movwf POSTINC2
3453 movlw 'N'
3454 movwf POSTINC2
3455 movlw 'S'
3456 movwf POSTINC2
3457 movlw ':'
3458 movwf POSTINC2
3459 movff char_O_CNS_fraction,lo
3460 bsf leftbind
3461 output_8
3462 bcf leftbind
3463 movlw '%'
3464 movwf POSTINC2
3465 call word_processor
3466 return
3467
3468 PLED_display_cns_surface:
3469 ; Check if CNS should be displayed
3470 movff char_O_CNS_fraction,lo ; copy into bank1
3471 GETCUSTOM8 d'15' ; cns_display_high_surfacemode
3472 subwf lo,W
3473 btfss STATUS,C
3474 return ; Do not show...
3475 ; Show CNS
3476
3477 ostc_debug 'W' ; Sends debug-information to screen if debugmode active
3478
3479 WIN_TOP .175
3480 WIN_LEFT .45
3481 WIN_FONT FT_SMALL
3482 WIN_INVERT .0 ; Init new Wordprocessor
3483 PLED_color_code warn_cns ; Color-code CNS output
3484
3485 lfsr FSR2,letter
3486 movlw 'C'
3487 movwf POSTINC2
3488 movlw 'N'
3489 movwf POSTINC2
3490 movlw 'S'
3491 movwf POSTINC2
3492 movlw ':'
3493 movwf POSTINC2
3494 movff char_O_CNS_fraction,lo
3495 bsf leftbind
3496 output_8
3497 bcf leftbind
3498 movlw '%'
3499 movwf POSTINC2
3500 call word_processor
3501 return
3502
3503
3504 PLED_custom_text:
3505 read_int_eeprom d'64'
3506 movlw d'1'
3507 cpfseq EEDATA ; Custom text active?
3508 bra PLED_clear_custom_text ; No, Delete row
3509 WIN_TOP .200
3510 WIN_LEFT .0
3511 WIN_FONT FT_SMALL
3512 WIN_INVERT .0 ; Init new Wordprocessor
3513 call PLED_divemask_color ; Set Color for Divemode mask
3514
3515 lfsr FSR2,letter
3516 movlw d'64'
3517 movwf lo
3518 movlw d'24'
3519 movwf hi ; counter
3520
3521 PLED_custom_text1:
3522 incf lo,F
3523 call PLED_get_custom_letter ; Get one letter for the custom text
3524 movlw '}' ; End marker found?
3525 cpfseq EEDATA
3526 bra PLED_custom_text2 ; No
3527 bra PLED_custom_text3
3528 PLED_custom_text2:
3529 movff EEDATA,POSTINC2 ; Copy into Postinc
3530
3531 decfsz hi,F ; Max. numbers?
3532 bra PLED_custom_text1 ; No, get next letters
3533
3534 PLED_custom_text3:
3535 call word_processor
3536 call PLED_standard_color
3537 return
3538
3539 PLED_get_custom_letter:
3540 movff lo,EEADR ; Address for next custom text letter
3541 call read_eeprom ; Read letter
3542 return
3543
3544 PLED_clear_custom_text:
3545 movlw d'24'
3546 movwf temp1
3547 WIN_TOP .200
3548 WIN_LEFT .0
3549 call PLED_display_clear_common_y1
3550 return
3551
3552 PLED_simdata_screen: ;Display Pre-Dive Screen
3553 ; List active gases/Setpoints
3554 btfsc FLAG_const_ppO2_mode ; in ppO2 mode?
3555 bra PLED_simdata_screen3 ; Yes, display SetPoint/Sensor result list
3556
3557 PLED_simdata_screen2:
3558 ostc_debug 'm' ; Sends debug-information to screen if debugmode active
3559
3560 WIN_LEFT .0
3561 WIN_FONT FT_SMALL
3562 bsf leftbind
3563
3564 movlw d'2'
3565 movwf wait_temp ; here: stores eeprom address for gas list
3566 movlw d'10'
3567 movwf waitms_temp ; here: stores row for gas list
3568 clrf hi ; here: Gas counter
3569
3570 PLED_simdata_screen2_loop:
3571 incf hi,F ; Increase Gas
3572 movlw d'4'
3573 addwf wait_temp,F ; Increase eeprom address for gas list
3574
3575 lfsr FSR2,letter
3576 movlw 'G'
3577 movwf POSTINC2
3578 movff hi,lo ; copy gas number
3579 output_8 ; display gas number
3580 movlw ':'
3581 movwf POSTINC2
3582 movff wait_temp, EEADR; Gas #hi: %O2 - Set address in internal EEPROM
3583 call read_eeprom ; get byte (stored in EEDATA)
3584 movff EEDATA,lo ; copy to lo
3585 output_8 ; outputs into Postinc2!
3586 movlw '/'
3587 movwf POSTINC2
3588 incf EEADR,F ; Gas #hi: %He - Set address in internal EEPROM
3589 call read_eeprom ; get byte (stored in EEDATA)
3590 movff EEDATA,lo ; copy to lo
3591 output_8 ; outputs into Postinc2!
3592 movlw ' '
3593 movwf POSTINC2
3594 movf hi,W ; Gas number
3595 addlw d'27' ; -> Adress of change depth register
3596 call read_int_eeprom_1
3597 movff EEDATA,lo ; Change depth in m
3598 output_99 ; outputs into Postinc2!
3599 movlw 'm'
3600 movwf POSTINC2
3601 read_int_eeprom d'27' ; read flag register
3602 movff hi,lo ; copy gas number
3603 PLED_simdata_screen2_loop1:
3604 rrcf EEDATA ; roll flags into carry
3605 decfsz lo,F ; max. 5 times...
3606 bra PLED_simdata_screen2_loop1
3607
3608 btfsc STATUS,C ; test carry
3609 bra PLED_simdata_white
3610
3611 movlw color_grey
3612 call PLED_set_color ; grey out inactive gases!
3613 bra PLED_simdata_color_done
3614
3615 PLED_simdata_white:
3616 call PLED_standard_color
3617
3618 PLED_simdata_color_done:
3619 movlw d'25'
3620 addwf waitms_temp,F ; Increase row
3621 WIN_LEFT .0
3622 movff waitms_temp,win_top ; Set Row
3623 call word_processor ; display gas
3624
3625 PLED_simdata_screen2b:
3626 call PLED_standard_color
3627
3628 movlw d'5' ; list all five gases
3629 cpfseq hi ; All gases shown?
3630 bra PLED_simdata_screen2_loop ; No
3631
3632 return ; No, return (OC mode)
3633
3634 PLED_simdata_screen3:
3635 WIN_LEFT .0
3636 WIN_FONT FT_SMALL
3637 bsf leftbind
3638
3639 ; list three SP in Gaslist
3640 movlw d'35' ; 36 = current SP position in EEPROM
3641 movwf wait_temp ; here: stores eeprom address for gas list
3642 movlw d'10'
3643 movwf waitms_temp ; here: stores row for gas list
3644 clrf temp6 ; here: SP counter
3645
3646 PLED_simdata_screen3_loop:
3647 incf wait_temp,F ; EEPROM address
3648 incf temp6,F ; Increase SP
3649
3650 movlw d'25'
3651 addwf waitms_temp,F ; Increase row
3652 WIN_LEFT .0
3653 movff waitms_temp,win_top ; Set Row
3654
3655 lfsr FSR2,letter
3656 movlw 'S'
3657 movwf POSTINC2
3658 movlw 'P'
3659 movwf POSTINC2
3660 movff temp6,lo ; copy gas number
3661 output_8 ; display gas number
3662 movlw ':'
3663 movwf POSTINC2
3664 movlw ' '
3665 movwf POSTINC2
3666 movff wait_temp, EEADR; SP #hi position
3667 call read_eeprom ; get byte (stored in EEDATA)
3668 movff EEDATA,lo ; copy to lo
3669 clrf hi
3670 output_16dp d'3' ; outputs into Postinc2!
3671 call word_processor
3672
3673 movlw d'3' ; list all three SP
3674 cpfseq temp6 ; All gases shown?
3675 bra PLED_simdata_screen3_loop ;no
3676
3677 read_int_eeprom d'33' ; Read byte (stored in EEDATA)
3678 movff EEDATA,active_gas ; Read start gas (1-5)
3679 decf active_gas,W ; Gas 0-4
3680 mullw d'4'
3681 movf PRODL,W
3682 addlw d'7' ; = address for He ratio
3683 movwf EEADR
3684 call read_eeprom ; Read He ratio
3685 movff EEDATA,hi ; And copy into hold register
3686 decf active_gas,W ; Gas 0-4
3687 mullw d'4'
3688 movf PRODL,W
3689 addlw d'6' ; = address for O2 ratio
3690 movwf EEADR
3691 call read_eeprom ; Read O2 ratio
3692 movff EEDATA, lo ; O2 ratio
3693
3694 WIN_LEFT .0
3695 WIN_TOP .110
3696 lfsr FSR2,letter
3697 movlw 'D'
3698 movwf POSTINC2
3699 movlw 'i'
3700 movwf POSTINC2
3701 movlw 'l'
3702 movwf POSTINC2
3703 movlw ':'
3704 movwf POSTINC2
3705 output_8 ; O2 Ratio
3706 movlw '/'
3707 movwf POSTINC2
3708 movff hi,lo
3709 output_8 ; He Ratio
3710 call word_processor
3711
3712 bcf leftbind
3713 return ; Return (CC Mode)
3714
3715
3716
3717 adjust_depth_with_salinity: ; computes salinity setting into lo:hi [mBar]
3718
3719 btfsc simulatormode_active ; Do apply salinity in Simulatormode
3720 return
3721
3722 read_int_eeprom d'26' ; Read Salinity from EEPROM
3723 movff EEDATA, wait_temp ; salinity
3724
3725 movlw d'105' ; 105% ?
3726 cpfslt wait_temp ; Salinity higher limit
3727 return ; Out of limit, do not adjust lo:hi
3728
3729 movlw d'99' ; 99% ?
3730 cpfsgt wait_temp ; Salinity lower limit
3731 return ; Out of limit, do not adjust lo:hi
3732
3733 movff lo,xA+0
3734 movff hi,xA+1
3735
3736 movlw d'100'
3737 movwf xB+0
3738 clrf xB+1
3739
3740 call mult16x16 ;xA*xB=xC (lo:hi * 100)
3741
3742 movff wait_temp,xB+0 ; Salinity
3743 clrf xB+1
3744
3745 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
3746
3747 movff xC+0,lo
3748 movff xC+1,hi ; restore lo and hi with updated value
3749
3750 return