Mercurial > public > hwos_code
comparison src/convert.asm @ 623:c40025d8e750
3.03 beta released
author | heinrichsweikamp |
---|---|
date | Mon, 03 Jun 2019 14:01:48 +0200 |
parents | ca4556fb60b9 |
children | cd58f7fc86db |
comparison
equal
deleted
inserted
replaced
622:02d1386429a6 | 623:c40025d8e750 |
---|---|
1 ;============================================================================= | 1 ;============================================================================= |
2 ; | 2 ; |
3 ; File convert.asm ## V2.98c | 3 ; File convert.asm combined next generation V3.0.1 |
4 ; | 4 ; |
5 ; Converts register values to string | 5 ; Converts register values to string |
6 ; | 6 ; |
7 ; Copyright (c) 2011, Matthias Heinrichs, HeinrichsWeikamp, all right reserved. | 7 ; Copyright (c) 2011, Matthias Heinrichs, HeinrichsWeikamp, all right reserved. |
8 ;============================================================================= | 8 ;============================================================================= |
11 ; 2010-12-10 : [jDG] Optimize macro size | 11 ; 2010-12-10 : [jDG] Optimize macro size |
12 ; | 12 ; |
13 | 13 |
14 #include "hwos.inc" ; Mandatory header | 14 #include "hwos.inc" ; Mandatory header |
15 | 15 |
16 convert CODE | 16 convert CODE |
17 | 17 |
18 ;============================================================================= | 18 ;============================================================================= |
19 | 19 |
20 global output99_call | 20 global output99_call |
21 output99_call: | 21 output99_call: |
22 clrf ignore_digits | 22 clrf ignore_digits |
23 incf ignore_digits,F | 23 incf ignore_digits,F |
24 clrf cvt_temp4 | 24 clrf cvt_temp4 |
25 ;bra output99 | |
25 | 26 |
26 | 27 |
27 global output99 | 28 global output99 |
28 output99: | 29 output99: |
29 movlw d'99' | 30 movlw d'99' |
30 cpfslt lo | 31 cpfslt lo |
31 movwf lo ; limit to 99 | 32 movwf lo ; limit to 99 |
32 movff lo,lo_temp | 33 movff lo,cvt_temp_lo |
33 clrf hi_temp | 34 clrf cvt_temp_hi |
34 bcf pre_zero_flag ; do not display leading zeros | 35 bcf pre_zero_flag ; do not display leading zeros |
35 | 36 |
36 LCD_val99_2: | 37 LCD_val99_2: |
37 movlw .10 ; 10 | 38 movlw .10 ; 10 |
38 movwf cvt_temp2 | 39 movwf cvt_temp2 |
53 clrf cvt_temp4 | 54 clrf cvt_temp4 |
54 | 55 |
55 movlw d'99' | 56 movlw d'99' |
56 cpfslt lo | 57 cpfslt lo |
57 movwf lo ; limit to 99 | 58 movwf lo ; limit to 99 |
58 movff lo, lo_temp | 59 movff lo,cvt_temp_lo |
59 clrf hi_temp | 60 clrf cvt_temp_hi |
60 bsf pre_zero_flag ; display leading zeros | 61 bsf pre_zero_flag ; display leading zeros |
61 bra LCD_val99_2 | 62 bra LCD_val99_2 |
62 | 63 |
63 | 64 |
64 global output8_call | 65 global output8_call |
66 clrf ignore_digits | 67 clrf ignore_digits |
67 incf ignore_digits,F | 68 incf ignore_digits,F |
68 clrf cvt_temp4 | 69 clrf cvt_temp4 |
69 | 70 |
70 output8: | 71 output8: |
71 movff lo, lo_temp | 72 movff lo,cvt_temp_lo |
72 clrf hi_temp | 73 clrf cvt_temp_hi |
73 bcf pre_zero_flag ; do not display leading zeros | 74 bcf pre_zero_flag ; do not display leading zeros |
74 movlw .100 ; 100 | 75 movlw .100 ; 100 |
75 movwf cvt_temp2 | 76 movwf cvt_temp2 |
76 clrf cvt_temp3 | 77 clrf cvt_temp3 |
77 rcall DEC2ASCII | 78 rcall DEC2ASCII |
79 | 80 |
80 | 81 |
81 global output16_4_call | 82 global output16_4_call |
82 output16_4_call: ; limit to 9999 | 83 output16_4_call: ; limit to 9999 |
83 bsf show_last4 | 84 bsf show_last4 |
84 ; 9999 = 27 0F = [39][15] | 85 ; 9999 = 27 0F = [39][15] |
85 movlw .40 | 86 movlw .40 |
86 cpfslt hi ; hi < 40 ? | 87 cpfslt hi ; hi < 40 ? |
87 bra output16_4_call_2 ; NO - hi >= 40, do limit | 88 bra output16_4_call_2 ; NO - hi >= 40, do limit |
88 ; Yes, hi <= 39 | 89 ; YES - hi <= 39 |
89 movlw .39 | 90 movlw .39 |
90 cpfseq hi ; hi = 39 ? | 91 cpfseq hi ; hi = 39 ? |
91 bra output16_4_call_3 ; NO - hi < 39, no limit needed | 92 bra output16_4_call_3 ; NO - hi < 39, no limit needed |
92 ; Yes, hi = 39 | 93 ; YES - hi = 39 |
93 movlw .15 | 94 movlw .15 |
94 cpfslt lo ; lo < 15 | 95 cpfslt lo ; lo < 15 |
95 movwf lo ; NO - lo >= 15, set lo = 15. | 96 movwf lo ; NO - lo >= 15, set lo = 15 |
96 ; Yes, lo <= 14 or lo set to =15 | 97 ; YES - lo <= 14 or lo set to =15 |
97 bra output16_4_call_3 ; done | 98 bra output16_4_call_3 ; - done |
99 | |
98 output16_4_call_2: ; set to 9999 | 100 output16_4_call_2: ; set to 9999 |
99 movlw LOW .9999 | 101 MOVLI .9999,mpr |
100 movwf lo | |
101 movlw HIGH .9999 | |
102 movwf hi | |
103 output16_4_call_3: | 102 output16_4_call_3: |
104 bra output16_call | 103 bra output16_call |
104 | |
105 | 105 |
106 global output16_3_call | 106 global output16_3_call |
107 global output16_call | 107 global output16_call |
108 global output16 | 108 global output16 |
109 output16_3_call: ; limit to 999 | 109 output16_3_call: ; limit to 999 |
110 bsf show_last3 | 110 bsf show_last3 |
111 ; Limit to 3 | 111 ; Limit to 3 |
112 movlw .4 | 112 movlw .4 |
113 cpfslt hi | 113 cpfslt hi |
114 bra output16_3_call_2 | 114 bra output16_3_call_2 |
115 movlw .3 | 115 movlw .3 |
116 cpfseq hi ; = 3 ? | 116 cpfseq hi ; = 3 ? |
117 bra output16_3_call_3 ; NO - done | 117 bra output16_3_call_3 ; NO - done |
118 movlw .231 ; limit to 231(+768=999...) | 118 movlw .231 ; limit to 231(+768=999...) |
119 cpfslt lo | 119 cpfslt lo |
120 movwf lo | 120 movwf lo |
121 bra output16_3_call_3 ; done | 121 bra output16_3_call_3 ; done |
122 output16_3_call_2: ; set to .999 | 122 output16_3_call_2: ; set to .999 |
123 movlw LOW .999 | 123 MOVLI .999,mpr |
124 movwf lo | |
125 movlw HIGH .999 | |
126 movwf hi | |
127 output16_3_call_3: | 124 output16_3_call_3: |
128 output16_call: | 125 output16_call: |
129 clrf ignore_digits | 126 clrf ignore_digits |
130 incf ignore_digits,F | 127 incf ignore_digits,F |
131 clrf WREG | 128 clrf WREG |
136 tstfsz cvt_temp4 ; display leading zeros at all? | 133 tstfsz cvt_temp4 ; display leading zeros at all? |
137 bcf leading_zeros | 134 bcf leading_zeros |
138 bsf DP_done2 | 135 bsf DP_done2 |
139 tstfsz cvt_temp4 | 136 tstfsz cvt_temp4 |
140 bcf DP_done2 ; decimal point not yet set | 137 bcf DP_done2 ; decimal point not yet set |
141 movff lo, lo_temp | 138 movff lo,cvt_temp_lo ; copy hi:lo to cvt_temp_hi:cvt_temp_lo |
142 movff hi, hi_temp | 139 movff hi,cvt_temp_hi ; ... |
143 bcf pre_zero_flag ; do not display leading zeros | 140 bcf pre_zero_flag ; do not display leading zeros |
144 movlw b'00010000' ; 10000s | 141 movlw b'00010000' ; 10000s |
145 movwf cvt_temp2 | 142 movwf cvt_temp2 |
146 movlw b'00100111' | 143 movlw b'00100111' |
147 movwf cvt_temp3 | 144 movwf cvt_temp3 |
233 | 230 |
234 DEC2ASCII: | 231 DEC2ASCII: |
235 clrf cvt_temp1 ; converts into ASCII code | 232 clrf cvt_temp1 ; converts into ASCII code |
236 DEC2ASCII_2: | 233 DEC2ASCII_2: |
237 movf cvt_temp3,W | 234 movf cvt_temp3,W |
238 subwf hi_temp,W | 235 subwf cvt_temp_hi,W |
239 btfss STATUS,C | 236 btfss STATUS,C |
240 bra DEC2ASCII_4 | 237 bra DEC2ASCII_4 |
241 bnz DEC2ASCII_3 | 238 bnz DEC2ASCII_3 |
242 movf cvt_temp2,W | 239 movf cvt_temp2,W |
243 subwf lo_temp,W | 240 subwf cvt_temp_lo,W |
244 btfss STATUS,C | 241 btfss STATUS,C |
245 bra DEC2ASCII_4 | 242 bra DEC2ASCII_4 |
246 DEC2ASCII_3: | 243 DEC2ASCII_3: |
247 movf cvt_temp3,W | 244 movf cvt_temp3,W |
248 subwf hi_temp,F | 245 subwf cvt_temp_hi,F |
249 movf cvt_temp2,W | 246 movf cvt_temp2,W |
250 subwf lo_temp,F | 247 subwf cvt_temp_lo,F |
251 btfss STATUS,C | 248 btfss STATUS,C |
252 decf hi_temp,F | 249 decf cvt_temp_hi,F |
253 incf cvt_temp1,F | 250 incf cvt_temp1,F |
254 bsf pre_zero_flag | 251 bsf pre_zero_flag |
255 bra DEC2ASCII_2 | 252 bra DEC2ASCII_2 |
256 DEC2ASCII_4: | 253 DEC2ASCII_4: |
257 decfsz ignore_digits,F | 254 decfsz ignore_digits,F |