Mercurial > public > hwos_code
comparison src/compass_ops.asm @ 371:fec5eec4c8b7
fix some display issues with display1
| author | heinrichsweikamp |
|---|---|
| date | Wed, 19 Aug 2015 16:27:00 +0200 |
| parents | 67e631aa5b8c |
| children | 6f3530eb48f9 |
comparison
equal
deleted
inserted
replaced
| 370:67e631aa5b8c | 371:fec5eec4c8b7 |
|---|---|
| 511 incf xA+1 | 511 incf xA+1 |
| 512 ; 5. save it to xRDr | 512 ; 5. save it to xRDr |
| 513 movff xA+0,xRDr+0 | 513 movff xA+0,xRDr+0 |
| 514 movff xA+1,xRDr+1 | 514 movff xA+1,xRDr+1 |
| 515 | 515 |
| 516 ; ; Bearing ? | |
| 517 ; ; We can skip this xRD180 calculation if no bearing is set | |
| 518 ; bcf compass_bearing_set | |
| 519 ; movff compass_bearing+0,sub_a+0 | |
| 520 ; movff compass_bearing+1,sub_a+1 | |
| 521 ; movlw d'0' | |
| 522 ; cpfseq sub_a+1 | |
| 523 ; bra TFT_dive_compass_bearing ; something set, calculate xRD180 | |
| 524 ; movlw d'0' | |
| 525 ; cpfseq sub_a+0 | |
| 526 ; bra TFT_dive_compass_bearing ; something set, calculate xRD180 | |
| 527 ; bra TFT_dive_compass_ruler ; no value in the bearing, skip calc | |
| 528 ; | |
| 529 ;TFT_dive_compass_bearing: | |
| 530 ; bsf compass_bearing_set | |
| 531 | |
| 532 btfss compass_bearing_set | 516 btfss compass_bearing_set |
| 533 bra TFT_dive_compass_ruler ; no value in the bearing, skip calc | 517 bra TFT_dive_compass_ruler ; no value in the bearing, skip calc |
| 534 | 518 |
| 535 ; we have bearing set, we will need xRD180 calculated | 519 ; we have bearing set, we will need xRD180 calculated |
| 536 ; xRD180 is xRDr-180 | 520 ; xRD180 is xRDr-180 |
| 665 movlw d'2' ; avoid thin mess on the side of the display | 649 movlw d'2' ; avoid thin mess on the side of the display |
| 666 addwf sub_a+0,1 | 650 addwf sub_a+0,1 |
| 667 btfsc STATUS, C | 651 btfsc STATUS, C |
| 668 incf sub_a+1 | 652 incf sub_a+1 |
| 669 ; load the display offset right side into sub_b | 653 ; load the display offset right side into sub_b |
| 670 movlw high(d'160') | 654 movlw high(d'158') |
| 671 addwf sub_b+1,1 | 655 addwf sub_b+1,1 |
| 672 movlw low(d'160') | 656 movlw low(d'158') |
| 673 addwf sub_b+0,1 | 657 addwf sub_b+0,1 |
| 674 btfsc STATUS,C | 658 btfsc STATUS,C |
| 675 incf sub_b+1 | 659 incf sub_b+1 |
| 676 call subU16 ; sub_c = sub_a - sub_b | 660 call subU16 ; sub_c = sub_a - sub_b |
| 677 btfss neg_flag ; xRDr>xA(+2) | 661 btfss neg_flag ; xRDr>xA(+2) |
| 689 ; xRD180 - xCM | 673 ; xRD180 - xCM |
| 690 call subU16 ; sub_c = sub_a - sub_b | 674 call subU16 ; sub_c = sub_a - sub_b |
| 691 btfsc neg_flag ; CM>xRD180 | 675 btfsc neg_flag ; CM>xRD180 |
| 692 return ; no, not on screen | 676 return ; no, not on screen |
| 693 ; 160 - (X) | 677 ; 160 - (X) |
| 694 movlw high(d'160') | 678 movlw high(d'158') |
| 695 movff WREG,sub_a+1 | 679 movff WREG,sub_a+1 |
| 696 movlw low(d'160') | 680 movlw low(d'158') |
| 697 movff WREG,sub_a+0 | 681 movff WREG,sub_a+0 |
| 698 movff sub_c+1,sub_b+1 | 682 movff sub_c+1,sub_b+1 |
| 699 movff sub_c+0,sub_b+0 | 683 movff sub_c+0,sub_b+0 |
| 700 call subU16 ; sub_c = sub_a - sub_b | 684 call subU16 ; sub_c = sub_a - sub_b |
| 701 btfsc neg_flag ; X>160 | 685 btfsc neg_flag ; X>160 |
| 702 return ; no, not on screen | 686 return ; no, not on screen |
| 703 ; check if not overflow - this sounds a double check... | 687 ; check if not overflow - this sounds a double check... |
| 704 movlw d'1' | 688 movlw d'1' |
| 705 cpfslt sub_c+1 | 689 cpfslt sub_c+1 |
| 706 return ; high set, >160 | 690 return ; high set, >160 |
| 707 movlw d'160' | 691 movlw d'158' |
| 708 cpfslt sub_c+0 | 692 cpfslt sub_c+0 |
| 709 return ; low >160 | 693 return ; low >160 |
| 710 ; print the bearing lines on the screen | 694 ; print the bearing lines on the screen |
| 711 movff sub_c+0,xCM | 695 movff sub_c+0,xCM |
| 712 bsf compass_bearing_vis | 696 bsf compass_bearing_vis |
| 832 subfwb xA+0,1 | 816 subfwb xA+0,1 |
| 833 TFT_dive_compass_ruler_1: | 817 TFT_dive_compass_ruler_1: |
| 834 ; xA+0 holds the RM, store it to 'lo' | 818 ; xA+0 holds the RM, store it to 'lo' |
| 835 movff xA+0,lo | 819 movff xA+0,lo |
| 836 ; init DD to zero, store it to 'hi' | 820 ; init DD to zero, store it to 'hi' |
| 837 movlw d'0' | 821 clrf hi |
| 838 movff WREG,hi | |
| 839 | 822 |
| 840 TFT_dive_compass_ruler_loop: | 823 TFT_dive_compass_ruler_loop: |
| 841 ; 1. check if we run of from the display | 824 ; 1. check if we run of from the display |
| 842 movlw d'160' ; Looks like 160 works because TFT_box limits the dispay | 825 movlw d'159' ; Looks like 159 works because TFT_box limits the dispay |
| 843 cpfslt lo,1 | 826 cpfslt lo,1 |
| 844 bra TFT_dive_compass_ruler_lend ; xRM >= W | 827 bra TFT_dive_compass_ruler_lend ; xRM >= W |
| 845 ; 2. Clear the tick area from DD to RM - in segments to avoid blinking | 828 ; 2. Clear the tick area from DD to RM - in segments to avoid blinking |
| 846 ; don't do a clear if we are at 0 (zero) otherwise it will blink | 829 ; don't do a clear if we are at 0 (zero) otherwise it will blink |
| 847 ; because of the width underflow | 830 ; because of the width underflow |
| 859 movlw d'2' | 842 movlw d'2' |
| 860 movff WREG,win_width | 843 movff WREG,win_width |
| 861 movff WREG,win_bargraph | 844 movff WREG,win_bargraph |
| 862 movff lo,win_leftx2 ; 0..159 | 845 movff lo,win_leftx2 ; 0..159 |
| 863 call TFT_standard_color | 846 call TFT_standard_color |
| 864 ; call TFT_box | 847 call TFT_box |
| 865 movlw dm_custom_compass_tick_bot_top | 848 movlw dm_custom_compass_tick_bot_top |
| 866 movff WREG,win_top | 849 movff WREG,win_top |
| 867 movlw dm_custom_compass_tick_height | 850 movlw dm_custom_compass_tick_height |
| 868 movff WREG,win_height | 851 movff WREG,win_height |
| 869 call TFT_standard_color ; color in WREG is trashed, must be set again! | 852 call TFT_standard_color ; color in WREG is trashed, must be set again! |
| 870 ; call TFT_box | 853 call TFT_box |
| 871 ; 4. If D<82 and RM>79: means we put something over the center line | 854 ; 4. If D<82 and RM>79: means we put something over the center line |
| 872 ; redraw the center line | 855 ; redraw the center line |
| 873 movlw d'82' | 856 movlw d'82' |
| 874 cpfslt hi,1 | 857 cpfslt hi,1 |
| 875 bra TFT_dive_compass_ruler_loop_zz2 | 858 bra TFT_dive_compass_ruler_loop_zz2 |
| 881 WIN_BOX_COLOR dm_custom_compass_tick_top_top, dm_custom_compass_tick_bot_bot,.80,.81 ; center line in yellow | 864 WIN_BOX_COLOR dm_custom_compass_tick_top_top, dm_custom_compass_tick_bot_bot,.80,.81 ; center line in yellow |
| 882 TFT_dive_compass_ruler_loop_zz2: | 865 TFT_dive_compass_ruler_loop_zz2: |
| 883 ; 5. set D = RM + 2 : position after the 2px tick | 866 ; 5. set D = RM + 2 : position after the 2px tick |
| 884 movff lo,hi | 867 movff lo,hi |
| 885 movlw d'2' | 868 movlw d'2' |
| 886 addwf hi,1 | 869 addwf hi,F |
| 887 ; 6. set RM = RM + 15 : position to the next tick | 870 ; 6. set RM = RM + 15 : position to the next tick |
| 888 movlw d'15' | 871 movlw d'15' |
| 889 addwf lo,1 | 872 addwf lo,F |
| 890 ; 7. loop | 873 ; 7. loop |
| 891 bra TFT_dive_compass_ruler_loop | 874 bra TFT_dive_compass_ruler_loop |
| 892 | 875 |
| 893 TFT_dive_compass_ruler_lend: ; loop end | 876 TFT_dive_compass_ruler_lend: ; loop end |
| 894 ; 8. clear the rest of the tick area if D<160 | 877 ; 8. clear the rest of the tick area if D<160 |
| 895 movlw d'160' | 878 movlw d'160' |
| 896 cpfslt hi,1 | 879 cpfslt hi |
| 897 bra TFT_dive_compass_ruler_lend2 ; D >= W | 880 bra TFT_dive_compass_ruler_lend2 ; D >= W |
| 898 ; 9. position left to end of display to clear the remaining area | 881 ; 9. position left to end of display to clear the remaining area |
| 899 movlw d'159' | 882 movlw d'159' |
| 900 movwf lo | 883 movwf lo |
| 901 ; 10. clear it | 884 ; 10. clear it |
| 905 ; done with the compass ruler, put the labels on the screen | 888 ; done with the compass ruler, put the labels on the screen |
| 906 ; get the RD abck to sub_b | 889 ; get the RD abck to sub_b |
| 907 movff xRD+0,sub_b+0 | 890 movff xRD+0,sub_b+0 |
| 908 movff xRD+1,sub_b+1 | 891 movff xRD+1,sub_b+1 |
| 909 ; hi stores the display position | 892 ; hi stores the display position |
| 910 movlw d'0' | 893 clrf hi |
| 911 movwf hi | 894 clrf xHI |
| 912 ; lo stores the last item's display position | 895 ; lo stores the last item's display position |
| 913 movlw d'0' | 896 clrf lo |
| 914 movwf lo | 897 clrf xLO |
| 915 bcf print_compass_label | |
| 916 | 898 |
| 917 movlw d'14' | 899 movlw d'14' |
| 918 movwf up ; up stores the width of hte label | 900 movwf up ; cardinal width in px |
| 919 movlw low( d'219' ) ; position of the label | 901 movlw low( d'219' ) ; position of the label |
| 920 movwf sub_a+0 | 902 movwf sub_a+0 |
| 921 movlw high( d'219' ) | 903 movlw high( d'219' ) |
| 922 movwf sub_a+1 | 904 movwf sub_a+1 |
| 923 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 905 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 924 btfss print_compass_label ; Yes? | 906 btfss print_compass_label ; Yes? |
| 925 bra dcr_1 | 907 bra dcr_1 |
| 926 STRCPY_TEXT_PRINT tSW ; yes - print it | 908 STRCPY_TEXT_PRINT tSW ; yes - print it |
| 927 dcr_1: | 909 dcr_1: |
| 928 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 910 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 929 | 911 |
| 930 movlw d'7' | 912 movlw d'14' |
| 931 movwf up ; up stores the width of hte label | 913 movwf up ; cardinal width in px |
| 932 movlw low( d'267' ) ; position of the label | 914 movlw low( d'267' ) ; position of the label |
| 933 movwf sub_a+0 | 915 movwf sub_a+0 |
| 934 movlw high( d'267' ) | 916 movlw high( d'267' ) |
| 935 movwf sub_a+1 | 917 movwf sub_a+1 |
| 936 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 918 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 939 STRCPY_TEXT_PRINT tW ; yes - print it | 921 STRCPY_TEXT_PRINT tW ; yes - print it |
| 940 dcr_2: | 922 dcr_2: |
| 941 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 923 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 942 | 924 |
| 943 movlw d'14' | 925 movlw d'14' |
| 944 movwf up ; up stores the width of hte label | 926 movwf up ; cardinal width in px |
| 945 movlw low( d'309' ) ; position of the label | 927 movlw low( d'309' ) ; position of the label |
| 946 movwf sub_a+0 | 928 movwf sub_a+0 |
| 947 movlw high( d'309' ) | 929 movlw high( d'309' ) |
| 948 movwf sub_a+1 | 930 movwf sub_a+1 |
| 949 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 931 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 951 bra dcr_3 | 933 bra dcr_3 |
| 952 STRCPY_TEXT_PRINT tNW ; yes - print it | 934 STRCPY_TEXT_PRINT tNW ; yes - print it |
| 953 dcr_3: | 935 dcr_3: |
| 954 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 936 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 955 | 937 |
| 956 movlw d'6' | 938 movlw d'14' |
| 957 movwf up ; up stores the width of hte label | 939 movwf up ; cardinal width in px |
| 958 movlw low( d'358' ) ; position of the label | 940 movlw low( d'358' ) ; position of the label |
| 959 movwf sub_a+0 | 941 movwf sub_a+0 |
| 960 movlw high( d'358' ) | 942 movlw high( d'358' ) |
| 961 movwf sub_a+1 | 943 movwf sub_a+1 |
| 962 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 944 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 964 bra dcr_4 | 946 bra dcr_4 |
| 965 STRCPY_TEXT_PRINT tN ; yes - print it | 947 STRCPY_TEXT_PRINT tN ; yes - print it |
| 966 dcr_4: | 948 dcr_4: |
| 967 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 949 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 968 | 950 |
| 969 movlw d'13' | 951 movlw d'14' |
| 970 movwf up ; up stores the width of hte label | 952 movwf up ; cardinal width in px |
| 971 movlw low( d'399' ) ; position of the label | 953 movlw low( d'399' ) ; position of the label |
| 972 movwf sub_a+0 | 954 movwf sub_a+0 |
| 973 movlw high( d'399' ) | 955 movlw high( d'399' ) |
| 974 movwf sub_a+1 | 956 movwf sub_a+1 |
| 975 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 957 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 977 bra dcr_5 | 959 bra dcr_5 |
| 978 STRCPY_TEXT_PRINT tNE ; yes - print it | 960 STRCPY_TEXT_PRINT tNE ; yes - print it |
| 979 dcr_5: | 961 dcr_5: |
| 980 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 962 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 981 | 963 |
| 982 movlw d'6' | 964 movlw d'14' |
| 983 movwf up ; up stores the width of hte label | 965 movwf up ; cardinal width in px |
| 984 movlw low( d'448' ) ; position of the label | 966 movlw low( d'448' ) ; position of the label |
| 985 movwf sub_a+0 | 967 movwf sub_a+0 |
| 986 movlw high( d'448' ) | 968 movlw high( d'448' ) |
| 987 movwf sub_a+1 | 969 movwf sub_a+1 |
| 988 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 970 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 990 bra dcr_6 | 972 bra dcr_6 |
| 991 STRCPY_TEXT_PRINT tE ; yes - print it | 973 STRCPY_TEXT_PRINT tE ; yes - print it |
| 992 dcr_6: | 974 dcr_6: |
| 993 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 975 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 994 | 976 |
| 995 movlw d'13' | 977 movlw d'14' |
| 996 movwf up ; up stores the width of hte label | 978 movwf up ; cardinal width in px |
| 997 movlw low( d'489' ) ; position of the label | 979 movlw low( d'489' ) ; position of the label |
| 998 movwf sub_a+0 | 980 movwf sub_a+0 |
| 999 movlw high( d'489' ) | 981 movlw high( d'489' ) |
| 1000 movwf sub_a+1 | 982 movwf sub_a+1 |
| 1001 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 983 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 1003 bra dcr_7 | 985 bra dcr_7 |
| 1004 STRCPY_TEXT_PRINT tSE ; yes - print it | 986 STRCPY_TEXT_PRINT tSE ; yes - print it |
| 1005 dcr_7: | 987 dcr_7: |
| 1006 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 988 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 1007 | 989 |
| 1008 movlw d'6' | 990 movlw d'14' |
| 1009 movwf up ; up stores the width of hte label | 991 movwf up ; cardinal width in px |
| 1010 movlw low( d'538' ) ; position of the label | 992 movlw low( d'538' ) ; position of the label |
| 1011 movwf sub_a+0 | 993 movwf sub_a+0 |
| 1012 movlw high( d'538' ) | 994 movlw high( d'538' ) |
| 1013 movwf sub_a+1 | 995 movwf sub_a+1 |
| 1014 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 996 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 1017 STRCPY_TEXT_PRINT tS ; yes - print it | 999 STRCPY_TEXT_PRINT tS ; yes - print it |
| 1018 dcr_8: | 1000 dcr_8: |
| 1019 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 1001 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 1020 | 1002 |
| 1021 movlw d'14' | 1003 movlw d'14' |
| 1022 movwf up ; up stores the width of hte label | 1004 movwf up ; cardinal width in px |
| 1023 movlw low( d'579' ) ; position of the label | 1005 movlw low( d'579' ) ; position of the label |
| 1024 movwf sub_a+0 | 1006 movwf sub_a+0 |
| 1025 movlw high( d'579' ) | 1007 movlw high( d'579' ) |
| 1026 movwf sub_a+1 | 1008 movwf sub_a+1 |
| 1027 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 1009 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 1029 bra dcr_9 | 1011 bra dcr_9 |
| 1030 STRCPY_TEXT_PRINT tSW ; yes - print it | 1012 STRCPY_TEXT_PRINT tSW ; yes - print it |
| 1031 dcr_9: | 1013 dcr_9: |
| 1032 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 1014 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 1033 | 1015 |
| 1034 movlw d'7' | 1016 movlw d'14' |
| 1035 movwf up ; up stores the width of hte label | 1017 movwf up ; cardinal width in px |
| 1036 movlw low( d'627' ) ; position of the label | 1018 movlw low( d'627' ) ; position of the label |
| 1037 movwf sub_a+0 | 1019 movwf sub_a+0 |
| 1038 movlw high( d'627' ) | 1020 movlw high( d'627' ) |
| 1039 movwf sub_a+1 | 1021 movwf sub_a+1 |
| 1040 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 1022 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 1043 STRCPY_TEXT_PRINT tW ; yes - print it | 1025 STRCPY_TEXT_PRINT tW ; yes - print it |
| 1044 dcr_10: | 1026 dcr_10: |
| 1045 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 1027 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 1046 | 1028 |
| 1047 movlw d'14' | 1029 movlw d'14' |
| 1048 movwf up ; up stores the width of hte label | 1030 movwf up ; cardinal width in px |
| 1049 movlw low( d'669' ) ; position of the label | 1031 movlw low( d'669' ) ; position of the label |
| 1050 movwf sub_a+0 | 1032 movwf sub_a+0 |
| 1051 movlw high( d'669' ) | 1033 movlw high( d'669' ) |
| 1052 movwf sub_a+1 | 1034 movwf sub_a+1 |
| 1053 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 1035 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 1055 bra dcr_11 | 1037 bra dcr_11 |
| 1056 STRCPY_TEXT_PRINT tNW ; yes - print it | 1038 STRCPY_TEXT_PRINT tNW ; yes - print it |
| 1057 dcr_11: | 1039 dcr_11: |
| 1058 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker | 1040 rcall TFT_dive_compass_c_mk ; check if label is on the center line or the marker |
| 1059 | 1041 |
| 1060 movlw d'6' | 1042 movlw d'14' |
| 1061 movwf up ; up stores the width of hte label | 1043 movwf up ; cardinal width in px |
| 1062 movlw low( d'718' ) ; position of the label | 1044 movlw low( d'718' ) ; position of the label |
| 1063 movwf sub_a+0 | 1045 movwf sub_a+0 |
| 1064 movlw high( d'718' ) | 1046 movlw high( d'718' ) |
| 1065 movwf sub_a+1 | 1047 movwf sub_a+1 |
| 1066 rcall TFT_dive_compass_label_proc ; check if the label should be on screen | 1048 rcall TFT_dive_compass_label_proc ; check if the label should be on screen |
| 1119 ; do not forget to clear the right | 1101 ; do not forget to clear the right |
| 1120 rcall TFT_dive_compass_dir_rclr | 1102 rcall TFT_dive_compass_dir_rclr |
| 1121 ;bra TFT_dive_compass_text | 1103 ;bra TFT_dive_compass_text |
| 1122 | 1104 |
| 1123 TFT_dive_compass_text: | 1105 TFT_dive_compass_text: |
| 1106 ; Clear some unused space on the right mH | |
| 1107 WIN_BOX_BLACK dm_custom_compass_tick_top_bot+.1,dm_custom_compass_tick_bot_top-.1,.158,.159 ; top, bottom, left, right | |
| 1108 | |
| 1124 ; Text output | 1109 ; Text output |
| 1125 call TFT_standard_color | 1110 call TFT_standard_color |
| 1126 WIN_SMALL dm_custom_compass_head_column, dm_custom_compass_head_row | 1111 WIN_SMALL dm_custom_compass_head_column, dm_custom_compass_head_row |
| 1127 rcall TFT_surface_compass_heading_com ; Show "000° N" | 1112 rcall TFT_surface_compass_heading_com ; Show "000° N" |
| 1128 return | 1113 return |
| 1141 ; Input: | 1126 ; Input: |
| 1142 ; xHI: DD - display'a current position | 1127 ; xHI: DD - display'a current position |
| 1143 ; xRD: RD - ruler display offset | 1128 ; xRD: RD - ruler display offset |
| 1144 ; sub_a: RP - item's ruler display offset | 1129 ; sub_a: RP - item's ruler display offset |
| 1145 ; get the RD abck to sub_b | 1130 ; get the RD abck to sub_b |
| 1146 movff xHI,hi | 1131 ; movff xHI,hi ; mH |
| 1147 bcf print_compass_label | 1132 bcf print_compass_label |
| 1148 ; 1/a. check if it's viewable ? sub_a(RP) >= sub_b(RD) ? | 1133 ; 1/a. check if it's viewable ? sub_a(RP) >= sub_b(RD) ? |
| 1149 ; set the carry flag if sub_b(xRD) is equal to or greater than sub_a(xRP): | 1134 ; set the carry flag if sub_b(xRD) is equal to or greater than sub_a(xRP): |
| 1150 movff xRD+0,sub_b+0 | 1135 movff xRD+0,sub_b+0 |
| 1151 movff xRD+1,sub_b+1 | 1136 movff xRD+1,sub_b+1 |
| 1156 movff sub_c+0,xC+0 | 1141 movff sub_c+0,xC+0 |
| 1157 movff sub_c+1,xC+1 | 1142 movff sub_c+1,xC+1 |
| 1158 | 1143 |
| 1159 ; 1/b. check if it's viewable ? sub_a(RP)+up(width) < sub_b(RD)+160 | 1144 ; 1/b. check if it's viewable ? sub_a(RP)+up(width) < sub_b(RD)+160 |
| 1160 ; if already above, no need to process the rest of the labels | 1145 ; if already above, no need to process the rest of the labels |
| 1161 movff up,WREG ; don't worry about the width, low level call prevents overload | 1146 movff up,WREG ; take care about the width |
| 1162 ; movlw d'2' ; .. but still avoid thin mess on the side of the display | |
| 1163 addwf sub_a+0,1 | 1147 addwf sub_a+0,1 |
| 1164 btfsc STATUS, C | 1148 btfsc STATUS, C |
| 1165 incf sub_a+1 | 1149 incf sub_a+1 |
| 1166 | 1150 |
| 1167 movff xRDr+0,sub_b+0 | 1151 movff xRDr+0,sub_b+0 |
| 1189 movff WREG,win_top | 1173 movff WREG,win_top |
| 1190 movff lo,win_leftx2 | 1174 movff lo,win_leftx2 |
| 1191 movlw FT_SMALL | 1175 movlw FT_SMALL |
| 1192 movff WREG,win_font | 1176 movff WREG,win_font |
| 1193 ; 6. retain the new display positions | 1177 ; 6. retain the new display positions |
| 1194 movff hi,divB ; old-hi will be used by the c_mk : clear+marker printing | 1178 ; movff hi,divB ; old-hi will be used by the c_mk : clear+marker printing mH |
| 1195 movff lo,hi | 1179 movff lo,hi |
| 1196 movff up,WREG | 1180 movff up,WREG |
| 1197 addwf hi,1 | 1181 addwf hi,F |
| 1198 movff lo,xLO | 1182 movff lo,xLO |
| 1199 movff hi,xHI | 1183 movff hi,xHI |
| 1200 return | 1184 return |
| 1201 | 1185 |
| 1202 TFT_dive_compass_c_mk: | 1186 TFT_dive_compass_c_mk: |
| 1255 rcall TFT_dive_compass_mk_print_3 | 1239 rcall TFT_dive_compass_mk_print_3 |
| 1256 TFT_dive_compass_mk_print_2: | 1240 TFT_dive_compass_mk_print_2: |
| 1257 ; save hi/lo | 1241 ; save hi/lo |
| 1258 movff hi,divA+1 | 1242 movff hi,divA+1 |
| 1259 movff lo,divA+0 | 1243 movff lo,divA+0 |
| 1260 ; clear the middle of hte bearing marker | 1244 ; clear the middle of the bearing marker |
| 1261 movff lo,hi | 1245 movff lo,hi |
| 1262 movlw d'2' | 1246 movlw d'2' |
| 1263 addwf lo,1 | 1247 addwf lo,1 |
| 1264 rcall TFT_dive_compass_clr_label | 1248 rcall TFT_dive_compass_clr_label |
| 1265 ; restore hi/lo | 1249 ; restore hi/lo |
| 1285 movlw dm_custom_compass_label_row + .9 | 1269 movlw dm_custom_compass_label_row + .9 |
| 1286 movff WREG,win_top | 1270 movff WREG,win_top |
| 1287 movlw d'4' | 1271 movlw d'4' |
| 1288 movff WREG,win_height | 1272 movff WREG,win_height |
| 1289 TFT_dive_compass_mk_print_4: | 1273 TFT_dive_compass_mk_print_4: |
| 1274 banksel win_leftx2 | |
| 1275 movlw .158 | |
| 1276 cpfslt win_leftx2 | |
| 1277 bra TFT_dive_compass_mk_print_5 | |
| 1290 movlw d'2' | 1278 movlw d'2' |
| 1291 movff WREG,win_width | 1279 movwf win_width |
| 1292 movff WREG,win_bargraph | 1280 movwf win_bargraph |
| 1281 banksel common | |
| 1293 movlw color_green | 1282 movlw color_green |
| 1294 btfss print_compass_label | 1283 btfss print_compass_label |
| 1295 movlw color_red | 1284 movlw color_red |
| 1296 call TFT_set_color | 1285 call TFT_set_color |
| 1297 call TFT_box | 1286 call TFT_box |
| 1287 TFT_dive_compass_mk_print_5: | |
| 1288 banksel common | |
| 1298 return | 1289 return |
| 1299 | 1290 |
| 1300 TFT_dive_compass_clr_label: | 1291 TFT_dive_compass_clr_label: |
| 1301 return | |
| 1302 movlw dm_custom_compass_label_row-.2 ; set top & height | 1292 movlw dm_custom_compass_label_row-.2 ; set top & height |
| 1303 movff WREG,win_top | 1293 movff WREG,win_top |
| 1304 movlw dm_custom_compass_label_height+.2 | 1294 movlw dm_custom_compass_label_height+.2 |
| 1305 movff WREG,win_height | 1295 movff WREG,win_height |
| 1306 rcall TFT_dive_compass_clear | 1296 rcall TFT_dive_compass_clear |
| 1307 return | 1297 return |
| 1308 | 1298 |
| 1309 TFT_dive_compass_clr_ruler: | 1299 TFT_dive_compass_clr_ruler: |
| 1310 return | |
| 1311 ; top tick | 1300 ; top tick |
| 1312 movlw dm_custom_compass_tick_top_top ; set top & height | 1301 movlw dm_custom_compass_tick_top_top ; set top & height |
| 1313 movff WREG,win_top | 1302 movff WREG,win_top |
| 1314 movlw dm_custom_compass_tick_height | 1303 movlw dm_custom_compass_tick_height |
| 1315 movff WREG,win_height | 1304 movff WREG,win_height |
| 1323 ; return | 1312 ; return |
| 1324 TFT_dive_compass_clear: | 1313 TFT_dive_compass_clear: |
| 1325 ; we receive RM in lo and DD in hi | 1314 ; we receive RM in lo and DD in hi |
| 1326 ; calculate width = RM-D | 1315 ; calculate width = RM-D |
| 1327 movff hi,WREG | 1316 movff hi,WREG |
| 1328 subwf lo,0 | 1317 subwf lo,W |
| 1329 bz TFT_dive_compass_clear3 ; Do nothing if there is nothing to do | 1318 bz TFT_dive_compass_clear3 ; Do nothing if there is nothing to do |
| 1330 movff WREG,win_width ; RM-DD | 1319 movff WREG,win_width ; RM-DD |
| 1331 movff WREG,win_bargraph | 1320 movff WREG,win_bargraph |
| 1332 banksel win_width | 1321 banksel win_width |
| 1333 movlw .1 | 1322 movlw .1 |
