Automatic commit. Sat Sep 22 00:00:07 WST 2012
[matches/honours.git] / research / TCS / apparatus / source_code / default / datalog.lss
1 \r
2 datalog.elf:     file format elf32-avr\r
3 \r
4 Sections:\r
5 Idx Name          Size      VMA       LMA       File off  Algn\r
6   0 .data         00000052  00800100  000010f4  00001188  2**0\r
7                   CONTENTS, ALLOC, LOAD, DATA\r
8   1 .text         000010f4  00000000  00000000  00000094  2**1\r
9                   CONTENTS, ALLOC, LOAD, READONLY, CODE\r
10   2 .bss          00000051  00800152  00800152  000011da  2**0\r
11                   ALLOC\r
12   3 .debug_aranges 00000140  00000000  00000000  000011da  2**0\r
13                   CONTENTS, READONLY, DEBUGGING\r
14   4 .debug_pubnames 00000367  00000000  00000000  0000131a  2**0\r
15                   CONTENTS, READONLY, DEBUGGING\r
16   5 .debug_info   000012e8  00000000  00000000  00001681  2**0\r
17                   CONTENTS, READONLY, DEBUGGING\r
18   6 .debug_abbrev 00000a2f  00000000  00000000  00002969  2**0\r
19                   CONTENTS, READONLY, DEBUGGING\r
20   7 .debug_line   000011e0  00000000  00000000  00003398  2**0\r
21                   CONTENTS, READONLY, DEBUGGING\r
22   8 .debug_frame  000002d0  00000000  00000000  00004578  2**2\r
23                   CONTENTS, READONLY, DEBUGGING\r
24   9 .debug_str    0000046a  00000000  00000000  00004848  2**0\r
25                   CONTENTS, READONLY, DEBUGGING\r
26  10 .debug_loc    0000080b  00000000  00000000  00004cb2  2**0\r
27                   CONTENTS, READONLY, DEBUGGING\r
28  11 .debug_ranges 00000018  00000000  00000000  000054bd  2**0\r
29                   CONTENTS, READONLY, DEBUGGING\r
30 \r
31 Disassembly of section .text:\r
32 \r
33 00000000 <__vectors>:\r
34        0:       0c 94 64 00     jmp     0xc8    ; 0xc8 <__ctors_end>\r
35        4:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
36        8:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
37        c:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
38       10:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
39       14:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
40       18:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
41       1c:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
42       20:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
43       24:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
44       28:       0c 94 fc 03     jmp     0x7f8   ; 0x7f8 <__vector_10>\r
45       2c:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
46       30:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
47       34:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
48       38:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
49       3c:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
50       40:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
51       44:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
52       48:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
53       4c:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
54       50:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
55       54:       0c 94 81 00     jmp     0x102   ; 0x102 <__bad_interrupt>\r
56       58:       0c 94 5b 01     jmp     0x2b6   ; 0x2b6 <__vector_22>\r
57 \r
58 0000005c <LCD_character_table>:\r
59       5c:       51 0a 80 2a 00 00 00 0a 00 ff 00 00 59 55 18 01     Q..*........YU..\r
60       6c:       11 1e 11 1b 50 0b 41 1b 41 1f 11 01 51 1f 51 1b     ....P.A.A...Q.Q.\r
61         ...\r
62       88:       00 00 51 0f 91 39 41 14 91 31 41 1e 41 0e 41 1d     ..Q..9A..1A.A.A.\r
63       98:       50 0f 80 20 10 15 48 86 40 14 78 05 70 85 51 15     P.. [email protected].\r
64       a8:       51 0e 51 95 51 8e 21 90 81 20 50 15 48 44 50 c5     Q.Q.Q.!.. P.HDP.\r
65       b8:       28 c0 28 20 09 50 00 00 00 00 00 00 00 00 00 00     (.( .P..........\r
66 \r
67 000000c8 <__ctors_end>:\r
68       c8:       11 24           eor     r1, r1\r
69       ca:       1f be           out     0x3f, r1        ; 63\r
70       cc:       cf ef           ldi     r28, 0xFF       ; 255\r
71       ce:       d4 e0           ldi     r29, 0x04       ; 4\r
72       d0:       de bf           out     0x3e, r29       ; 62\r
73       d2:       cd bf           out     0x3d, r28       ; 61\r
74 \r
75 000000d4 <__do_copy_data>:\r
76       d4:       11 e0           ldi     r17, 0x01       ; 1\r
77       d6:       a0 e0           ldi     r26, 0x00       ; 0\r
78       d8:       b1 e0           ldi     r27, 0x01       ; 1\r
79       da:       e4 ef           ldi     r30, 0xF4       ; 244\r
80       dc:       f0 e1           ldi     r31, 0x10       ; 16\r
81       de:       02 c0           rjmp    .+4             ; 0xe4 <.do_copy_data_start>\r
82 \r
83 000000e0 <.do_copy_data_loop>:\r
84       e0:       05 90           lpm     r0, Z+\r
85       e2:       0d 92           st      X+, r0\r
86 \r
87 000000e4 <.do_copy_data_start>:\r
88       e4:       a2 35           cpi     r26, 0x52       ; 82\r
89       e6:       b1 07           cpc     r27, r17\r
90       e8:       d9 f7           brne    .-10            ; 0xe0 <.do_copy_data_loop>\r
91 \r
92 000000ea <__do_clear_bss>:\r
93       ea:       11 e0           ldi     r17, 0x01       ; 1\r
94       ec:       a2 e5           ldi     r26, 0x52       ; 82\r
95       ee:       b1 e0           ldi     r27, 0x01       ; 1\r
96       f0:       01 c0           rjmp    .+2             ; 0xf4 <.do_clear_bss_start>\r
97 \r
98 000000f2 <.do_clear_bss_loop>:\r
99       f2:       1d 92           st      X+, r1\r
100 \r
101 000000f4 <.do_clear_bss_start>:\r
102       f4:       a3 3a           cpi     r26, 0xA3       ; 163\r
103       f6:       b1 07           cpc     r27, r17\r
104       f8:       e1 f7           brne    .-8             ; 0xf2 <.do_clear_bss_loop>\r
105       fa:       0e 94 da 03     call    0x7b4   ; 0x7b4 <main>\r
106       fe:       0c 94 78 08     jmp     0x10f0  ; 0x10f0 <_exit>\r
107 \r
108 00000102 <__bad_interrupt>:\r
109      102:       0c 94 00 00     jmp     0       ; 0x0 <__vectors>\r
110 \r
111 00000106 <ADC_read>:\r
112 *\r
113 *   Purpose :       Do a Analog to Digital Conversion\r
114 *\r
115 *****************************************************************************/\r
116 uint ADC_read(uint8 input)\r
117 {\r
118      106:       df 92           push    r13\r
119      108:       ef 92           push    r14\r
120      10a:       ff 92           push    r15\r
121      10c:       0f 93           push    r16\r
122      10e:       1f 93           push    r17\r
123      110:       d8 2e           mov     r13, r24\r
124         \r
125         ADMUX = input;\r
126      112:       80 93 7c 00     sts     0x007C, r24\r
127         if (input == 1)\r
128      116:       41 e0           ldi     r20, 0x01       ; 1\r
129      118:       84 17           cp      r24, r20\r
130      11a:       51 f4           brne    .+20            ; 0x130 <ADC_read+0x2a>\r
131         {\r
132                 ADMUX |= (1<<REFS0) | (1<<REFS1);\r
133      11c:       80 91 7c 00     lds     r24, 0x007C\r
134      120:       80 6c           ori     r24, 0xC0       ; 192\r
135      122:       80 93 7c 00     sts     0x007C, r24\r
136                 while (SCK_ON);\r
137      126:       2b 99           sbic    0x05, 3 ; 5\r
138      128:       fe cf           rjmp    .-4             ; 0x126 <ADC_read+0x20>\r
139                 while (SCK_OFF);\r
140      12a:       2b 9b           sbis    0x05, 3 ; 5\r
141      12c:       fe cf           rjmp    .-4             ; 0x12a <ADC_read+0x24>\r
142      12e:       0a c0           rjmp    .+20            ; 0x144 <ADC_read+0x3e>\r
143         }\r
144         else\r
145         {\r
146                 ADMUX |= (1<<REFS0);\r
147      130:       80 91 7c 00     lds     r24, 0x007C\r
148      134:       80 64           ori     r24, 0x40       ; 64\r
149      136:       80 93 7c 00     sts     0x007C, r24\r
150                 ADMUX &= ~(1<<REFS1);\r
151      13a:       80 91 7c 00     lds     r24, 0x007C\r
152      13e:       8f 77           andi    r24, 0x7F       ; 127\r
153      140:       80 93 7c 00     sts     0x007C, r24\r
154         \r
155     char i;\r
156     uint ADC_temp;\r
157     uint32 ADCr = 0;\r
158 \r
159     ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0); \r
160      144:       83 e8           ldi     r24, 0x83       ; 131\r
161      146:       80 93 7a 00     sts     0x007A, r24\r
162 \r
163     //do a dummy readout first\r
164     ADCSRA |= (1<<ADSC);        // do single conversion\r
165      14a:       80 91 7a 00     lds     r24, 0x007A\r
166      14e:       80 64           ori     r24, 0x40       ; 64\r
167      150:       80 93 7a 00     sts     0x007A, r24\r
168     while(!(ADCSRA & 0x10));    // wait for conversion done, ADIF flag active\r
169      154:       80 91 7a 00     lds     r24, 0x007A\r
170      158:       84 ff           sbrs    r24, 4\r
171      15a:       fc cf           rjmp    .-8             ; 0x154 <ADC_read+0x4e>\r
172         \r
173     for(i=0;i<setup.adc_averages;i++)            // do several ADC conversions, for averaging\r
174      15c:       20 91 87 01     lds     r18, 0x0187\r
175      160:       30 91 88 01     lds     r19, 0x0188\r
176      164:       60 e0           ldi     r22, 0x00       ; 0\r
177      166:       ee 24           eor     r14, r14\r
178      168:       ff 24           eor     r15, r15\r
179      16a:       87 01           movw    r16, r14\r
180      16c:       1a c0           rjmp    .+52            ; 0x1a2 <ADC_read+0x9c>\r
181     {\r
182         ADCSRA |= (1<<ADSC);        // do single conversion\r
183      16e:       80 91 7a 00     lds     r24, 0x007A\r
184      172:       80 64           ori     r24, 0x40       ; 64\r
185      174:       80 93 7a 00     sts     0x007A, r24\r
186         while(!(ADCSRA & 0x10));    // wait for conversion done, ADIF flag active\r
187      178:       80 91 7a 00     lds     r24, 0x007A\r
188      17c:       84 ff           sbrs    r24, 4\r
189      17e:       fc cf           rjmp    .-8             ; 0x178 <ADC_read+0x72>\r
190         \r
191         ADC_temp = ADCL;            // read out ADCL register\r
192      180:       90 91 78 00     lds     r25, 0x0078\r
193         ADC_temp += (ADCH << 8);    // read out ADCH register        \r
194      184:       80 91 79 00     lds     r24, 0x0079\r
195 \r
196         ADCr += ADC_temp;      // accumulate result\r
197      188:       f8 2f           mov     r31, r24\r
198      18a:       e0 e0           ldi     r30, 0x00       ; 0\r
199      18c:       af 01           movw    r20, r30\r
200      18e:       49 0f           add     r20, r25\r
201      190:       51 1d           adc     r21, r1\r
202      192:       ca 01           movw    r24, r20\r
203      194:       a0 e0           ldi     r26, 0x00       ; 0\r
204      196:       b0 e0           ldi     r27, 0x00       ; 0\r
205      198:       e8 0e           add     r14, r24\r
206      19a:       f9 1e           adc     r15, r25\r
207      19c:       0a 1f           adc     r16, r26\r
208      19e:       1b 1f           adc     r17, r27\r
209 \r
210     //do a dummy readout first\r
211     ADCSRA |= (1<<ADSC);        // do single conversion\r
212     while(!(ADCSRA & 0x10));    // wait for conversion done, ADIF flag active\r
213         \r
214     for(i=0;i<setup.adc_averages;i++)            // do several ADC conversions, for averaging\r
215      1a0:       6f 5f           subi    r22, 0xFF       ; 255\r
216      1a2:       86 2f           mov     r24, r22\r
217      1a4:       90 e0           ldi     r25, 0x00       ; 0\r
218      1a6:       82 17           cp      r24, r18\r
219      1a8:       93 07           cpc     r25, r19\r
220      1aa:       08 f3           brcs    .-62            ; 0x16e <ADC_read+0x68>\r
221         ADC_temp = ADCL;            // read out ADCL register\r
222         ADC_temp += (ADCH << 8);    // read out ADCH register        \r
223 \r
224         ADCr += ADC_temp;      // accumulate result\r
225     }\r
226     ADCr = ADCr / setup.adc_averages;     // average the samples\r
227      1ac:       40 e0           ldi     r20, 0x00       ; 0\r
228      1ae:       50 e0           ldi     r21, 0x00       ; 0\r
229      1b0:       c8 01           movw    r24, r16\r
230      1b2:       b7 01           movw    r22, r14\r
231      1b4:       0e 94 30 08     call    0x1060  ; 0x1060 <__udivmodsi4>\r
232      1b8:       93 2f           mov     r25, r19\r
233         \r
234 \r
235     \r
236         ADCSRA &= ~(1<<ADEN);      // disable the ADC\r
237      1ba:       80 91 7a 00     lds     r24, 0x007A\r
238      1be:       8f 77           andi    r24, 0x7F       ; 127\r
239      1c0:       80 93 7a 00     sts     0x007A, r24\r
240 \r
241         setup.adc_values[input] = ADCr;\r
242      1c4:       ed 2d           mov     r30, r13\r
243      1c6:       f0 e0           ldi     r31, 0x00       ; 0\r
244      1c8:       ee 0f           add     r30, r30\r
245      1ca:       ff 1f           adc     r31, r31\r
246      1cc:       ed 56           subi    r30, 0x6D       ; 109\r
247      1ce:       fe 4f           sbci    r31, 0xFE       ; 254\r
248      1d0:       82 2f           mov     r24, r18\r
249      1d2:       80 83           st      Z, r24\r
250      1d4:       31 83           std     Z+1, r19        ; 0x01\r
251         \r
252     return (uint)ADCr;\r
253 }\r
254      1d6:       1f 91           pop     r17\r
255      1d8:       0f 91           pop     r16\r
256      1da:       ff 90           pop     r15\r
257      1dc:       ef 90           pop     r14\r
258      1de:       df 90           pop     r13\r
259      1e0:       08 95           ret\r
260 \r
261 000001e2 <LCD_WriteDigit>:\r
262 *   Purpose :       Stores LCD control data in the LCD_displayData buffer.\r
263 *                   (The LCD_displayData is latched in the LCD_SOF interrupt.)\r
264 *\r
265 *****************************************************************************/\r
266 void LCD_WriteDigit(char c, char digit)\r
267 {\r
268      1e2:       cf 93           push    r28\r
269      1e4:       df 93           push    r29\r
270      1e6:       98 2f           mov     r25, r24\r
271     char mask, nibble;\r
272     volatile char *ptr;\r
273     char i;\r
274 \r
275 \r
276     if (digit > 5)                              // Skip if digit is illegal\r
277      1e8:       66 30           cpi     r22, 0x06       ; 6\r
278      1ea:       c8 f5           brcc    .+114           ; 0x25e <LCD_WriteDigit+0x7c>\r
279         return;\r
280 \r
281     //Lookup character table for segmet data\r
282     if ((c >= '*') && (c <= 'z'))\r
283      1ec:       8a 52           subi    r24, 0x2A       ; 42\r
284      1ee:       81 35           cpi     r24, 0x51       ; 81\r
285      1f0:       18 f0           brcs    .+6             ; 0x1f8 <LCD_WriteDigit+0x16>\r
286      1f2:       a0 e0           ldi     r26, 0x00       ; 0\r
287      1f4:       b0 e0           ldi     r27, 0x00       ; 0\r
288      1f6:       0c c0           rjmp    .+24            ; 0x210 <LCD_WriteDigit+0x2e>\r
289     {\r
290         // c is a letter\r
291         if (c >= 'a')                           // Convert to upper case\r
292      1f8:       91 36           cpi     r25, 0x61       ; 97\r
293      1fa:       08 f0           brcs    .+2             ; 0x1fe <LCD_WriteDigit+0x1c>\r
294             c &= ~0x20;                         // if necessarry\r
295      1fc:       9f 7d           andi    r25, 0xDF       ; 223\r
296 \r
297         c -= '*';\r
298 \r
299         //mt seg = LCD_character_table[c];\r
300         seg = (unsigned int) pgm_read_word(&LCD_character_table[(uint8_t)c]); \r
301      1fe:       9a 52           subi    r25, 0x2A       ; 42\r
302      200:       e9 2f           mov     r30, r25\r
303      202:       f0 e0           ldi     r31, 0x00       ; 0\r
304      204:       ee 0f           add     r30, r30\r
305      206:       ff 1f           adc     r31, r31\r
306      208:       e4 5a           subi    r30, 0xA4       ; 164\r
307      20a:       ff 4f           sbci    r31, 0xFF       ; 255\r
308      20c:       a5 91           lpm     r26, Z+\r
309      20e:       b4 91           lpm     r27, Z+\r
310     }\r
311 \r
312     // Adjust mask according to LCD segment mapping\r
313     if (digit & 0x01)\r
314      210:       86 2f           mov     r24, r22\r
315      212:       90 e0           ldi     r25, 0x00       ; 0\r
316      214:       ec 01           movw    r28, r24\r
317      216:       c1 70           andi    r28, 0x01       ; 1\r
318      218:       d0 70           andi    r29, 0x00       ; 0\r
319      21a:       60 fd           sbrc    r22, 0\r
320      21c:       02 c0           rjmp    .+4             ; 0x222 <LCD_WriteDigit+0x40>\r
321      21e:       90 ef           ldi     r25, 0xF0       ; 240\r
322      220:       01 c0           rjmp    .+2             ; 0x224 <LCD_WriteDigit+0x42>\r
323      222:       9f e0           ldi     r25, 0x0F       ; 15\r
324         mask = 0x0F;                // Digit 1, 3, 5\r
325     else\r
326         mask = 0xF0;                // Digit 0, 2, 4\r
327 \r
328     ptr = LCD_Data + (digit >> 1);  // digit = {0,0,1,1,2,2}\r
329      224:       66 95           lsr     r22\r
330      226:       70 e0           ldi     r23, 0x00       ; 0\r
331      228:       69 5a           subi    r22, 0xA9       ; 169\r
332      22a:       7e 4f           sbci    r23, 0xFE       ; 254\r
333      22c:       20 e0           ldi     r18, 0x00       ; 0\r
334      22e:       30 e0           ldi     r19, 0x00       ; 0\r
335      230:       fb 01           movw    r30, r22\r
336      232:       e2 0f           add     r30, r18\r
337      234:       f3 1f           adc     r31, r19\r
338 \r
339     for (i = 0; i < 4; i++)\r
340     {\r
341         nibble = seg & 0x000F;\r
342      236:       4a 2f           mov     r20, r26\r
343      238:       4f 70           andi    r20, 0x0F       ; 15\r
344         seg >>= 4;\r
345      23a:       84 e0           ldi     r24, 0x04       ; 4\r
346      23c:       b6 95           lsr     r27\r
347      23e:       a7 95           ror     r26\r
348      240:       8a 95           dec     r24\r
349      242:       e1 f7           brne    .-8             ; 0x23c <LCD_WriteDigit+0x5a>\r
350         if (digit & 0x01)\r
351      244:       20 97           sbiw    r28, 0x00       ; 0\r
352      246:       11 f0           breq    .+4             ; 0x24c <LCD_WriteDigit+0x6a>\r
353             nibble <<= 4;\r
354      248:       42 95           swap    r20\r
355      24a:       40 7f           andi    r20, 0xF0       ; 240\r
356         *ptr = (*ptr & mask) | nibble;\r
357      24c:       80 81           ld      r24, Z\r
358      24e:       89 23           and     r24, r25\r
359      250:       48 2b           or      r20, r24\r
360      252:       40 83           st      Z, r20\r
361      254:       2b 5f           subi    r18, 0xFB       ; 251\r
362      256:       3f 4f           sbci    r19, 0xFF       ; 255\r
363     else\r
364         mask = 0xF0;                // Digit 0, 2, 4\r
365 \r
366     ptr = LCD_Data + (digit >> 1);  // digit = {0,0,1,1,2,2}\r
367 \r
368     for (i = 0; i < 4; i++)\r
369      258:       24 31           cpi     r18, 0x14       ; 20\r
370      25a:       31 05           cpc     r19, r1\r
371      25c:       49 f7           brne    .-46            ; 0x230 <LCD_WriteDigit+0x4e>\r
372         if (digit & 0x01)\r
373             nibble <<= 4;\r
374         *ptr = (*ptr & mask) | nibble;\r
375         ptr += 5;\r
376     }\r
377 }\r
378      25e:       df 91           pop     r29\r
379      260:       cf 91           pop     r28\r
380      262:       08 95           ret\r
381 \r
382 00000264 <LCD_AllSegments>:\r
383 *****************************************************************************/\r
384 void LCD_AllSegments(char show)\r
385 {\r
386     unsigned char i;\r
387 \r
388     if (show)\r
389      264:       81 11           cpse    r24, r1\r
390      266:       8f ef           ldi     r24, 0xFF       ; 255\r
391      268:       20 e0           ldi     r18, 0x00       ; 0\r
392      26a:       30 e0           ldi     r19, 0x00       ; 0\r
393      26c:       f9 01           movw    r30, r18\r
394      26e:       e9 5a           subi    r30, 0xA9       ; 169\r
395      270:       fe 4f           sbci    r31, 0xFE       ; 254\r
396         show = 0xFF;\r
397 \r
398     // Set/clear all bits in all LCD registers\r
399     for (i=0; i < LCD_REGISTER_COUNT; i++)\r
400         *(LCD_Data + i) = show;\r
401      272:       80 83           st      Z, r24\r
402      274:       2f 5f           subi    r18, 0xFF       ; 255\r
403      276:       3f 4f           sbci    r19, 0xFF       ; 255\r
404 \r
405     if (show)\r
406         show = 0xFF;\r
407 \r
408     // Set/clear all bits in all LCD registers\r
409     for (i=0; i < LCD_REGISTER_COUNT; i++)\r
410      278:       24 31           cpi     r18, 0x14       ; 20\r
411      27a:       31 05           cpc     r19, r1\r
412      27c:       b9 f7           brne    .-18            ; 0x26c <LCD_AllSegments+0x8>\r
413         *(LCD_Data + i) = show;\r
414 }\r
415      27e:       08 95           ret\r
416 \r
417 00000280 <LCD_Init>:\r
418 *                   Set up the LCD (timing, contrast, etc.)\r
419 *\r
420 *****************************************************************************/\r
421 void LCD_Init(void)\r
422 {\r
423     LCD_AllSegments(FALSE);                     // Clear segment buffer.\r
424      280:       80 e0           ldi     r24, 0x00       ; 0\r
425      282:       0e 94 32 01     call    0x264   ; 0x264 <LCD_AllSegments>\r
426 \r
427     LCD_CONTRAST_LEVEL(LCD_INITIAL_CONTRAST);    //Set the LCD contrast level\r
428      286:       a7 ee           ldi     r26, 0xE7       ; 231\r
429      288:       b0 e0           ldi     r27, 0x00       ; 0\r
430      28a:       8c 91           ld      r24, X\r
431      28c:       8f 60           ori     r24, 0x0F       ; 15\r
432      28e:       8c 93           st      X, r24\r
433 \r
434     // Select asynchronous clock source, enable all COM pins and enable all\r
435     // segment pins.\r
436     LCDCRB = (1<<LCDCS) | (3<<LCDMUX0) | (7<<LCDPM0);\r
437      290:       87 eb           ldi     r24, 0xB7       ; 183\r
438      292:       80 93 e5 00     sts     0x00E5, r24\r
439 \r
440     // Set LCD prescaler to give a framerate of 32,0 Hz\r
441     LCDFRR = (0<<LCDPS0) | (7<<LCDCD0);    \r
442      296:       87 e0           ldi     r24, 0x07       ; 7\r
443      298:       80 93 e6 00     sts     0x00E6, r24\r
444 \r
445     LCDCRA = (1<<LCDEN) | (1<<LCDAB);           // Enable LCD and set low power waveform\r
446      29c:       e4 ee           ldi     r30, 0xE4       ; 228\r
447      29e:       f0 e0           ldi     r31, 0x00       ; 0\r
448      2a0:       80 ec           ldi     r24, 0xC0       ; 192\r
449      2a2:       80 83           st      Z, r24\r
450 \r
451     //Enable LCD start of frame interrupt\r
452     LCDCRA |= (1<<LCDIE);\r
453      2a4:       80 81           ld      r24, Z\r
454      2a6:       88 60           ori     r24, 0x08       ; 8\r
455      2a8:       80 83           st      Z, r24\r
456 \r
457     //updated 2006-10-10, setting LCD drive time to 1150us in FW rev 07, \r
458     //instead of previous 300us in FW rev 06. Due to some variations on the LCD\r
459     //glass provided to the AVR Butterfly production.\r
460     LCDCCR |= (1<<LCDDC2) | (1<<LCDDC1) | (1<<LCDDC0);\r
461      2aa:       8c 91           ld      r24, X\r
462      2ac:       80 6e           ori     r24, 0xE0       ; 224\r
463      2ae:       8c 93           st      X, r24\r
464 \r
465     gLCD_Update_Required = FALSE;\r
466      2b0:       10 92 52 01     sts     0x0152, r1\r
467 \r
468 \r
469 }\r
470      2b4:       08 95           ret\r
471 \r
472 000002b6 <__vector_22>:\r
473 *   Purpose: Latch the LCD_displayData and Set LCD_status.updateComplete\r
474 *\r
475 *****************************************************************************/\r
476 \r
477 ISR(LCD_vect)\r
478 {\r
479      2b6:       1f 92           push    r1\r
480      2b8:       0f 92           push    r0\r
481      2ba:       0f b6           in      r0, 0x3f        ; 63\r
482      2bc:       0f 92           push    r0\r
483      2be:       11 24           eor     r1, r1\r
484      2c0:       ef 92           push    r14\r
485      2c2:       ff 92           push    r15\r
486      2c4:       0f 93           push    r16\r
487      2c6:       1f 93           push    r17\r
488      2c8:       2f 93           push    r18\r
489      2ca:       3f 93           push    r19\r
490      2cc:       4f 93           push    r20\r
491      2ce:       5f 93           push    r21\r
492      2d0:       6f 93           push    r22\r
493      2d2:       7f 93           push    r23\r
494      2d4:       8f 93           push    r24\r
495      2d6:       9f 93           push    r25\r
496      2d8:       af 93           push    r26\r
497      2da:       bf 93           push    r27\r
498      2dc:       cf 93           push    r28\r
499      2de:       df 93           push    r29\r
500      2e0:       ef 93           push    r30\r
501      2e2:       ff 93           push    r31\r
502 \r
503 \r
504 \r
505     c_flash=0; // mt\r
506 \r
507     LCD_timer--;                    // Decreased every LCD frame\r
508      2e4:       00 91 00 01     lds     r16, 0x0100\r
509      2e8:       01 50           subi    r16, 0x01       ; 1\r
510      2ea:       00 93 00 01     sts     0x0100, r16\r
511 \r
512     if (gScrollMode)\r
513      2ee:       80 91 56 01     lds     r24, 0x0156\r
514      2f2:       88 23           and     r24, r24\r
515      2f4:       81 f0           breq    .+32            ; 0x316 <__vector_22+0x60>\r
516     {\r
517         // If we are in scroll mode, and the timer has expired,\r
518         // we will update the LCD\r
519         if (LCD_timer == 0)\r
520      2f6:       00 23           and     r16, r16\r
521      2f8:       81 f4           brne    .+32            ; 0x31a <__vector_22+0x64>\r
522         {\r
523             if (gLCD_Start_Scroll_Timer == 0)\r
524      2fa:       80 91 53 01     lds     r24, 0x0153\r
525      2fe:       88 23           and     r24, r24\r
526      300:       21 f4           brne    .+8             ; 0x30a <__vector_22+0x54>\r
527             {\r
528                 gLCD_Update_Required = TRUE;\r
529      302:       81 e0           ldi     r24, 0x01       ; 1\r
530      304:       80 93 52 01     sts     0x0152, r24\r
531      308:       08 c0           rjmp    .+16            ; 0x31a <__vector_22+0x64>\r
532             }\r
533             else\r
534                 gLCD_Start_Scroll_Timer--;\r
535      30a:       80 91 53 01     lds     r24, 0x0153\r
536      30e:       81 50           subi    r24, 0x01       ; 1\r
537      310:       80 93 53 01     sts     0x0153, r24\r
538      314:       02 c0           rjmp    .+4             ; 0x31a <__vector_22+0x64>\r
539     }\r
540     else    \r
541     {   // if not scrolling,\r
542         // disble LCD start of frame interrupt\r
543         // cbi(LCDCRA, LCDIE);   //DEBUG\r
544         gScroll = 0;\r
545      316:       10 92 84 01     sts     0x0184, r1\r
546     }\r
547 \r
548 \r
549     EOL = FALSE;\r
550     if (gLCD_Update_Required == TRUE)\r
551      31a:       80 91 52 01     lds     r24, 0x0152\r
552      31e:       81 30           cpi     r24, 0x01       ; 1\r
553      320:       09 f0           breq    .+2             ; 0x324 <__vector_22+0x6e>\r
554      322:       52 c0           rjmp    .+164           ; 0x3c8 <__vector_22+0x112>\r
555     {\r
556         // Duty cycle of flashing characters\r
557         if (gFlashTimer < (LCD_FLASH_SEED >> 1))\r
558      324:       e0 90 54 01     lds     r14, 0x0154\r
559      328:       ff 24           eor     r15, r15\r
560      32a:       10 e0           ldi     r17, 0x00       ; 0\r
561      32c:       c0 e0           ldi     r28, 0x00       ; 0\r
562      32e:       d0 e0           ldi     r29, 0x00       ; 0\r
563      330:       6c 2f           mov     r22, r28\r
564             flash = 1;\r
565 \r
566         // Repeat for the six LCD characters\r
567         for (i = 0; i < 6; i++)\r
568         {\r
569             if ((gScroll+i) >= 0 && (!EOL))\r
570      332:       80 91 84 01     lds     r24, 0x0184\r
571      336:       99 27           eor     r25, r25\r
572      338:       87 fd           sbrc    r24, 7\r
573      33a:       90 95           com     r25\r
574      33c:       8c 0f           add     r24, r28\r
575      33e:       9d 1f           adc     r25, r29\r
576      340:       97 fd           sbrc    r25, 7\r
577      342:       15 c0           rjmp    .+42            ; 0x36e <__vector_22+0xb8>\r
578      344:       11 23           and     r17, r17\r
579      346:       99 f4           brne    .+38            ; 0x36e <__vector_22+0xb8>\r
580             {\r
581                 // We have some visible characters\r
582                 c = gTextBuffer[i + gScroll];\r
583      348:       e0 91 84 01     lds     r30, 0x0184\r
584      34c:       ff 27           eor     r31, r31\r
585      34e:       e7 fd           sbrc    r30, 7\r
586      350:       f0 95           com     r31\r
587      352:       ec 0f           add     r30, r28\r
588      354:       fd 1f           adc     r31, r29\r
589      356:       e5 59           subi    r30, 0x95       ; 149\r
590      358:       fe 4f           sbci    r31, 0xFE       ; 254\r
591      35a:       80 81           ld      r24, Z\r
592                 c_flash = c & 0x80 ? 1 : 0;\r
593      35c:       f8 2e           mov     r15, r24\r
594      35e:       ff 1c           adc     r15, r15\r
595      360:       ff 24           eor     r15, r15\r
596      362:       ff 1c           adc     r15, r15\r
597                 c = c & 0x7F;\r
598      364:       8f 77           andi    r24, 0x7F       ; 127\r
599 \r
600                 if (c == '\0')\r
601      366:       21 f4           brne    .+8             ; 0x370 <__vector_22+0xba>\r
602      368:       1c 2f           mov     r17, r28\r
603      36a:       1f 5f           subi    r17, 0xFF       ; 255\r
604      36c:       01 c0           rjmp    .+2             ; 0x370 <__vector_22+0xba>\r
605      36e:       80 e2           ldi     r24, 0x20       ; 32\r
606             else\r
607                 c = ' ';\r
608 \r
609             // Check if this character is flashing\r
610 \r
611             if (c_flash && flash)\r
612      370:       ff 20           and     r15, r15\r
613      372:       21 f0           breq    .+8             ; 0x37c <__vector_22+0xc6>\r
614      374:       94 e0           ldi     r25, 0x04       ; 4\r
615      376:       9e 15           cp      r25, r14\r
616      378:       08 f4           brcc    .+2             ; 0x37c <__vector_22+0xc6>\r
617                 LCD_WriteDigit(' ', i);\r
618      37a:       80 e2           ldi     r24, 0x20       ; 32\r
619             else\r
620                 LCD_WriteDigit(c, i);\r
621      37c:       0e 94 f1 00     call    0x1e2   ; 0x1e2 <LCD_WriteDigit>\r
622      380:       21 96           adiw    r28, 0x01       ; 1\r
623             flash = 0;\r
624         else\r
625             flash = 1;\r
626 \r
627         // Repeat for the six LCD characters\r
628         for (i = 0; i < 6; i++)\r
629      382:       c6 30           cpi     r28, 0x06       ; 6\r
630      384:       d1 05           cpc     r29, r1\r
631      386:       a1 f6           brne    .-88            ; 0x330 <__vector_22+0x7a>\r
632      388:       ac ee           ldi     r26, 0xEC       ; 236\r
633      38a:       b0 e0           ldi     r27, 0x00       ; 0\r
634      38c:       fd 01           movw    r30, r26\r
635      38e:       e5 59           subi    r30, 0x95       ; 149\r
636      390:       ff 4f           sbci    r31, 0xFF       ; 255\r
637                 LCD_WriteDigit(c, i);\r
638         }\r
639 \r
640         // Copy the segment buffer to the real segments\r
641         for (i = 0; i < LCD_REGISTER_COUNT; i++)\r
642             *(pLCDREG + i) = *(LCD_Data+i);\r
643      392:       80 81           ld      r24, Z\r
644      394:       8d 93           st      X+, r24\r
645             else\r
646                 LCD_WriteDigit(c, i);\r
647         }\r
648 \r
649         // Copy the segment buffer to the real segments\r
650         for (i = 0; i < LCD_REGISTER_COUNT; i++)\r
651      396:       81 e0           ldi     r24, 0x01       ; 1\r
652      398:       a0 30           cpi     r26, 0x00       ; 0\r
653      39a:       b8 07           cpc     r27, r24\r
654      39c:       b9 f7           brne    .-18            ; 0x38c <__vector_22+0xd6>\r
655             *(pLCDREG + i) = *(LCD_Data+i);\r
656 \r
657         // Handle colon\r
658         if (gColon)\r
659      39e:       80 91 55 01     lds     r24, 0x0155\r
660      3a2:       88 23           and     r24, r24\r
661      3a4:       21 f0           breq    .+8             ; 0x3ae <__vector_22+0xf8>\r
662             *(pLCDREG + 8) = 0x01;\r
663      3a6:       81 e0           ldi     r24, 0x01       ; 1\r
664      3a8:       80 93 f4 00     sts     0x00F4, r24\r
665      3ac:       02 c0           rjmp    .+4             ; 0x3b2 <__vector_22+0xfc>\r
666         else\r
667             *(pLCDREG + 8) = 0x00;\r
668      3ae:       10 92 f4 00     sts     0x00F4, r1\r
669 \r
670         // If the text scrolled off the display,\r
671         // we have to start over again.\r
672         if (EOL == 1)\r
673      3b2:       11 30           cpi     r17, 0x01       ; 1\r
674      3b4:       11 f4           brne    .+4             ; 0x3ba <__vector_22+0x104>\r
675             gScroll = -6;\r
676      3b6:       8a ef           ldi     r24, 0xFA       ; 250\r
677      3b8:       03 c0           rjmp    .+6             ; 0x3c0 <__vector_22+0x10a>\r
678         else\r
679             gScroll++;\r
680      3ba:       80 91 84 01     lds     r24, 0x0184\r
681      3be:       8f 5f           subi    r24, 0xFF       ; 255\r
682      3c0:       80 93 84 01     sts     0x0184, r24\r
683 \r
684         // No need to update anymore\r
685         gLCD_Update_Required = FALSE;\r
686      3c4:       10 92 52 01     sts     0x0152, r1\r
687     }\r
688 \r
689 \r
690     // LCD_timer is used when scrolling text\r
691     if (LCD_timer == 0)\r
692      3c8:       00 23           and     r16, r16\r
693      3ca:       19 f4           brne    .+6             ; 0x3d2 <__vector_22+0x11c>\r
694     {\r
695 /*        if ((gScroll <= 0) || EOL)\r
696             LCD_timer = LCD_TIMER_SEED/2;\r
697         else*/\r
698             LCD_timer = LCD_TIMER_SEED;\r
699      3cc:       83 e0           ldi     r24, 0x03       ; 3\r
700      3ce:       80 93 00 01     sts     0x0100, r24\r
701     }\r
702 \r
703     // gFlashTimer is used when flashing characters\r
704     if (gFlashTimer == LCD_FLASH_SEED)\r
705      3d2:       80 91 54 01     lds     r24, 0x0154\r
706      3d6:       8a 30           cpi     r24, 0x0A       ; 10\r
707      3d8:       19 f4           brne    .+6             ; 0x3e0 <__vector_22+0x12a>\r
708         gFlashTimer= 0;\r
709      3da:       10 92 54 01     sts     0x0154, r1\r
710      3de:       05 c0           rjmp    .+10            ; 0x3ea <__vector_22+0x134>\r
711     else\r
712         gFlashTimer++;\r
713      3e0:       80 91 54 01     lds     r24, 0x0154\r
714      3e4:       8f 5f           subi    r24, 0xFF       ; 255\r
715      3e6:       80 93 54 01     sts     0x0154, r24\r
716 \r
717 }\r
718      3ea:       ff 91           pop     r31\r
719      3ec:       ef 91           pop     r30\r
720      3ee:       df 91           pop     r29\r
721      3f0:       cf 91           pop     r28\r
722      3f2:       bf 91           pop     r27\r
723      3f4:       af 91           pop     r26\r
724      3f6:       9f 91           pop     r25\r
725      3f8:       8f 91           pop     r24\r
726      3fa:       7f 91           pop     r23\r
727      3fc:       6f 91           pop     r22\r
728      3fe:       5f 91           pop     r21\r
729      400:       4f 91           pop     r20\r
730      402:       3f 91           pop     r19\r
731      404:       2f 91           pop     r18\r
732      406:       1f 91           pop     r17\r
733      408:       0f 91           pop     r16\r
734      40a:       ff 90           pop     r15\r
735      40c:       ef 90           pop     r14\r
736      40e:       0f 90           pop     r0\r
737      410:       0f be           out     0x3f, r0        ; 63\r
738      412:       0f 90           pop     r0\r
739      414:       1f 90           pop     r1\r
740      416:       18 95           reti\r
741 \r
742 00000418 <LCD_puts>:\r
743 *\r
744 *       Purpose :               Writes a string to the LCD\r
745 *\r
746 *****************************************************************************/\r
747 void LCD_puts(char *pStr)\r
748 {\r
749      418:       bc 01           movw    r22, r24\r
750     uint8_t i; // char i;\r
751 \r
752     while (gLCD_Update_Required);      // Wait for access to buffer\r
753      41a:       80 91 52 01     lds     r24, 0x0152\r
754      41e:       88 23           and     r24, r24\r
755      420:       e1 f7           brne    .-8             ; 0x41a <LCD_puts+0x2>\r
756      422:       20 e0           ldi     r18, 0x00       ; 0\r
757      424:       30 e0           ldi     r19, 0x00       ; 0\r
758      426:       06 c0           rjmp    .+12            ; 0x434 <LCD_puts+0x1c>\r
759 \r
760     for (i = 0; pStr[i] && i < TEXTBUFFER_SIZE; i++)\r
761     {\r
762         gTextBuffer[i] = pStr[i];\r
763      428:       f9 01           movw    r30, r18\r
764      42a:       e5 59           subi    r30, 0x95       ; 149\r
765      42c:       fe 4f           sbci    r31, 0xFE       ; 254\r
766      42e:       80 83           st      Z, r24\r
767      430:       2f 5f           subi    r18, 0xFF       ; 255\r
768      432:       3f 4f           sbci    r19, 0xFF       ; 255\r
769      434:       42 2f           mov     r20, r18\r
770 {\r
771     uint8_t i; // char i;\r
772 \r
773     while (gLCD_Update_Required);      // Wait for access to buffer\r
774 \r
775     for (i = 0; pStr[i] && i < TEXTBUFFER_SIZE; i++)\r
776      436:       fb 01           movw    r30, r22\r
777      438:       e2 0f           add     r30, r18\r
778      43a:       f3 1f           adc     r31, r19\r
779      43c:       80 81           ld      r24, Z\r
780      43e:       88 23           and     r24, r24\r
781      440:       19 f0           breq    .+6             ; 0x448 <LCD_puts+0x30>\r
782      442:       29 31           cpi     r18, 0x19       ; 25\r
783      444:       31 05           cpc     r19, r1\r
784      446:       81 f7           brne    .-32            ; 0x428 <LCD_puts+0x10>\r
785     {\r
786         gTextBuffer[i] = pStr[i];\r
787     }\r
788 \r
789     gTextBuffer[i] = '\0';\r
790      448:       e4 2f           mov     r30, r20\r
791      44a:       f0 e0           ldi     r31, 0x00       ; 0\r
792      44c:       e5 59           subi    r30, 0x95       ; 149\r
793      44e:       fe 4f           sbci    r31, 0xFE       ; 254\r
794      450:       10 82           st      Z, r1\r
795 \r
796     if (i > 6)\r
797      452:       47 30           cpi     r20, 0x07       ; 7\r
798      454:       48 f0           brcs    .+18            ; 0x468 <LCD_puts+0x50>\r
799     {\r
800         gScrollMode = 1;        // Scroll if text is longer than display size\r
801      456:       81 e0           ldi     r24, 0x01       ; 1\r
802      458:       80 93 56 01     sts     0x0156, r24\r
803         gScroll = 0;\r
804      45c:       10 92 84 01     sts     0x0184, r1\r
805         gLCD_Start_Scroll_Timer = 3;    //Start-up delay before scrolling the text\r
806      460:       83 e0           ldi     r24, 0x03       ; 3\r
807      462:       80 93 53 01     sts     0x0153, r24\r
808      466:       04 c0           rjmp    .+8             ; 0x470 <LCD_puts+0x58>\r
809     }\r
810     else\r
811     {\r
812         gScrollMode = 0;        \r
813      468:       10 92 56 01     sts     0x0156, r1\r
814         gScroll = 0;\r
815      46c:       10 92 84 01     sts     0x0184, r1\r
816     }\r
817 \r
818     gLCD_Update_Required = 1;\r
819      470:       81 e0           ldi     r24, 0x01       ; 1\r
820      472:       80 93 52 01     sts     0x0152, r24\r
821 }\r
822      476:       08 95           ret\r
823 \r
824 00000478 <LCD_Clear>:\r
825 *\r
826 *       Purpose :               Clear the LCD\r
827 *\r
828 *****************************************************************************/\r
829 void LCD_Clear(void)\r
830 {\r
831      478:       80 e0           ldi     r24, 0x00       ; 0\r
832      47a:       90 e0           ldi     r25, 0x00       ; 0\r
833     uint8_t i; // char i;\r
834 \r
835     for (i=0; i<TEXTBUFFER_SIZE; i++)\r
836         gTextBuffer[i] = ' ';\r
837      47c:       20 e2           ldi     r18, 0x20       ; 32\r
838      47e:       fc 01           movw    r30, r24\r
839      480:       e5 59           subi    r30, 0x95       ; 149\r
840      482:       fe 4f           sbci    r31, 0xFE       ; 254\r
841      484:       20 83           st      Z, r18\r
842      486:       01 96           adiw    r24, 0x01       ; 1\r
843 *****************************************************************************/\r
844 void LCD_Clear(void)\r
845 {\r
846     uint8_t i; // char i;\r
847 \r
848     for (i=0; i<TEXTBUFFER_SIZE; i++)\r
849      488:       89 31           cpi     r24, 0x19       ; 25\r
850      48a:       91 05           cpc     r25, r1\r
851      48c:       c1 f7           brne    .-16            ; 0x47e <LCD_Clear+0x6>\r
852         gTextBuffer[i] = ' ';\r
853 \r
854     gTextBuffer[0] = '\0'; // mt 5/2007\r
855      48e:       10 92 6b 01     sts     0x016B, r1\r
856 }\r
857      492:       08 95           ret\r
858 \r
859 00000494 <LCD_Colon>:\r
860 *       Purpose :               Enable/disable colons on the LCD\r
861 *\r
862 *****************************************************************************/\r
863 void LCD_Colon(char show)\r
864 {\r
865     gColon = show;\r
866      494:       80 93 55 01     sts     0x0155, r24\r
867 }\r
868      498:       08 95           ret\r
869 \r
870 0000049a <LCD_UpdateRequired>:\r
871 *\r
872 *       Purpose :               Tells the LCD that there is new data to be presented\r
873 *\r
874 *****************************************************************************/\r
875 void LCD_UpdateRequired(char update, char scrollmode)\r
876 {\r
877      49a:       98 2f           mov     r25, r24\r
878 \r
879     while (gLCD_Update_Required);\r
880      49c:       80 91 52 01     lds     r24, 0x0152\r
881      4a0:       88 23           and     r24, r24\r
882      4a2:       e1 f7           brne    .-8             ; 0x49c <LCD_UpdateRequired+0x2>\r
883     \r
884     gScrollMode = scrollmode;\r
885      4a4:       60 93 56 01     sts     0x0156, r22\r
886     gScroll = 0;\r
887      4a8:       10 92 84 01     sts     0x0184, r1\r
888 \r
889     gLCD_Update_Required = update;\r
890      4ac:       90 93 52 01     sts     0x0152, r25\r
891 }\r
892      4b0:       08 95           ret\r
893 \r
894 000004b2 <LCD_FlashReset>:\r
895 *       Purpose :               This function resets the blinking cycle of a flashing digit\r
896 *\r
897 *****************************************************************************/\r
898 void LCD_FlashReset(void)\r
899 {\r
900     gFlashTimer = 0;\r
901      4b2:       10 92 54 01     sts     0x0154, r1\r
902 }\r
903      4b6:       08 95           ret\r
904 \r
905 000004b8 <LCD_putc>:\r
906 \r
907 \r
908 \r
909 void LCD_putc(uint8_t digit, char character)\r
910 {\r
911     if (digit < TEXTBUFFER_SIZE)\r
912      4b8:       89 31           cpi     r24, 0x19       ; 25\r
913      4ba:       28 f4           brcc    .+10            ; 0x4c6 <LCD_putc+0xe>\r
914         gTextBuffer[digit] = character;\r
915      4bc:       e8 2f           mov     r30, r24\r
916      4be:       f0 e0           ldi     r31, 0x00       ; 0\r
917      4c0:       e5 59           subi    r30, 0x95       ; 149\r
918      4c2:       fe 4f           sbci    r31, 0xFE       ; 254\r
919      4c4:       60 83           st      Z, r22\r
920      4c6:       08 95           ret\r
921 \r
922 000004c8 <LCD_ShowTime>:\r
923 }\r
924 \r
925 void LCD_ShowTime(uint32 tmr)\r
926 {\r
927      4c8:       6f 92           push    r6\r
928      4ca:       7f 92           push    r7\r
929      4cc:       8f 92           push    r8\r
930      4ce:       9f 92           push    r9\r
931      4d0:       af 92           push    r10\r
932      4d2:       bf 92           push    r11\r
933      4d4:       cf 92           push    r12\r
934      4d6:       df 92           push    r13\r
935      4d8:       ef 92           push    r14\r
936      4da:       ff 92           push    r15\r
937      4dc:       0f 93           push    r16\r
938      4de:       1f 93           push    r17\r
939      4e0:       df 93           push    r29\r
940      4e2:       cf 93           push    r28\r
941      4e4:       00 d0           rcall   .+0             ; 0x4e6 <LCD_ShowTime+0x1e>\r
942      4e6:       00 d0           rcall   .+0             ; 0x4e8 <LCD_ShowTime+0x20>\r
943      4e8:       00 d0           rcall   .+0             ; 0x4ea <LCD_ShowTime+0x22>\r
944      4ea:       cd b7           in      r28, 0x3d       ; 61\r
945      4ec:       de b7           in      r29, 0x3e       ; 62\r
946      4ee:       5b 01           movw    r10, r22\r
947      4f0:       6c 01           movw    r12, r24\r
948         uint hours = tmr / 360000;\r
949      4f2:       20 e4           ldi     r18, 0x40       ; 64\r
950      4f4:       3e e7           ldi     r19, 0x7E       ; 126\r
951      4f6:       45 e0           ldi     r20, 0x05       ; 5\r
952      4f8:       50 e0           ldi     r21, 0x00       ; 0\r
953      4fa:       0e 94 30 08     call    0x1060  ; 0x1060 <__udivmodsi4>\r
954      4fe:       39 01           movw    r6, r18\r
955      500:       4a 01           movw    r8, r20\r
956         tmr = tmr - hours*360000;\r
957      502:       b9 01           movw    r22, r18\r
958      504:       80 e0           ldi     r24, 0x00       ; 0\r
959      506:       90 e0           ldi     r25, 0x00       ; 0\r
960      508:       20 ec           ldi     r18, 0xC0       ; 192\r
961      50a:       31 e8           ldi     r19, 0x81       ; 129\r
962      50c:       4a ef           ldi     r20, 0xFA       ; 250\r
963      50e:       5f ef           ldi     r21, 0xFF       ; 255\r
964      510:       0e 94 fd 07     call    0xffa   ; 0xffa <__mulsi3>\r
965      514:       7b 01           movw    r14, r22\r
966      516:       8c 01           movw    r16, r24\r
967      518:       ea 0c           add     r14, r10\r
968      51a:       fb 1c           adc     r15, r11\r
969      51c:       0c 1d           adc     r16, r12\r
970      51e:       1d 1d           adc     r17, r13\r
971         uint minutes = tmr / 6000;\r
972      520:       c8 01           movw    r24, r16\r
973      522:       b7 01           movw    r22, r14\r
974      524:       20 e7           ldi     r18, 0x70       ; 112\r
975      526:       37 e1           ldi     r19, 0x17       ; 23\r
976      528:       40 e0           ldi     r20, 0x00       ; 0\r
977      52a:       50 e0           ldi     r21, 0x00       ; 0\r
978      52c:       0e 94 30 08     call    0x1060  ; 0x1060 <__udivmodsi4>\r
979      530:       59 01           movw    r10, r18\r
980      532:       6a 01           movw    r12, r20\r
981         tmr = tmr - minutes*6000;\r
982         uint seconds = tmr / 100;\r
983      534:       80 e7           ldi     r24, 0x70       ; 112\r
984      536:       97 e1           ldi     r25, 0x17       ; 23\r
985      538:       9c 01           movw    r18, r24\r
986      53a:       2a 9d           mul     r18, r10\r
987      53c:       c0 01           movw    r24, r0\r
988      53e:       2b 9d           mul     r18, r11\r
989      540:       90 0d           add     r25, r0\r
990      542:       3a 9d           mul     r19, r10\r
991      544:       90 0d           add     r25, r0\r
992      546:       11 24           eor     r1, r1\r
993      548:       a0 e0           ldi     r26, 0x00       ; 0\r
994      54a:       b0 e0           ldi     r27, 0x00       ; 0\r
995      54c:       e8 1a           sub     r14, r24\r
996      54e:       f9 0a           sbc     r15, r25\r
997      550:       0a 0b           sbc     r16, r26\r
998      552:       1b 0b           sbc     r17, r27\r
999      554:       c8 01           movw    r24, r16\r
1000      556:       b7 01           movw    r22, r14\r
1001      558:       24 e6           ldi     r18, 0x64       ; 100\r
1002      55a:       30 e0           ldi     r19, 0x00       ; 0\r
1003      55c:       40 e0           ldi     r20, 0x00       ; 0\r
1004      55e:       50 e0           ldi     r21, 0x00       ; 0\r
1005      560:       0e 94 30 08     call    0x1060  ; 0x1060 <__udivmodsi4>\r
1006      564:       89 01           movw    r16, r18\r
1007      566:       9a 01           movw    r18, r20\r
1008         tmr = tmr - seconds*100;\r
1009         \r
1010         \r
1011         uint8 digits[6];\r
1012         digits[0] = hours/10;\r
1013      568:       c3 01           movw    r24, r6\r
1014      56a:       6a e0           ldi     r22, 0x0A       ; 10\r
1015      56c:       70 e0           ldi     r23, 0x00       ; 0\r
1016      56e:       0e 94 1c 08     call    0x1038  ; 0x1038 <__udivmodhi4>\r
1017      572:       69 83           std     Y+1, r22        ; 0x01\r
1018         digits[1] = hours%10;\r
1019      574:       c3 01           movw    r24, r6\r
1020      576:       6a e0           ldi     r22, 0x0A       ; 10\r
1021      578:       70 e0           ldi     r23, 0x00       ; 0\r
1022      57a:       0e 94 1c 08     call    0x1038  ; 0x1038 <__udivmodhi4>\r
1023      57e:       8a 83           std     Y+2, r24        ; 0x02\r
1024         digits[2] = minutes/10;\r
1025      580:       c5 01           movw    r24, r10\r
1026      582:       6a e0           ldi     r22, 0x0A       ; 10\r
1027      584:       70 e0           ldi     r23, 0x00       ; 0\r
1028      586:       0e 94 1c 08     call    0x1038  ; 0x1038 <__udivmodhi4>\r
1029      58a:       6b 83           std     Y+3, r22        ; 0x03\r
1030         digits[3] = minutes%10;\r
1031      58c:       c5 01           movw    r24, r10\r
1032      58e:       6a e0           ldi     r22, 0x0A       ; 10\r
1033      590:       70 e0           ldi     r23, 0x00       ; 0\r
1034      592:       0e 94 1c 08     call    0x1038  ; 0x1038 <__udivmodhi4>\r
1035      596:       8c 83           std     Y+4, r24        ; 0x04\r
1036         digits[4] = seconds/10;\r
1037      598:       c8 01           movw    r24, r16\r
1038      59a:       6a e0           ldi     r22, 0x0A       ; 10\r
1039      59c:       70 e0           ldi     r23, 0x00       ; 0\r
1040      59e:       0e 94 1c 08     call    0x1038  ; 0x1038 <__udivmodhi4>\r
1041      5a2:       6d 83           std     Y+5, r22        ; 0x05\r
1042         digits[5] = seconds%10;\r
1043      5a4:       c8 01           movw    r24, r16\r
1044      5a6:       6a e0           ldi     r22, 0x0A       ; 10\r
1045      5a8:       70 e0           ldi     r23, 0x00       ; 0\r
1046      5aa:       0e 94 1c 08     call    0x1038  ; 0x1038 <__udivmodhi4>\r
1047      5ae:       8e 83           std     Y+6, r24        ; 0x06\r
1048      5b0:       20 e0           ldi     r18, 0x00       ; 0\r
1049      5b2:       30 e0           ldi     r19, 0x00       ; 0\r
1050 \r
1051         for (uint8 i = 0; i < 6; ++i)\r
1052         {\r
1053                 LCD_putc(i, '0' + digits[i]);\r
1054      5b4:       ae 01           movw    r20, r28\r
1055      5b6:       4f 5f           subi    r20, 0xFF       ; 255\r
1056      5b8:       5f 4f           sbci    r21, 0xFF       ; 255\r
1057      5ba:       fa 01           movw    r30, r20\r
1058      5bc:       e2 0f           add     r30, r18\r
1059      5be:       f3 1f           adc     r31, r19\r
1060      5c0:       80 81           ld      r24, Z\r
1061      5c2:       80 5d           subi    r24, 0xD0       ; 208\r
1062 \r
1063 \r
1064 void LCD_putc(uint8_t digit, char character)\r
1065 {\r
1066     if (digit < TEXTBUFFER_SIZE)\r
1067         gTextBuffer[digit] = character;\r
1068      5c4:       f9 01           movw    r30, r18\r
1069      5c6:       e5 59           subi    r30, 0x95       ; 149\r
1070      5c8:       fe 4f           sbci    r31, 0xFE       ; 254\r
1071      5ca:       80 83           st      Z, r24\r
1072      5cc:       2f 5f           subi    r18, 0xFF       ; 255\r
1073      5ce:       3f 4f           sbci    r19, 0xFF       ; 255\r
1074         digits[2] = minutes/10;\r
1075         digits[3] = minutes%10;\r
1076         digits[4] = seconds/10;\r
1077         digits[5] = seconds%10;\r
1078 \r
1079         for (uint8 i = 0; i < 6; ++i)\r
1080      5d0:       26 30           cpi     r18, 0x06       ; 6\r
1081      5d2:       31 05           cpc     r19, r1\r
1082      5d4:       91 f7           brne    .-28            ; 0x5ba <__stack+0xbb>\r
1083 \r
1084 \r
1085 void LCD_putc(uint8_t digit, char character)\r
1086 {\r
1087     if (digit < TEXTBUFFER_SIZE)\r
1088         gTextBuffer[digit] = character;\r
1089      5d6:       10 92 71 01     sts     0x0171, r1\r
1090 *\r
1091 *****************************************************************************/\r
1092 void LCD_UpdateRequired(char update, char scrollmode)\r
1093 {\r
1094 \r
1095     while (gLCD_Update_Required);\r
1096      5da:       80 91 52 01     lds     r24, 0x0152\r
1097      5de:       88 23           and     r24, r24\r
1098      5e0:       e1 f7           brne    .-8             ; 0x5da <__stack+0xdb>\r
1099     \r
1100     gScrollMode = scrollmode;\r
1101      5e2:       10 92 56 01     sts     0x0156, r1\r
1102     gScroll = 0;\r
1103      5e6:       10 92 84 01     sts     0x0184, r1\r
1104 \r
1105     gLCD_Update_Required = update;\r
1106      5ea:       81 e0           ldi     r24, 0x01       ; 1\r
1107      5ec:       80 93 52 01     sts     0x0152, r24\r
1108         }\r
1109         LCD_putc(6, '\0');\r
1110 \r
1111 \r
1112         LCD_UpdateRequired(1, 0);\r
1113 }\r
1114      5f0:       26 96           adiw    r28, 0x06       ; 6\r
1115      5f2:       0f b6           in      r0, 0x3f        ; 63\r
1116      5f4:       f8 94           cli\r
1117      5f6:       de bf           out     0x3e, r29       ; 62\r
1118      5f8:       0f be           out     0x3f, r0        ; 63\r
1119      5fa:       cd bf           out     0x3d, r28       ; 61\r
1120      5fc:       cf 91           pop     r28\r
1121      5fe:       df 91           pop     r29\r
1122      600:       1f 91           pop     r17\r
1123      602:       0f 91           pop     r16\r
1124      604:       ff 90           pop     r15\r
1125      606:       ef 90           pop     r14\r
1126      608:       df 90           pop     r13\r
1127      60a:       cf 90           pop     r12\r
1128      60c:       bf 90           pop     r11\r
1129      60e:       af 90           pop     r10\r
1130      610:       9f 90           pop     r9\r
1131      612:       8f 90           pop     r8\r
1132      614:       7f 90           pop     r7\r
1133      616:       6f 90           pop     r6\r
1134      618:       08 95           ret\r
1135 \r
1136 0000061a <LCD_printf>:\r
1137 }\r
1138 \r
1139 #include <stdarg.h>\r
1140 #include "printf.h"\r
1141 int LCD_printf(const char * format, ...)\r
1142 {\r
1143      61a:       ef 92           push    r14\r
1144      61c:       ff 92           push    r15\r
1145      61e:       0f 93           push    r16\r
1146      620:       1f 93           push    r17\r
1147      622:       df 93           push    r29\r
1148      624:       cf 93           push    r28\r
1149      626:       cd b7           in      r28, 0x3d       ; 61\r
1150      628:       de b7           in      r29, 0x3e       ; 62\r
1151      62a:       69 97           sbiw    r28, 0x19       ; 25\r
1152      62c:       0f b6           in      r0, 0x3f        ; 63\r
1153      62e:       f8 94           cli\r
1154      630:       de bf           out     0x3e, r29       ; 62\r
1155      632:       0f be           out     0x3f, r0        ; 63\r
1156      634:       cd bf           out     0x3d, r28       ; 61\r
1157      636:       fe 01           movw    r30, r28\r
1158      638:       b2 96           adiw    r30, 0x22       ; 34\r
1159      63a:       61 91           ld      r22, Z+\r
1160      63c:       71 91           ld      r23, Z+\r
1161         char buffer[TEXTBUFFER_SIZE];\r
1162         va_list args;\r
1163         va_start(args, format);\r
1164         int result = vsprintf(buffer, format, args);\r
1165      63e:       8e 01           movw    r16, r28\r
1166      640:       0f 5f           subi    r16, 0xFF       ; 255\r
1167      642:       1f 4f           sbci    r17, 0xFF       ; 255\r
1168      644:       c8 01           movw    r24, r16\r
1169      646:       af 01           movw    r20, r30\r
1170      648:       0e 94 41 05     call    0xa82   ; 0xa82 <vsprintf>\r
1171      64c:       f8 2e           mov     r15, r24\r
1172      64e:       e9 2e           mov     r14, r25\r
1173         LCD_puts(buffer);\r
1174      650:       c8 01           movw    r24, r16\r
1175      652:       0e 94 0c 02     call    0x418   ; 0x418 <LCD_puts>\r
1176         return result;\r
1177 }\r
1178      656:       8f 2d           mov     r24, r15\r
1179      658:       9e 2d           mov     r25, r14\r
1180      65a:       69 96           adiw    r28, 0x19       ; 25\r
1181      65c:       0f b6           in      r0, 0x3f        ; 63\r
1182      65e:       f8 94           cli\r
1183      660:       de bf           out     0x3e, r29       ; 62\r
1184      662:       0f be           out     0x3f, r0        ; 63\r
1185      664:       cd bf           out     0x3d, r28       ; 61\r
1186      666:       cf 91           pop     r28\r
1187      668:       df 91           pop     r29\r
1188      66a:       1f 91           pop     r17\r
1189      66c:       0f 91           pop     r16\r
1190      66e:       ff 90           pop     r15\r
1191      670:       ef 90           pop     r14\r
1192      672:       08 95           ret\r
1193 \r
1194 00000674 <Delay>:\r
1195 *\r
1196 *   Purpose :       Delay-loop\r
1197 *\r
1198 *****************************************************************************/\r
1199 void Delay(unsigned int millisec)\r
1200 {\r
1201      674:       06 c0           rjmp    .+12            ; 0x682 <Delay+0xe>\r
1202         // mt, int i did not work in the simulator:  int i; \r
1203         uint8_t i;\r
1204 \r
1205         while (millisec--) {\r
1206      676:       20 e0           ldi     r18, 0x00       ; 0\r
1207                 for (i=0; i<125; i++) {\r
1208                         asm volatile ("nop"::);\r
1209      678:       00 00           nop\r
1210 {\r
1211         // mt, int i did not work in the simulator:  int i; \r
1212         uint8_t i;\r
1213 \r
1214         while (millisec--) {\r
1215                 for (i=0; i<125; i++) {\r
1216      67a:       2f 5f           subi    r18, 0xFF       ; 255\r
1217      67c:       2d 37           cpi     r18, 0x7D       ; 125\r
1218      67e:       e1 f7           brne    .-8             ; 0x678 <Delay+0x4>\r
1219      680:       01 97           sbiw    r24, 0x01       ; 1\r
1220 void Delay(unsigned int millisec)\r
1221 {\r
1222         // mt, int i did not work in the simulator:  int i; \r
1223         uint8_t i;\r
1224 \r
1225         while (millisec--) {\r
1226      682:       00 97           sbiw    r24, 0x00       ; 0\r
1227      684:       c1 f7           brne    .-16            ; 0x676 <Delay+0x2>\r
1228                 for (i=0; i<125; i++) {\r
1229                         asm volatile ("nop"::);\r
1230                 }\r
1231         }\r
1232 }\r
1233      686:       08 95           ret\r
1234 \r
1235 00000688 <OSCCAL_calibration>:\r
1236 {\r
1237     unsigned char calibrate = FALSE;\r
1238     int temp;\r
1239     unsigned char tempL;\r
1240 \r
1241     CLKPR = (1<<CLKPCE);        // set Clock Prescaler Change Enable\r
1242      688:       80 e8           ldi     r24, 0x80       ; 128\r
1243      68a:       80 93 61 00     sts     0x0061, r24\r
1244     // set prescaler = 8, Inter RC 8Mhz / 8 = 1Mhz\r
1245     CLKPR = (1<<CLKPS1) | (1<<CLKPS0);\r
1246      68e:       83 e0           ldi     r24, 0x03       ; 3\r
1247      690:       80 93 61 00     sts     0x0061, r24\r
1248     \r
1249     TIMSK2 = 0;             //disable OCIE2A and TOIE2\r
1250      694:       10 92 70 00     sts     0x0070, r1\r
1251 \r
1252     ASSR = (1<<AS2);        //select asynchronous operation of timer2 (32,768kHz)\r
1253      698:       88 e0           ldi     r24, 0x08       ; 8\r
1254      69a:       80 93 b6 00     sts     0x00B6, r24\r
1255     \r
1256     OCR2A = 200;            // set timer2 compare value \r
1257      69e:       88 ec           ldi     r24, 0xC8       ; 200\r
1258      6a0:       80 93 b3 00     sts     0x00B3, r24\r
1259 \r
1260     TIMSK0 = 0;             // delete any interrupt sources\r
1261      6a4:       10 92 6e 00     sts     0x006E, r1\r
1262         \r
1263     TCCR1B = (1<<CS10);     // start timer1 with no prescaling\r
1264      6a8:       81 e0           ldi     r24, 0x01       ; 1\r
1265      6aa:       80 93 81 00     sts     0x0081, r24\r
1266     TCCR2A = (1<<CS20);     // start timer2 with no prescaling\r
1267      6ae:       80 93 b0 00     sts     0x00B0, r24\r
1268 \r
1269     while((ASSR & 0x01) | (ASSR & 0x04));       //wait for TCN2UB and TCR2UB to be cleared\r
1270      6b2:       20 91 b6 00     lds     r18, 0x00B6\r
1271      6b6:       80 91 b6 00     lds     r24, 0x00B6\r
1272      6ba:       90 e0           ldi     r25, 0x00       ; 0\r
1273      6bc:       84 70           andi    r24, 0x04       ; 4\r
1274      6be:       90 70           andi    r25, 0x00       ; 0\r
1275      6c0:       30 e0           ldi     r19, 0x00       ; 0\r
1276      6c2:       21 70           andi    r18, 0x01       ; 1\r
1277      6c4:       30 70           andi    r19, 0x00       ; 0\r
1278      6c6:       82 2b           or      r24, r18\r
1279      6c8:       93 2b           or      r25, r19\r
1280      6ca:       89 2b           or      r24, r25\r
1281      6cc:       91 f7           brne    .-28            ; 0x6b2 <OSCCAL_calibration+0x2a>\r
1282 \r
1283     Delay(1000);    // wait for external crystal to stabilise\r
1284      6ce:       88 ee           ldi     r24, 0xE8       ; 232\r
1285      6d0:       93 e0           ldi     r25, 0x03       ; 3\r
1286      6d2:       0e 94 3a 03     call    0x674   ; 0x674 <Delay>\r
1287     \r
1288     while(!calibrate)\r
1289     {\r
1290         cli(); // mt __disable_interrupt();  // disable global interrupt\r
1291         \r
1292         TIFR1 = 0xFF;   // delete TIFR1 flags\r
1293      6d6:       4f ef           ldi     r20, 0xFF       ; 255\r
1294     \r
1295         if (temp > 6250)\r
1296         {\r
1297             OSCCAL--;   // the internRC oscillator runs to fast, decrease the OSCCAL\r
1298         }\r
1299         else if (temp < 6120)\r
1300      6d8:       51 e0           ldi     r21, 0x01       ; 1\r
1301 \r
1302     Delay(1000);    // wait for external crystal to stabilise\r
1303     \r
1304     while(!calibrate)\r
1305     {\r
1306         cli(); // mt __disable_interrupt();  // disable global interrupt\r
1307      6da:       f8 94           cli\r
1308         \r
1309         TIFR1 = 0xFF;   // delete TIFR1 flags\r
1310      6dc:       46 bb           out     0x16, r20       ; 22\r
1311         TIFR2 = 0xFF;   // delete TIFR2 flags\r
1312      6de:       47 bb           out     0x17, r20       ; 23\r
1313         \r
1314         TCNT1H = 0;     // clear timer1 counter\r
1315      6e0:       10 92 85 00     sts     0x0085, r1\r
1316         TCNT1L = 0;\r
1317      6e4:       10 92 84 00     sts     0x0084, r1\r
1318         TCNT2 = 0;      // clear timer2 counter\r
1319      6e8:       10 92 b2 00     sts     0x00B2, r1\r
1320            \r
1321         // shc/mt while ( !(TIFR2 && (1<<OCF2A)) );   // wait for timer2 compareflag    \r
1322         while ( !(TIFR2 & (1<<OCF2A)) );   // wait for timer2 compareflag\r
1323      6ec:       b9 9b           sbis    0x17, 1 ; 23\r
1324      6ee:       fe cf           rjmp    .-4             ; 0x6ec <OSCCAL_calibration+0x64>\r
1325 \r
1326         TCCR1B = 0; // stop timer1\r
1327      6f0:       10 92 81 00     sts     0x0081, r1\r
1328 \r
1329         sei(); // __enable_interrupt();  // enable global interrupt\r
1330      6f4:       78 94           sei\r
1331     \r
1332         // shc/mt if ( (TIFR1 && (1<<TOV1)) )\r
1333         if ( (TIFR1 & (1<<TOV1)) )\r
1334      6f6:       b0 99           sbic    0x16, 0 ; 22\r
1335      6f8:       17 c0           rjmp    .+46            ; 0x728 <OSCCAL_calibration+0xa0>\r
1336         {\r
1337             temp = 0xFFFF;      // if timer1 overflows, set the temp to 0xFFFF\r
1338         }\r
1339         else\r
1340         {   // read out the timer1 counter value\r
1341             tempL = TCNT1L;\r
1342      6fa:       90 91 84 00     lds     r25, 0x0084\r
1343             temp = TCNT1H;\r
1344      6fe:       80 91 85 00     lds     r24, 0x0085\r
1345             temp = (temp << 8);\r
1346      702:       38 2f           mov     r19, r24\r
1347      704:       20 e0           ldi     r18, 0x00       ; 0\r
1348             temp += tempL;\r
1349      706:       b9 01           movw    r22, r18\r
1350      708:       69 0f           add     r22, r25\r
1351      70a:       71 1d           adc     r23, r1\r
1352      70c:       cb 01           movw    r24, r22\r
1353         }\r
1354     \r
1355         if (temp > 6250)\r
1356      70e:       78 e1           ldi     r23, 0x18       ; 24\r
1357      710:       8b 36           cpi     r24, 0x6B       ; 107\r
1358      712:       97 07           cpc     r25, r23\r
1359      714:       24 f0           brlt    .+8             ; 0x71e <OSCCAL_calibration+0x96>\r
1360         {\r
1361             OSCCAL--;   // the internRC oscillator runs to fast, decrease the OSCCAL\r
1362      716:       80 91 66 00     lds     r24, 0x0066\r
1363      71a:       81 50           subi    r24, 0x01       ; 1\r
1364      71c:       08 c0           rjmp    .+16            ; 0x72e <OSCCAL_calibration+0xa6>\r
1365         }\r
1366         else if (temp < 6120)\r
1367      71e:       88 5e           subi    r24, 0xE8       ; 232\r
1368      720:       97 41           sbci    r25, 0x17       ; 23\r
1369      722:       14 f0           brlt    .+4             ; 0x728 <OSCCAL_calibration+0xa0>\r
1370      724:       81 e0           ldi     r24, 0x01       ; 1\r
1371      726:       06 c0           rjmp    .+12            ; 0x734 <OSCCAL_calibration+0xac>\r
1372         {\r
1373             OSCCAL++;   // the internRC oscillator runs to slow, increase the OSCCAL\r
1374      728:       80 91 66 00     lds     r24, 0x0066\r
1375      72c:       8f 5f           subi    r24, 0xFF       ; 255\r
1376      72e:       80 93 66 00     sts     0x0066, r24\r
1377      732:       80 e0           ldi     r24, 0x00       ; 0\r
1378         }\r
1379         else\r
1380             calibrate = TRUE;   // the interRC is correct\r
1381 \r
1382         TCCR1B = (1<<CS10); // start timer1\r
1383      734:       50 93 81 00     sts     0x0081, r21\r
1384 \r
1385     while((ASSR & 0x01) | (ASSR & 0x04));       //wait for TCN2UB and TCR2UB to be cleared\r
1386 \r
1387     Delay(1000);    // wait for external crystal to stabilise\r
1388     \r
1389     while(!calibrate)\r
1390      738:       88 23           and     r24, r24\r
1391      73a:       79 f2           breq    .-98            ; 0x6da <OSCCAL_calibration+0x52>\r
1392         else\r
1393             calibrate = TRUE;   // the interRC is correct\r
1394 \r
1395         TCCR1B = (1<<CS10); // start timer1\r
1396     }\r
1397 }\r
1398      73c:       08 95           ret\r
1399 \r
1400 0000073e <Initialization>:\r
1401 *   Purpose :       Initializate the different modules\r
1402 *\r
1403 *****************************************************************************/\r
1404 void Initialization(void)\r
1405 {\r
1406     OSCCAL_calibration();       // calibrate the OSCCAL byte\r
1407      73e:       0e 94 44 03     call    0x688   ; 0x688 <OSCCAL_calibration>\r
1408         \r
1409     CLKPR = (1<<CLKPCE);        // set Clock Prescaler Change Enable\r
1410      742:       e1 e6           ldi     r30, 0x61       ; 97\r
1411      744:       f0 e0           ldi     r31, 0x00       ; 0\r
1412      746:       80 e8           ldi     r24, 0x80       ; 128\r
1413      748:       80 83           st      Z, r24\r
1414 \r
1415     // set prescaler = 8, Inter RC 8Mhz / 8 = 1Mhz\r
1416     CLKPR = (1<<CLKPS1) | (1<<CLKPS0);\r
1417      74a:       83 e0           ldi     r24, 0x03       ; 3\r
1418      74c:       80 83           st      Z, r24\r
1419 \r
1420     Timer0_Init();              // Used when playing music etc.\r
1421      74e:       0e 94 f3 03     call    0x7e6   ; 0x7e6 <Timer0_Init>\r
1422 \r
1423     USART_Init(UART_4800);      // Baud rate = 4800bps\r
1424      752:       8c e0           ldi     r24, 0x0C       ; 12\r
1425      754:       90 e0           ldi     r25, 0x00       ; 0\r
1426      756:       0e 94 25 04     call    0x84a   ; 0x84a <USART_Init>\r
1427         \r
1428     LCD_Init();                 // initialize the LCD\r
1429      75a:       0e 94 40 01     call    0x280   ; 0x280 <LCD_Init>\r
1430 \r
1431 \r
1432         //Disable JTAG to use ADC4-7\r
1433         MCUCR |= ( 1 <<JTD );\r
1434      75e:       85 b7           in      r24, 0x35       ; 53\r
1435      760:       80 68           ori     r24, 0x80       ; 128\r
1436      762:       85 bf           out     0x35, r24       ; 53\r
1437         MCUCR |= ( 1 <<JTD );\r
1438      764:       85 b7           in      r24, 0x35       ; 53\r
1439      766:       80 68           ori     r24, 0x80       ; 128\r
1440      768:       85 bf           out     0x35, r24       ; 53\r
1441 \r
1442 \r
1443 \r
1444 \r
1445 \r
1446         setup.adc_averages = 8;\r
1447      76a:       88 e0           ldi     r24, 0x08       ; 8\r
1448      76c:       90 e0           ldi     r25, 0x00       ; 0\r
1449      76e:       90 93 88 01     sts     0x0188, r25\r
1450      772:       80 93 87 01     sts     0x0187, r24\r
1451         setup.poll_delay = 100;\r
1452      776:       84 e6           ldi     r24, 0x64       ; 100\r
1453      778:       90 e0           ldi     r25, 0x00       ; 0\r
1454      77a:       90 93 86 01     sts     0x0186, r25\r
1455      77e:       80 93 85 01     sts     0x0185, r24\r
1456         setup.poll_timeout = (uint32)(-1);\r
1457      782:       8f ef           ldi     r24, 0xFF       ; 255\r
1458      784:       9f ef           ldi     r25, 0xFF       ; 255\r
1459      786:       af ef           ldi     r26, 0xFF       ; 255\r
1460      788:       bf ef           ldi     r27, 0xFF       ; 255\r
1461      78a:       80 93 89 01     sts     0x0189, r24\r
1462      78e:       90 93 8a 01     sts     0x018A, r25\r
1463      792:       a0 93 8b 01     sts     0x018B, r26\r
1464      796:       b0 93 8c 01     sts     0x018C, r27\r
1465         setup.elapsed_time = 0;\r
1466      79a:       10 92 8d 01     sts     0x018D, r1\r
1467      79e:       10 92 8e 01     sts     0x018E, r1\r
1468      7a2:       10 92 8f 01     sts     0x018F, r1\r
1469      7a6:       10 92 90 01     sts     0x0190, r1\r
1470         setup.dac_value = 0;\r
1471      7aa:       10 92 92 01     sts     0x0192, r1\r
1472      7ae:       10 92 91 01     sts     0x0191, r1\r
1473 }\r
1474      7b2:       08 95           ret\r
1475 \r
1476 000007b4 <main>:\r
1477 {    \r
1478 \r
1479 \r
1480 \r
1481     // Program initalization\r
1482         Initialization();  \r
1483      7b4:       0e 94 9f 03     call    0x73e   ; 0x73e <Initialization>\r
1484         sei(); // mt __enable_interrupt();\r
1485      7b8:       78 94           sei\r
1486 \r
1487 \r
1488         LCD_puts("hello"); \r
1489      7ba:       82 e0           ldi     r24, 0x02       ; 2\r
1490      7bc:       91 e0           ldi     r25, 0x01       ; 1\r
1491      7be:       0e 94 0c 02     call    0x418   ; 0x418 <LCD_puts>\r
1492 \r
1493         USART_printf("\r\n# hello\r\n");\r
1494      7c2:       00 d0           rcall   .+0             ; 0x7c4 <main+0x10>\r
1495      7c4:       88 e0           ldi     r24, 0x08       ; 8\r
1496      7c6:       91 e0           ldi     r25, 0x01       ; 1\r
1497      7c8:       ed b7           in      r30, 0x3d       ; 61\r
1498      7ca:       fe b7           in      r31, 0x3e       ; 62\r
1499      7cc:       92 83           std     Z+2, r25        ; 0x02\r
1500      7ce:       81 83           std     Z+1, r24        ; 0x01\r
1501      7d0:       0e 94 4c 04     call    0x898   ; 0x898 <USART_printf>\r
1502         Delay(1000);\r
1503      7d4:       0f 90           pop     r0\r
1504      7d6:       0f 90           pop     r0\r
1505      7d8:       88 ee           ldi     r24, 0xE8       ; 232\r
1506      7da:       93 e0           ldi     r25, 0x03       ; 3\r
1507      7dc:       0e 94 3a 03     call    0x674   ; 0x674 <Delay>\r
1508 \r
1509 \r
1510         for (;;)\r
1511         {\r
1512                 \r
1513                 ParseCommand();\r
1514      7e0:       0e 94 ca 05     call    0xb94   ; 0xb94 <ParseCommand>\r
1515      7e4:       fd cf           rjmp    .-6             ; 0x7e0 <main+0x2c>\r
1516 \r
1517 000007e6 <Timer0_Init>:\r
1518 *****************************************************************************/\r
1519 void Timer0_Init(void)\r
1520 {\r
1521     //mt char i;\r
1522   //  uint8_t i;\r
1523         DDRB |= (1<<SCK);\r
1524      7e6:       23 9a           sbi     0x04, 3 ; 4\r
1525 \r
1526     // Initialize Timer0.\r
1527     // Used to give the correct time-delays in the song\r
1528 \r
1529     // Enable timer0 compare interrupt\r
1530     TIMSK0 = (1<<OCIE0A);\r
1531      7e8:       82 e0           ldi     r24, 0x02       ; 2\r
1532      7ea:       80 93 6e 00     sts     0x006E, r24\r
1533 \r
1534     // Sets the compare value\r
1535     OCR0A = 38;\r
1536      7ee:       86 e2           ldi     r24, 0x26       ; 38\r
1537      7f0:       87 bd           out     0x27, r24       ; 39\r
1538 \r
1539     // Set Clear on Timer Compare (CTC) mode, CLK/256 prescaler\r
1540     TCCR0A = (1<<WGM01)|(0<<WGM00)|(4<<CS00);\r
1541      7f2:       8c e0           ldi     r24, 0x0C       ; 12\r
1542      7f4:       84 bd           out     0x24, r24       ; 36\r
1543 }\r
1544      7f6:       08 95           ret\r
1545 \r
1546 000007f8 <__vector_10>:\r
1547 // mtA\r
1548 // #pragma vector = TIMER0_COMP_vect\r
1549 // __interrupt void TIMER0_COMP_interrupt(void)\r
1550 // SIGNAL(SIG_OUTPUT_COMPARE0)\r
1551 ISR(TIMER0_COMP_vect)\r
1552 {\r
1553      7f8:       1f 92           push    r1\r
1554      7fa:       0f 92           push    r0\r
1555      7fc:       0f b6           in      r0, 0x3f        ; 63\r
1556      7fe:       0f 92           push    r0\r
1557      800:       11 24           eor     r1, r1\r
1558      802:       8f 93           push    r24\r
1559      804:       9f 93           push    r25\r
1560      806:       af 93           push    r26\r
1561      808:       bf 93           push    r27\r
1562 \r
1563         setup.elapsed_time += 1;\r
1564      80a:       80 91 8d 01     lds     r24, 0x018D\r
1565      80e:       90 91 8e 01     lds     r25, 0x018E\r
1566      812:       a0 91 8f 01     lds     r26, 0x018F\r
1567      816:       b0 91 90 01     lds     r27, 0x0190\r
1568      81a:       01 96           adiw    r24, 0x01       ; 1\r
1569      81c:       a1 1d           adc     r26, r1\r
1570      81e:       b1 1d           adc     r27, r1\r
1571      820:       80 93 8d 01     sts     0x018D, r24\r
1572      824:       90 93 8e 01     sts     0x018E, r25\r
1573      828:       a0 93 8f 01     sts     0x018F, r26\r
1574      82c:       b0 93 90 01     sts     0x0190, r27\r
1575         PORTB ^= (1<<SCK);\r
1576      830:       85 b1           in      r24, 0x05       ; 5\r
1577      832:       98 e0           ldi     r25, 0x08       ; 8\r
1578      834:       89 27           eor     r24, r25\r
1579      836:       85 b9           out     0x05, r24       ; 5\r
1580 \r
1581 }\r
1582      838:       bf 91           pop     r27\r
1583      83a:       af 91           pop     r26\r
1584      83c:       9f 91           pop     r25\r
1585      83e:       8f 91           pop     r24\r
1586      840:       0f 90           pop     r0\r
1587      842:       0f be           out     0x3f, r0        ; 63\r
1588      844:       0f 90           pop     r0\r
1589      846:       1f 90           pop     r1\r
1590      848:       18 95           reti\r
1591 \r
1592 0000084a <USART_Init>:\r
1593 *\r
1594 *****************************************************************************/\r
1595 void USART_Init(unsigned int baudrate)\r
1596 {\r
1597     // Set baud rate\r
1598     UBRRH = (unsigned char)(baudrate>>8);\r
1599      84a:       90 93 c5 00     sts     0x00C5, r25\r
1600     UBRRL = (unsigned char)baudrate;\r
1601      84e:       80 93 c4 00     sts     0x00C4, r24\r
1602 \r
1603     // Disable 2x speed\r
1604     UCSRA = 0;\r
1605      852:       10 92 c0 00     sts     0x00C0, r1\r
1606 //      cbiBF(PORTB, 6);\r
1607 //      cbiBF(PORTB, 7);\r
1608 \r
1609 #ifdef WITH_TRANSMIT\r
1610     // enabled receive and transmit\r
1611     UCSRB = (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<UDRIE);\r
1612      856:       88 e1           ldi     r24, 0x18       ; 24\r
1613      858:       80 93 c1 00     sts     0x00C1, r24\r
1614     // send (only receive in vcard).\r
1615     UCSRB = (1<<RXEN)|(0<<TXEN)|(0<<RXCIE)|(0<<UDRIE);\r
1616 #endif\r
1617 \r
1618     // Async. mode, 8N1\r
1619     UCSRC = (0<<UMSEL)|(0<<UPM0)|(0<<USBS)|(3<<UCSZ0)|(0<<UCPOL);\r
1620      85c:       86 e0           ldi     r24, 0x06       ; 6\r
1621      85e:       80 93 c2 00     sts     0x00C2, r24\r
1622 }\r
1623      862:       08 95           ret\r
1624 \r
1625 00000864 <USART_Tx>:\r
1626 *   Purpose :       Send one byte through the USART\r
1627 *\r
1628 *****************************************************************************/\r
1629 \r
1630 void USART_Tx(char data)\r
1631 {\r
1632      864:       98 2f           mov     r25, r24\r
1633         sbiBF(PORTB, 6);\r
1634      866:       2e 9a           sbi     0x05, 6 ; 5\r
1635     while (!(UCSRA & (1<<UDRE)));\r
1636      868:       80 91 c0 00     lds     r24, 0x00C0\r
1637      86c:       85 ff           sbrs    r24, 5\r
1638      86e:       fc cf           rjmp    .-8             ; 0x868 <USART_Tx+0x4>\r
1639     UDR = data;\r
1640      870:       90 93 c6 00     sts     0x00C6, r25\r
1641 //      cbiBF(PORTB, 6);\r
1642 }\r
1643      874:       08 95           ret\r
1644 \r
1645 00000876 <USART_Rx>:\r
1646 *   Purpose :       Receives one byte from the USART\r
1647 *\r
1648 *****************************************************************************/\r
1649 char USART_Rx(void)\r
1650 {\r
1651         sbiBF(PORTB, 7);\r
1652      876:       2f 9a           sbi     0x05, 7 ; 5\r
1653     while (!(UCSRA & (1<<RXC)));\r
1654      878:       80 91 c0 00     lds     r24, 0x00C0\r
1655      87c:       87 ff           sbrs    r24, 7\r
1656      87e:       fc cf           rjmp    .-8             ; 0x878 <USART_Rx+0x2>\r
1657 //      cbiBF(PORTB, 5);\r
1658     return UDR;\r
1659      880:       80 91 c6 00     lds     r24, 0x00C6\r
1660 }\r
1661      884:       08 95           ret\r
1662 \r
1663 00000886 <USART_Poll>:\r
1664 char USART_Poll(void)\r
1665 {\r
1666         if (!(UCSRA & (1<<RXC)))\r
1667      886:       80 91 c0 00     lds     r24, 0x00C0\r
1668      88a:       87 fd           sbrc    r24, 7\r
1669      88c:       02 c0           rjmp    .+4             ; 0x892 <USART_Poll+0xc>\r
1670      88e:       80 e0           ldi     r24, 0x00       ; 0\r
1671      890:       08 95           ret\r
1672                 return '\0';\r
1673         return UDR;\r
1674      892:       80 91 c6 00     lds     r24, 0x00C6\r
1675 }\r
1676      896:       08 95           ret\r
1677 \r
1678 00000898 <USART_printf>:\r
1679 \r
1680 int USART_printf(const char * format, ...)\r
1681 {\r
1682      898:       0f 93           push    r16\r
1683      89a:       1f 93           push    r17\r
1684      89c:       df 93           push    r29\r
1685      89e:       cf 93           push    r28\r
1686      8a0:       cd b7           in      r28, 0x3d       ; 61\r
1687      8a2:       de b7           in      r29, 0x3e       ; 62\r
1688      8a4:       c0 55           subi    r28, 0x50       ; 80\r
1689      8a6:       d0 40           sbci    r29, 0x00       ; 0\r
1690      8a8:       0f b6           in      r0, 0x3f        ; 63\r
1691      8aa:       f8 94           cli\r
1692      8ac:       de bf           out     0x3e, r29       ; 62\r
1693      8ae:       0f be           out     0x3f, r0        ; 63\r
1694      8b0:       cd bf           out     0x3d, r28       ; 61\r
1695      8b2:       fe 01           movw    r30, r28\r
1696      8b4:       e9 5a           subi    r30, 0xA9       ; 169\r
1697      8b6:       ff 4f           sbci    r31, 0xFF       ; 255\r
1698      8b8:       61 91           ld      r22, Z+\r
1699      8ba:       71 91           ld      r23, Z+\r
1700         char buffer[80];\r
1701         va_list args;\r
1702         va_start(args, format);\r
1703         int result = vsprintf(buffer, format, args);\r
1704      8bc:       8e 01           movw    r16, r28\r
1705      8be:       0f 5f           subi    r16, 0xFF       ; 255\r
1706      8c0:       1f 4f           sbci    r17, 0xFF       ; 255\r
1707      8c2:       c8 01           movw    r24, r16\r
1708      8c4:       af 01           movw    r20, r30\r
1709      8c6:       0e 94 41 05     call    0xa82   ; 0xa82 <vsprintf>\r
1710      8ca:       38 2f           mov     r19, r24\r
1711      8cc:       f8 01           movw    r30, r16\r
1712      8ce:       08 c0           rjmp    .+16            ; 0x8e0 <USART_printf+0x48>\r
1713 *\r
1714 *****************************************************************************/\r
1715 \r
1716 void USART_Tx(char data)\r
1717 {\r
1718         sbiBF(PORTB, 6);\r
1719      8d0:       2e 9a           sbi     0x05, 6 ; 5\r
1720     while (!(UCSRA & (1<<UDRE)));\r
1721      8d2:       80 91 c0 00     lds     r24, 0x00C0\r
1722      8d6:       85 ff           sbrs    r24, 5\r
1723      8d8:       fc cf           rjmp    .-8             ; 0x8d2 <USART_printf+0x3a>\r
1724     UDR = data;\r
1725      8da:       20 93 c6 00     sts     0x00C6, r18\r
1726         va_list args;\r
1727         va_start(args, format);\r
1728         int result = vsprintf(buffer, format, args);\r
1729         va_end(args);\r
1730 \r
1731         for (char * b = buffer; *b != '\0'; ++b)\r
1732      8de:       31 96           adiw    r30, 0x01       ; 1\r
1733      8e0:       20 81           ld      r18, Z\r
1734      8e2:       22 23           and     r18, r18\r
1735      8e4:       a9 f7           brne    .-22            ; 0x8d0 <USART_printf+0x38>\r
1736                 USART_Tx(*b);\r
1737         return result;\r
1738 }\r
1739      8e6:       83 2f           mov     r24, r19\r
1740      8e8:       c0 5b           subi    r28, 0xB0       ; 176\r
1741      8ea:       df 4f           sbci    r29, 0xFF       ; 255\r
1742      8ec:       0f b6           in      r0, 0x3f        ; 63\r
1743      8ee:       f8 94           cli\r
1744      8f0:       de bf           out     0x3e, r29       ; 62\r
1745      8f2:       0f be           out     0x3f, r0        ; 63\r
1746      8f4:       cd bf           out     0x3d, r28       ; 61\r
1747      8f6:       cf 91           pop     r28\r
1748      8f8:       df 91           pop     r29\r
1749      8fa:       1f 91           pop     r17\r
1750      8fc:       0f 91           pop     r16\r
1751      8fe:       08 95           ret\r
1752 \r
1753 00000900 <luint2str>:\r
1754  */\r
1755 \r
1756 //#include <math.h> // Needed for modf\r
1757 \r
1758 int luint2str(char * str, uint32 integer)\r
1759 {\r
1760      900:       8f 92           push    r8\r
1761      902:       9f 92           push    r9\r
1762      904:       af 92           push    r10\r
1763      906:       bf 92           push    r11\r
1764      908:       cf 92           push    r12\r
1765      90a:       df 92           push    r13\r
1766      90c:       ef 92           push    r14\r
1767      90e:       ff 92           push    r15\r
1768      910:       1f 93           push    r17\r
1769      912:       cf 93           push    r28\r
1770      914:       df 93           push    r29\r
1771      916:       4c 01           movw    r8, r24\r
1772      918:       6a 01           movw    r12, r20\r
1773      91a:       7b 01           movw    r14, r22\r
1774         uint8 base = 10;\r
1775 \r
1776         if (integer == 0)\r
1777      91c:       41 15           cp      r20, r1\r
1778      91e:       51 05           cpc     r21, r1\r
1779      920:       61 05           cpc     r22, r1\r
1780      922:       71 05           cpc     r23, r1\r
1781      924:       19 f0           breq    .+6             ; 0x92c <luint2str+0x2c>\r
1782      926:       80 e0           ldi     r24, 0x00       ; 0\r
1783      928:       90 e0           ldi     r25, 0x00       ; 0\r
1784      92a:       20 c0           rjmp    .+64            ; 0x96c <luint2str+0x6c>\r
1785         {\r
1786                 str[0] = '0';\r
1787      92c:       80 e3           ldi     r24, 0x30       ; 48\r
1788      92e:       f4 01           movw    r30, r8\r
1789      930:       80 83           st      Z, r24\r
1790                 str[1] = '\0';\r
1791      932:       11 82           std     Z+1, r1 ; 0x01\r
1792      934:       41 e0           ldi     r20, 0x01       ; 1\r
1793      936:       50 e0           ldi     r21, 0x00       ; 0\r
1794      938:       3d c0           rjmp    .+122           ; 0x9b4 <luint2str+0xb4>\r
1795         int i = 0;\r
1796         \r
1797         uint remainder;\r
1798         while (integer >= base)\r
1799         {\r
1800                 remainder = integer % base;\r
1801      93a:       c7 01           movw    r24, r14\r
1802      93c:       b6 01           movw    r22, r12\r
1803      93e:       2a e0           ldi     r18, 0x0A       ; 10\r
1804      940:       30 e0           ldi     r19, 0x00       ; 0\r
1805      942:       40 e0           ldi     r20, 0x00       ; 0\r
1806      944:       50 e0           ldi     r21, 0x00       ; 0\r
1807      946:       0e 94 30 08     call    0x1060  ; 0x1060 <__udivmodsi4>\r
1808      94a:       16 2f           mov     r17, r22\r
1809                 integer = integer / base;\r
1810      94c:       c7 01           movw    r24, r14\r
1811      94e:       b6 01           movw    r22, r12\r
1812      950:       2a e0           ldi     r18, 0x0A       ; 10\r
1813      952:       30 e0           ldi     r19, 0x00       ; 0\r
1814      954:       40 e0           ldi     r20, 0x00       ; 0\r
1815      956:       50 e0           ldi     r21, 0x00       ; 0\r
1816      958:       0e 94 30 08     call    0x1060  ; 0x1060 <__udivmodsi4>\r
1817      95c:       c9 01           movw    r24, r18\r
1818      95e:       da 01           movw    r26, r20\r
1819      960:       6c 01           movw    r12, r24\r
1820      962:       7d 01           movw    r14, r26\r
1821                 str[i] = (char)((uint)'0' + remainder);\r
1822      964:       10 5d           subi    r17, 0xD0       ; 208\r
1823      966:       f5 01           movw    r30, r10\r
1824      968:       10 83           st      Z, r17\r
1825                 ++i;\r
1826      96a:       ce 01           movw    r24, r28\r
1827      96c:       54 01           movw    r10, r8\r
1828      96e:       a8 0e           add     r10, r24\r
1829      970:       b9 1e           adc     r11, r25\r
1830      972:       ec 01           movw    r28, r24\r
1831      974:       21 96           adiw    r28, 0x01       ; 1\r
1832         }\r
1833         \r
1834         int i = 0;\r
1835         \r
1836         uint remainder;\r
1837         while (integer >= base)\r
1838      976:       fa e0           ldi     r31, 0x0A       ; 10\r
1839      978:       cf 16           cp      r12, r31\r
1840      97a:       d1 04           cpc     r13, r1\r
1841      97c:       e1 04           cpc     r14, r1\r
1842      97e:       f1 04           cpc     r15, r1\r
1843      980:       e0 f6           brcc    .-72            ; 0x93a <luint2str+0x3a>\r
1844                 ++i;\r
1845         }\r
1846 \r
1847         if (integer != 0)\r
1848         {\r
1849                 str[i] = (char)((uint)'0' + integer);\r
1850      982:       8c 2d           mov     r24, r12\r
1851      984:       80 5d           subi    r24, 0xD0       ; 208\r
1852      986:       f5 01           movw    r30, r10\r
1853      988:       80 83           st      Z, r24\r
1854                 ++i;\r
1855      98a:       ae 01           movw    r20, r28\r
1856         }\r
1857 \r
1858         //reverse the string\r
1859         for (int j = 0; j < i/2; ++j)\r
1860      98c:       be 01           movw    r22, r28\r
1861      98e:       75 95           asr     r23\r
1862      990:       67 95           ror     r22\r
1863      992:       d4 01           movw    r26, r8\r
1864      994:       20 e0           ldi     r18, 0x00       ; 0\r
1865      996:       30 e0           ldi     r19, 0x00       ; 0\r
1866      998:       07 c0           rjmp    .+14            ; 0x9a8 <luint2str+0xa8>\r
1867         {\r
1868                 char t = str[j];\r
1869      99a:       9c 91           ld      r25, X\r
1870                 str[j] = str[i - 1 - j];\r
1871      99c:       80 81           ld      r24, Z\r
1872      99e:       8d 93           st      X+, r24\r
1873                 str[i -1 - j] = t;\r
1874      9a0:       90 83           st      Z, r25\r
1875                 str[i] = (char)((uint)'0' + integer);\r
1876                 ++i;\r
1877         }\r
1878 \r
1879         //reverse the string\r
1880         for (int j = 0; j < i/2; ++j)\r
1881      9a2:       2f 5f           subi    r18, 0xFF       ; 255\r
1882      9a4:       3f 4f           sbci    r19, 0xFF       ; 255\r
1883      9a6:       31 97           sbiw    r30, 0x01       ; 1\r
1884      9a8:       26 17           cp      r18, r22\r
1885      9aa:       37 07           cpc     r19, r23\r
1886      9ac:       b4 f3           brlt    .-20            ; 0x99a <luint2str+0x9a>\r
1887         {\r
1888                 char t = str[j];\r
1889                 str[j] = str[i - 1 - j];\r
1890                 str[i -1 - j] = t;\r
1891         }\r
1892         str[i] = '\0';\r
1893      9ae:       c8 0d           add     r28, r8\r
1894      9b0:       d9 1d           adc     r29, r9\r
1895      9b2:       18 82           st      Y, r1\r
1896         return i;\r
1897 \r
1898 \r
1899 }\r
1900      9b4:       ca 01           movw    r24, r20\r
1901      9b6:       df 91           pop     r29\r
1902      9b8:       cf 91           pop     r28\r
1903      9ba:       1f 91           pop     r17\r
1904      9bc:       ff 90           pop     r15\r
1905      9be:       ef 90           pop     r14\r
1906      9c0:       df 90           pop     r13\r
1907      9c2:       cf 90           pop     r12\r
1908      9c4:       bf 90           pop     r11\r
1909      9c6:       af 90           pop     r10\r
1910      9c8:       9f 90           pop     r9\r
1911      9ca:       8f 90           pop     r8\r
1912      9cc:       08 95           ret\r
1913 \r
1914 000009ce <uint2str>:\r
1915 \r
1916 int uint2str(char * str, uint integer)\r
1917 {\r
1918      9ce:       0f 93           push    r16\r
1919      9d0:       1f 93           push    r17\r
1920      9d2:       cf 93           push    r28\r
1921      9d4:       df 93           push    r29\r
1922      9d6:       8c 01           movw    r16, r24\r
1923      9d8:       9b 01           movw    r18, r22\r
1924         uint8 base = 10;\r
1925 \r
1926         if (integer == 0)\r
1927      9da:       61 15           cp      r22, r1\r
1928      9dc:       71 05           cpc     r23, r1\r
1929      9de:       19 f0           breq    .+6             ; 0x9e6 <uint2str+0x18>\r
1930      9e0:       80 e0           ldi     r24, 0x00       ; 0\r
1931      9e2:       90 e0           ldi     r25, 0x00       ; 0\r
1932      9e4:       16 c0           rjmp    .+44            ; 0xa12 <uint2str+0x44>\r
1933         {\r
1934                 str[0] = '0';\r
1935      9e6:       80 e3           ldi     r24, 0x30       ; 48\r
1936      9e8:       f8 01           movw    r30, r16\r
1937      9ea:       80 83           st      Z, r24\r
1938                 str[1] = '\0';\r
1939      9ec:       11 82           std     Z+1, r1 ; 0x01\r
1940      9ee:       41 e0           ldi     r20, 0x01       ; 1\r
1941      9f0:       50 e0           ldi     r21, 0x00       ; 0\r
1942      9f2:       2f c0           rjmp    .+94            ; 0xa52 <uint2str+0x84>\r
1943         int i = 0;\r
1944         \r
1945         uint remainder;\r
1946         while (integer >= base)\r
1947         {\r
1948                 remainder = integer % base;\r
1949      9f4:       c9 01           movw    r24, r18\r
1950      9f6:       6a e0           ldi     r22, 0x0A       ; 10\r
1951      9f8:       70 e0           ldi     r23, 0x00       ; 0\r
1952      9fa:       0e 94 1c 08     call    0x1038  ; 0x1038 <__udivmodhi4>\r
1953      9fe:       48 2f           mov     r20, r24\r
1954                 integer = integer / base;\r
1955      a00:       c9 01           movw    r24, r18\r
1956      a02:       6a e0           ldi     r22, 0x0A       ; 10\r
1957      a04:       70 e0           ldi     r23, 0x00       ; 0\r
1958      a06:       0e 94 1c 08     call    0x1038  ; 0x1038 <__udivmodhi4>\r
1959      a0a:       9b 01           movw    r18, r22\r
1960                 str[i] = (char)((uint)'0' + remainder);\r
1961      a0c:       40 5d           subi    r20, 0xD0       ; 208\r
1962      a0e:       40 83           st      Z, r20\r
1963                 ++i;\r
1964      a10:       ce 01           movw    r24, r28\r
1965      a12:       f8 01           movw    r30, r16\r
1966      a14:       e8 0f           add     r30, r24\r
1967      a16:       f9 1f           adc     r31, r25\r
1968      a18:       ec 01           movw    r28, r24\r
1969      a1a:       21 96           adiw    r28, 0x01       ; 1\r
1970         }\r
1971         \r
1972         int i = 0;\r
1973         \r
1974         uint remainder;\r
1975         while (integer >= base)\r
1976      a1c:       2a 30           cpi     r18, 0x0A       ; 10\r
1977      a1e:       31 05           cpc     r19, r1\r
1978      a20:       48 f7           brcc    .-46            ; 0x9f4 <uint2str+0x26>\r
1979                 ++i;\r
1980         }\r
1981 \r
1982         if (integer != 0)\r
1983         {\r
1984                 str[i] = (char)((uint)'0' + integer);\r
1985      a22:       82 2f           mov     r24, r18\r
1986      a24:       80 5d           subi    r24, 0xD0       ; 208\r
1987      a26:       80 83           st      Z, r24\r
1988                 ++i;\r
1989      a28:       ae 01           movw    r20, r28\r
1990         }\r
1991 \r
1992         //reverse the string\r
1993         for (int j = 0; j < i/2; ++j)\r
1994      a2a:       be 01           movw    r22, r28\r
1995      a2c:       75 95           asr     r23\r
1996      a2e:       67 95           ror     r22\r
1997      a30:       d8 01           movw    r26, r16\r
1998      a32:       20 e0           ldi     r18, 0x00       ; 0\r
1999      a34:       30 e0           ldi     r19, 0x00       ; 0\r
2000      a36:       07 c0           rjmp    .+14            ; 0xa46 <uint2str+0x78>\r
2001         {\r
2002                 char t = str[j];\r
2003      a38:       9c 91           ld      r25, X\r
2004                 str[j] = str[i - 1 - j];\r
2005      a3a:       80 81           ld      r24, Z\r
2006      a3c:       8d 93           st      X+, r24\r
2007                 str[i -1 - j] = t;\r
2008      a3e:       90 83           st      Z, r25\r
2009                 str[i] = (char)((uint)'0' + integer);\r
2010                 ++i;\r
2011         }\r
2012 \r
2013         //reverse the string\r
2014         for (int j = 0; j < i/2; ++j)\r
2015      a40:       2f 5f           subi    r18, 0xFF       ; 255\r
2016      a42:       3f 4f           sbci    r19, 0xFF       ; 255\r
2017      a44:       31 97           sbiw    r30, 0x01       ; 1\r
2018      a46:       26 17           cp      r18, r22\r
2019      a48:       37 07           cpc     r19, r23\r
2020      a4a:       b4 f3           brlt    .-20            ; 0xa38 <uint2str+0x6a>\r
2021         {\r
2022                 char t = str[j];\r
2023                 str[j] = str[i - 1 - j];\r
2024                 str[i -1 - j] = t;\r
2025         }\r
2026         str[i] = '\0';\r
2027      a4c:       c0 0f           add     r28, r16\r
2028      a4e:       d1 1f           adc     r29, r17\r
2029      a50:       18 82           st      Y, r1\r
2030         return i;\r
2031 \r
2032 \r
2033 }\r
2034      a52:       ca 01           movw    r24, r20\r
2035      a54:       df 91           pop     r29\r
2036      a56:       cf 91           pop     r28\r
2037      a58:       1f 91           pop     r17\r
2038      a5a:       0f 91           pop     r16\r
2039      a5c:       08 95           ret\r
2040 \r
2041 00000a5e <str2str>:\r
2042         return s;\r
2043 \r
2044 }\r
2045 */\r
2046 int str2str(char * str1, char * str2)\r
2047 {\r
2048      a5e:       20 e0           ldi     r18, 0x00       ; 0\r
2049      a60:       30 e0           ldi     r19, 0x00       ; 0\r
2050      a62:       03 c0           rjmp    .+6             ; 0xa6a <str2str+0xc>\r
2051         int i = 0;\r
2052         for (i = 0; str2[i] != '\0'; ++i)\r
2053         {\r
2054                 str1[i] = str2[i];\r
2055      a64:       ec 93           st      X, r30\r
2056 }\r
2057 */\r
2058 int str2str(char * str1, char * str2)\r
2059 {\r
2060         int i = 0;\r
2061         for (i = 0; str2[i] != '\0'; ++i)\r
2062      a66:       2f 5f           subi    r18, 0xFF       ; 255\r
2063      a68:       3f 4f           sbci    r19, 0xFF       ; 255\r
2064      a6a:       fb 01           movw    r30, r22\r
2065      a6c:       e2 0f           add     r30, r18\r
2066      a6e:       f3 1f           adc     r31, r19\r
2067      a70:       e0 81           ld      r30, Z\r
2068      a72:       dc 01           movw    r26, r24\r
2069      a74:       a2 0f           add     r26, r18\r
2070      a76:       b3 1f           adc     r27, r19\r
2071      a78:       ee 23           and     r30, r30\r
2072      a7a:       a1 f7           brne    .-24            ; 0xa64 <str2str+0x6>\r
2073         {\r
2074                 str1[i] = str2[i];\r
2075         }\r
2076         str1[i] = '\0';\r
2077      a7c:       1c 92           st      X, r1\r
2078         return i;\r
2079 }\r
2080      a7e:       c9 01           movw    r24, r18\r
2081      a80:       08 95           ret\r
2082 \r
2083 00000a82 <vsprintf>:\r
2084 {\r
2085         int s; int f;\r
2086         s = 0;\r
2087         for (f = 0; format[f] != '\0'; ++f)\r
2088         {\r
2089                 if (format[f] == '%')\r
2090      a82:       af 92           push    r10\r
2091      a84:       bf 92           push    r11\r
2092      a86:       cf 92           push    r12\r
2093      a88:       df 92           push    r13\r
2094      a8a:       ef 92           push    r14\r
2095      a8c:       ff 92           push    r15\r
2096      a8e:       0f 93           push    r16\r
2097      a90:       1f 93           push    r17\r
2098      a92:       cf 93           push    r28\r
2099      a94:       df 93           push    r29\r
2100      a96:       7c 01           movw    r14, r24\r
2101      a98:       5b 01           movw    r10, r22\r
2102      a9a:       da 01           movw    r26, r20\r
2103      a9c:       c0 e0           ldi     r28, 0x00       ; 0\r
2104      a9e:       d0 e0           ldi     r29, 0x00       ; 0\r
2105      aa0:       cc 24           eor     r12, r12\r
2106      aa2:       dd 24           eor     r13, r13\r
2107      aa4:       4f c0           rjmp    .+158           ; 0xb44 <vsprintf+0xc2>\r
2108      aa6:       85 32           cpi     r24, 0x25       ; 37\r
2109      aa8:       09 f0           breq    .+2             ; 0xaac <vsprintf+0x2a>\r
2110      aaa:       44 c0           rjmp    .+136           ; 0xb34 <vsprintf+0xb2>\r
2111                 {\r
2112                         switch (format[f+1])\r
2113      aac:       81 81           ldd     r24, Z+1        ; 0x01\r
2114      aae:       89 36           cpi     r24, 0x69       ; 105\r
2115      ab0:       81 f0           breq    .+32            ; 0xad2 <vsprintf+0x50>\r
2116      ab2:       8a 36           cpi     r24, 0x6A       ; 106\r
2117      ab4:       28 f4           brcc    .+10            ; 0xac0 <vsprintf+0x3e>\r
2118      ab6:       83 36           cpi     r24, 0x63       ; 99\r
2119      ab8:       91 f1           breq    .+100           ; 0xb1e <vsprintf+0x9c>\r
2120      aba:       84 36           cpi     r24, 0x64       ; 100\r
2121      abc:       39 f4           brne    .+14            ; 0xacc <vsprintf+0x4a>\r
2122      abe:       09 c0           rjmp    .+18            ; 0xad2 <vsprintf+0x50>\r
2123      ac0:       83 37           cpi     r24, 0x73       ; 115\r
2124      ac2:       11 f1           breq    .+68            ; 0xb08 <vsprintf+0x86>\r
2125      ac4:       85 37           cpi     r24, 0x75       ; 117\r
2126      ac6:       29 f0           breq    .+10            ; 0xad2 <vsprintf+0x50>\r
2127      ac8:       8c 36           cpi     r24, 0x6C       ; 108\r
2128      aca:       71 f0           breq    .+28            ; 0xae8 <vsprintf+0x66>\r
2129      acc:       cf ef           ldi     r28, 0xFF       ; 255\r
2130      ace:       df ef           ldi     r29, 0xFF       ; 255\r
2131      ad0:       44 c0           rjmp    .+136           ; 0xb5a <vsprintf+0xd8>\r
2132                         {\r
2133                                 case 'd':\r
2134                                 case 'u':\r
2135                                 case 'i':\r
2136                                 {\r
2137                                         uint integer = va_arg(args, uint);\r
2138      ad2:       8d 01           movw    r16, r26\r
2139      ad4:       0e 5f           subi    r16, 0xFE       ; 254\r
2140      ad6:       1f 4f           sbci    r17, 0xFF       ; 255\r
2141                                         s += uint2str(str+s, integer);\r
2142      ad8:       6d 91           ld      r22, X+\r
2143      ada:       7c 91           ld      r23, X\r
2144      adc:       c7 01           movw    r24, r14\r
2145      ade:       8c 0f           add     r24, r28\r
2146      ae0:       9d 1f           adc     r25, r29\r
2147      ae2:       0e 94 e7 04     call    0x9ce   ; 0x9ce <uint2str>\r
2148      ae6:       0c c0           rjmp    .+24            ; 0xb00 <vsprintf+0x7e>\r
2149                                         break;\r
2150                                 }\r
2151                                 case 'l':\r
2152                                 {\r
2153                                         uint32 integer = va_arg(args, uint32);\r
2154      ae8:       8d 01           movw    r16, r26\r
2155      aea:       0c 5f           subi    r16, 0xFC       ; 252\r
2156      aec:       1f 4f           sbci    r17, 0xFF       ; 255\r
2157                                         s += luint2str(str+s, integer);\r
2158      aee:       4d 91           ld      r20, X+\r
2159      af0:       5d 91           ld      r21, X+\r
2160      af2:       6d 91           ld      r22, X+\r
2161      af4:       7c 91           ld      r23, X\r
2162      af6:       c7 01           movw    r24, r14\r
2163      af8:       8c 0f           add     r24, r28\r
2164      afa:       9d 1f           adc     r25, r29\r
2165      afc:       0e 94 80 04     call    0x900   ; 0x900 <luint2str>\r
2166      b00:       c8 0f           add     r28, r24\r
2167      b02:       d9 1f           adc     r29, r25\r
2168      b04:       d8 01           movw    r26, r16\r
2169      b06:       12 c0           rjmp    .+36            ; 0xb2c <vsprintf+0xaa>\r
2170                                         break;\r
2171                                 }\r
2172                                 case 's':\r
2173                                 {\r
2174                                         char * str2 = va_arg(args, char*);\r
2175      b08:       8d 01           movw    r16, r26\r
2176      b0a:       0e 5f           subi    r16, 0xFE       ; 254\r
2177      b0c:       1f 4f           sbci    r17, 0xFF       ; 255\r
2178                                         s += str2str(str+s, str2);\r
2179      b0e:       6d 91           ld      r22, X+\r
2180      b10:       7c 91           ld      r23, X\r
2181      b12:       c7 01           movw    r24, r14\r
2182      b14:       8c 0f           add     r24, r28\r
2183      b16:       9d 1f           adc     r25, r29\r
2184      b18:       0e 94 2f 05     call    0xa5e   ; 0xa5e <str2str>\r
2185      b1c:       f1 cf           rjmp    .-30            ; 0xb00 <vsprintf+0x7e>\r
2186                         //              float flt = va_arg(args, double);\r
2187                         //              s += float2str(str+s, flt);\r
2188                         //              break;\r
2189                         //      }\r
2190                                 case 'c':\r
2191                                         str[s] = (char)(va_arg(args, int));\r
2192      b1e:       f7 01           movw    r30, r14\r
2193      b20:       ec 0f           add     r30, r28\r
2194      b22:       fd 1f           adc     r31, r29\r
2195      b24:       8c 91           ld      r24, X\r
2196      b26:       80 83           st      Z, r24\r
2197                                         ++s;\r
2198      b28:       21 96           adiw    r28, 0x01       ; 1\r
2199      b2a:       12 96           adiw    r26, 0x02       ; 2\r
2200                                         break;\r
2201                                 case '\0':\r
2202                                 default:\r
2203                                         return -1;\r
2204                         }\r
2205                         ++f;\r
2206      b2c:       08 94           sec\r
2207      b2e:       c1 1c           adc     r12, r1\r
2208      b30:       d1 1c           adc     r13, r1\r
2209      b32:       05 c0           rjmp    .+10            ; 0xb3e <vsprintf+0xbc>\r
2210                 }\r
2211                 else\r
2212                 {\r
2213                         str[s] = format[f];\r
2214      b34:       f7 01           movw    r30, r14\r
2215      b36:       ec 0f           add     r30, r28\r
2216      b38:       fd 1f           adc     r31, r29\r
2217      b3a:       80 83           st      Z, r24\r
2218                         ++s;\r
2219      b3c:       21 96           adiw    r28, 0x01       ; 1\r
2220 \r
2221 int vsprintf(char * str, const char * format, va_list args)\r
2222 {\r
2223         int s; int f;\r
2224         s = 0;\r
2225         for (f = 0; format[f] != '\0'; ++f)\r
2226      b3e:       08 94           sec\r
2227      b40:       c1 1c           adc     r12, r1\r
2228      b42:       d1 1c           adc     r13, r1\r
2229      b44:       f5 01           movw    r30, r10\r
2230      b46:       ec 0d           add     r30, r12\r
2231      b48:       fd 1d           adc     r31, r13\r
2232      b4a:       80 81           ld      r24, Z\r
2233      b4c:       88 23           and     r24, r24\r
2234      b4e:       09 f0           breq    .+2             ; 0xb52 <vsprintf+0xd0>\r
2235      b50:       aa cf           rjmp    .-172           ; 0xaa6 <vsprintf+0x24>\r
2236                 {\r
2237                         str[s] = format[f];\r
2238                         ++s;\r
2239                 }\r
2240         }\r
2241         str[s] = '\0';\r
2242      b52:       ec 0e           add     r14, r28\r
2243      b54:       fd 1e           adc     r15, r29\r
2244      b56:       f7 01           movw    r30, r14\r
2245      b58:       10 82           st      Z, r1\r
2246         return s;\r
2247 }\r
2248      b5a:       ce 01           movw    r24, r28\r
2249      b5c:       df 91           pop     r29\r
2250      b5e:       cf 91           pop     r28\r
2251      b60:       1f 91           pop     r17\r
2252      b62:       0f 91           pop     r16\r
2253      b64:       ff 90           pop     r15\r
2254      b66:       ef 90           pop     r14\r
2255      b68:       df 90           pop     r13\r
2256      b6a:       cf 90           pop     r12\r
2257      b6c:       bf 90           pop     r11\r
2258      b6e:       af 90           pop     r10\r
2259      b70:       08 95           ret\r
2260 \r
2261 00000b72 <sprintf>:\r
2262 \r
2263 int sprintf(char * str, const char * format, ...)\r
2264 {\r
2265      b72:       df 93           push    r29\r
2266      b74:       cf 93           push    r28\r
2267      b76:       cd b7           in      r28, 0x3d       ; 61\r
2268      b78:       de b7           in      r29, 0x3e       ; 62\r
2269      b7a:       9e 01           movw    r18, r28\r
2270      b7c:       27 5f           subi    r18, 0xF7       ; 247\r
2271      b7e:       3f 4f           sbci    r19, 0xFF       ; 255\r
2272         int result = 0;\r
2273         va_list args;\r
2274         va_start(args, format);\r
2275         result = vsprintf(str, format, args);\r
2276      b80:       8d 81           ldd     r24, Y+5        ; 0x05\r
2277      b82:       9e 81           ldd     r25, Y+6        ; 0x06\r
2278      b84:       6f 81           ldd     r22, Y+7        ; 0x07\r
2279      b86:       78 85           ldd     r23, Y+8        ; 0x08\r
2280      b88:       a9 01           movw    r20, r18\r
2281      b8a:       0e 94 41 05     call    0xa82   ; 0xa82 <vsprintf>\r
2282         va_end(args);   \r
2283         return result;\r
2284 }\r
2285      b8e:       cf 91           pop     r28\r
2286      b90:       df 91           pop     r29\r
2287      b92:       08 95           ret\r
2288 \r
2289 00000b94 <ParseCommand>:\r
2290 \r
2291 \r
2292 \r
2293 \r
2294 uint8 ParseCommand()\r
2295 {\r
2296      b94:       af 92           push    r10\r
2297      b96:       bf 92           push    r11\r
2298      b98:       cf 92           push    r12\r
2299      b9a:       df 92           push    r13\r
2300      b9c:       ef 92           push    r14\r
2301      b9e:       ff 92           push    r15\r
2302      ba0:       0f 93           push    r16\r
2303      ba2:       1f 93           push    r17\r
2304      ba4:       df 93           push    r29\r
2305      ba6:       cf 93           push    r28\r
2306      ba8:       cd b7           in      r28, 0x3d       ; 61\r
2307      baa:       de b7           in      r29, 0x3e       ; 62\r
2308      bac:       2a 97           sbiw    r28, 0x0a       ; 10\r
2309      bae:       0f b6           in      r0, 0x3f        ; 63\r
2310      bb0:       f8 94           cli\r
2311      bb2:       de bf           out     0x3e, r29       ; 62\r
2312      bb4:       0f be           out     0x3f, r0        ; 63\r
2313      bb6:       cd bf           out     0x3d, r28       ; 61\r
2314         //return 0;\r
2315         \r
2316         USART_Tx('#');\r
2317      bb8:       83 e2           ldi     r24, 0x23       ; 35\r
2318      bba:       0e 94 32 04     call    0x864   ; 0x864 <USART_Tx>\r
2319         char c = USART_Rx();\r
2320      bbe:       0e 94 3b 04     call    0x876   ; 0x876 <USART_Rx>\r
2321      bc2:       c8 2e           mov     r12, r24\r
2322         LCD_puts("input");\r
2323      bc4:       84 e1           ldi     r24, 0x14       ; 20\r
2324      bc6:       91 e0           ldi     r25, 0x01       ; 1\r
2325      bc8:       0e 94 0c 02     call    0x418   ; 0x418 <LCD_puts>\r
2326         char arg[MAX_TOKEN_SIZE];\r
2327         USART_Tx(c);\r
2328      bcc:       8c 2d           mov     r24, r12\r
2329      bce:       0e 94 32 04     call    0x864   ; 0x864 <USART_Tx>\r
2330      bd2:       dd 24           eor     r13, r13\r
2331 \r
2332         uint8 i = 0;\r
2333         do\r
2334         {\r
2335                 arg[i] = USART_Rx();\r
2336      bd4:       5e 01           movw    r10, r28\r
2337      bd6:       08 94           sec\r
2338      bd8:       a1 1c           adc     r10, r1\r
2339      bda:       b1 1c           adc     r11, r1\r
2340      bdc:       ed 2c           mov     r14, r13\r
2341      bde:       ff 24           eor     r15, r15\r
2342      be0:       0e 94 3b 04     call    0x876   ; 0x876 <USART_Rx>\r
2343      be4:       85 01           movw    r16, r10\r
2344      be6:       0e 0d           add     r16, r14\r
2345      be8:       1f 1d           adc     r17, r15\r
2346      bea:       d8 01           movw    r26, r16\r
2347      bec:       8c 93           st      X, r24\r
2348                 USART_Tx(arg[i]);\r
2349      bee:       0e 94 32 04     call    0x864   ; 0x864 <USART_Tx>\r
2350                 switch (arg[i])\r
2351      bf2:       f8 01           movw    r30, r16\r
2352      bf4:       00 81           ld      r16, Z\r
2353      bf6:       0d 30           cpi     r16, 0x0D       ; 13\r
2354      bf8:       49 f0           breq    .+18            ; 0xc0c <ParseCommand+0x78>\r
2355      bfa:       0e 30           cpi     r16, 0x0E       ; 14\r
2356      bfc:       18 f4           brcc    .+6             ; 0xc04 <ParseCommand+0x70>\r
2357      bfe:       0a 30           cpi     r16, 0x0A       ; 10\r
2358      c00:       49 f4           brne    .+18            ; 0xc14 <ParseCommand+0x80>\r
2359      c02:       04 c0           rjmp    .+8             ; 0xc0c <ParseCommand+0x78>\r
2360      c04:       00 32           cpi     r16, 0x20       ; 32\r
2361      c06:       39 f0           breq    .+14            ; 0xc16 <ParseCommand+0x82>\r
2362      c08:       0b 33           cpi     r16, 0x3B       ; 59\r
2363      c0a:       21 f4           brne    .+8             ; 0xc14 <ParseCommand+0x80>\r
2364                         case ' ':\r
2365                                 break;\r
2366                         case ';':\r
2367                         case '\r':\r
2368                         case '\n':\r
2369                                 arg[i] = '\0';\r
2370      c0c:       ea 0c           add     r14, r10\r
2371      c0e:       fb 1c           adc     r15, r11\r
2372      c10:       d7 01           movw    r26, r14\r
2373      c12:       1c 92           st      X, r1\r
2374                         default:\r
2375                                 ++i;\r
2376      c14:       d3 94           inc     r13\r
2377                                 break;\r
2378                 }\r
2379                 \r
2380         }\r
2381         while ((arg[i-1] != '\0') && (i < MAX_TOKEN_SIZE));\r
2382      c16:       ed 2c           mov     r14, r13\r
2383      c18:       ff 24           eor     r15, r15\r
2384      c1a:       87 01           movw    r16, r14\r
2385      c1c:       01 50           subi    r16, 0x01       ; 1\r
2386      c1e:       10 40           sbci    r17, 0x00       ; 0\r
2387      c20:       f5 01           movw    r30, r10\r
2388      c22:       e0 0f           add     r30, r16\r
2389      c24:       f1 1f           adc     r31, r17\r
2390      c26:       80 81           ld      r24, Z\r
2391      c28:       88 23           and     r24, r24\r
2392      c2a:       19 f0           breq    .+6             ; 0xc32 <ParseCommand+0x9e>\r
2393      c2c:       b9 e0           ldi     r27, 0x09       ; 9\r
2394      c2e:       bd 15           cp      r27, r13\r
2395      c30:       a8 f6           brcc    .-86            ; 0xbdc <ParseCommand+0x48>\r
2396         USART_printf("\r\n");\r
2397      c32:       00 d0           rcall   .+0             ; 0xc34 <ParseCommand+0xa0>\r
2398      c34:       8a e1           ldi     r24, 0x1A       ; 26\r
2399      c36:       91 e0           ldi     r25, 0x01       ; 1\r
2400      c38:       ed b7           in      r30, 0x3d       ; 61\r
2401      c3a:       fe b7           in      r31, 0x3e       ; 62\r
2402      c3c:       92 83           std     Z+2, r25        ; 0x02\r
2403      c3e:       81 83           std     Z+1, r24        ; 0x01\r
2404      c40:       0e 94 4c 04     call    0x898   ; 0x898 <USART_printf>\r
2405         if (arg[i-1] != '\0')\r
2406      c44:       fe 01           movw    r30, r28\r
2407      c46:       31 96           adiw    r30, 0x01       ; 1\r
2408      c48:       0e 0f           add     r16, r30\r
2409      c4a:       1f 1f           adc     r17, r31\r
2410      c4c:       0f 90           pop     r0\r
2411      c4e:       0f 90           pop     r0\r
2412      c50:       d8 01           movw    r26, r16\r
2413      c52:       8c 91           ld      r24, X\r
2414      c54:       88 23           and     r24, r24\r
2415      c56:       79 f0           breq    .+30            ; 0xc76 <ParseCommand+0xe2>\r
2416         {\r
2417                 LCD_puts("?");\r
2418      c58:       8d e1           ldi     r24, 0x1D       ; 29\r
2419      c5a:       91 e0           ldi     r25, 0x01       ; 1\r
2420      c5c:       0e 94 0c 02     call    0x418   ; 0x418 <LCD_puts>\r
2421                 USART_printf("?\r\n");\r
2422      c60:       00 d0           rcall   .+0             ; 0xc62 <ParseCommand+0xce>\r
2423      c62:       8f e1           ldi     r24, 0x1F       ; 31\r
2424      c64:       91 e0           ldi     r25, 0x01       ; 1\r
2425      c66:       ed b7           in      r30, 0x3d       ; 61\r
2426      c68:       fe b7           in      r31, 0x3e       ; 62\r
2427      c6a:       92 83           std     Z+2, r25        ; 0x02\r
2428      c6c:       81 83           std     Z+1, r24        ; 0x01\r
2429      c6e:       0e 94 4c 04     call    0x898   ; 0x898 <USART_printf>\r
2430      c72:       8f ef           ldi     r24, 0xFF       ; 255\r
2431      c74:       2d c0           rjmp    .+90            ; 0xcd0 <ParseCommand+0x13c>\r
2432                 return 255;\r
2433         }\r
2434 \r
2435         arg[i] = '\0';\r
2436      c76:       ee 0d           add     r30, r14\r
2437      c78:       ff 1d           adc     r31, r15\r
2438      c7a:       10 82           st      Z, r1\r
2439         \r
2440 \r
2441         command funct = NULL;\r
2442                 \r
2443         switch (c)\r
2444      c7c:       f4 e6           ldi     r31, 0x64       ; 100\r
2445      c7e:       cf 16           cp      r12, r31\r
2446      c80:       91 f0           breq    .+36            ; 0xca6 <ParseCommand+0x112>\r
2447      c82:       fc 15           cp      r31, r12\r
2448      c84:       20 f0           brcs    .+8             ; 0xc8e <ParseCommand+0xfa>\r
2449      c86:       8d e0           ldi     r24, 0x0D       ; 13\r
2450      c88:       c8 16           cp      r12, r24\r
2451      c8a:       a1 f4           brne    .+40            ; 0xcb4 <ParseCommand+0x120>\r
2452      c8c:       06 c0           rjmp    .+12            ; 0xc9a <ParseCommand+0x106>\r
2453      c8e:       a0 e7           ldi     r26, 0x70       ; 112\r
2454      c90:       ca 16           cp      r12, r26\r
2455      c92:       31 f0           breq    .+12            ; 0xca0 <ParseCommand+0x10c>\r
2456      c94:       b2 e7           ldi     r27, 0x72       ; 114\r
2457      c96:       cb 16           cp      r12, r27\r
2458      c98:       69 f4           brne    .+26            ; 0xcb4 <ParseCommand+0x120>\r
2459      c9a:       ec ea           ldi     r30, 0xAC       ; 172\r
2460      c9c:       f6 e0           ldi     r31, 0x06       ; 6\r
2461      c9e:       05 c0           rjmp    .+10            ; 0xcaa <ParseCommand+0x116>\r
2462      ca0:       ee e1           ldi     r30, 0x1E       ; 30\r
2463      ca2:       f7 e0           ldi     r31, 0x07       ; 7\r
2464      ca4:       02 c0           rjmp    .+4             ; 0xcaa <ParseCommand+0x116>\r
2465                 case 'r':\r
2466                         funct = &read;\r
2467                         break;\r
2468                 case 'p':\r
2469                         funct = &poll;\r
2470                         break;\r
2471      ca6:       eb e7           ldi     r30, 0x7B       ; 123\r
2472      ca8:       f6 e0           ldi     r31, 0x06       ; 6\r
2473         //              break;\r
2474                 default:\r
2475                         break;\r
2476         }\r
2477 \r
2478         if (funct == NULL || funct(arg) != 0)\r
2479      caa:       ce 01           movw    r24, r28\r
2480      cac:       01 96           adiw    r24, 0x01       ; 1\r
2481      cae:       09 95           icall\r
2482      cb0:       88 23           and     r24, r24\r
2483      cb2:       81 f0           breq    .+32            ; 0xcd4 <ParseCommand+0x140>\r
2484         {\r
2485                 LCD_puts("?");\r
2486      cb4:       8d e1           ldi     r24, 0x1D       ; 29\r
2487      cb6:       91 e0           ldi     r25, 0x01       ; 1\r
2488      cb8:       0e 94 0c 02     call    0x418   ; 0x418 <LCD_puts>\r
2489                 USART_printf("?\r\n");\r
2490      cbc:       00 d0           rcall   .+0             ; 0xcbe <ParseCommand+0x12a>\r
2491      cbe:       8f e1           ldi     r24, 0x1F       ; 31\r
2492      cc0:       91 e0           ldi     r25, 0x01       ; 1\r
2493      cc2:       ed b7           in      r30, 0x3d       ; 61\r
2494      cc4:       fe b7           in      r31, 0x3e       ; 62\r
2495      cc6:       92 83           std     Z+2, r25        ; 0x02\r
2496      cc8:       81 83           std     Z+1, r24        ; 0x01\r
2497      cca:       0e 94 4c 04     call    0x898   ; 0x898 <USART_printf>\r
2498      cce:       8e ef           ldi     r24, 0xFE       ; 254\r
2499      cd0:       0f 90           pop     r0\r
2500      cd2:       0f 90           pop     r0\r
2501                 return 254;\r
2502         }\r
2503         return 0;\r
2504 }\r
2505      cd4:       2a 96           adiw    r28, 0x0a       ; 10\r
2506      cd6:       0f b6           in      r0, 0x3f        ; 63\r
2507      cd8:       f8 94           cli\r
2508      cda:       de bf           out     0x3e, r29       ; 62\r
2509      cdc:       0f be           out     0x3f, r0        ; 63\r
2510      cde:       cd bf           out     0x3d, r28       ; 61\r
2511      ce0:       cf 91           pop     r28\r
2512      ce2:       df 91           pop     r29\r
2513      ce4:       1f 91           pop     r17\r
2514      ce6:       0f 91           pop     r16\r
2515      ce8:       ff 90           pop     r15\r
2516      cea:       ef 90           pop     r14\r
2517      cec:       df 90           pop     r13\r
2518      cee:       cf 90           pop     r12\r
2519      cf0:       bf 90           pop     r11\r
2520      cf2:       af 90           pop     r10\r
2521      cf4:       08 95           ret\r
2522 \r
2523 00000cf6 <dac>:\r
2524         LCD_Colon(0);\r
2525         return 0;\r
2526 }\r
2527 \r
2528 uint8 dac(char * arg)\r
2529 {\r
2530      cf6:       fc 01           movw    r30, r24\r
2531         if (arg[0] != '\0')\r
2532      cf8:       80 81           ld      r24, Z\r
2533      cfa:       88 23           and     r24, r24\r
2534      cfc:       49 f0           breq    .+18            ; 0xd10 <dac+0x1a>\r
2535         {\r
2536                 setup.dac_value = atoi(arg);\r
2537      cfe:       cf 01           movw    r24, r30\r
2538      d00:       0e 94 52 08     call    0x10a4  ; 0x10a4 <atoi>\r
2539      d04:       90 93 92 01     sts     0x0192, r25\r
2540      d08:       80 93 91 01     sts     0x0191, r24\r
2541                 DAC_Set(setup.dac_value);\r
2542      d0c:       0e 94 a8 07     call    0xf50   ; 0xf50 <DAC_Set>\r
2543         }\r
2544         USART_printf("# DAC %i\r\n", setup.dac_value);\r
2545      d10:       00 d0           rcall   .+0             ; 0xd12 <dac+0x1c>\r
2546      d12:       00 d0           rcall   .+0             ; 0xd14 <dac+0x1e>\r
2547      d14:       83 e2           ldi     r24, 0x23       ; 35\r
2548      d16:       91 e0           ldi     r25, 0x01       ; 1\r
2549      d18:       ed b7           in      r30, 0x3d       ; 61\r
2550      d1a:       fe b7           in      r31, 0x3e       ; 62\r
2551      d1c:       92 83           std     Z+2, r25        ; 0x02\r
2552      d1e:       81 83           std     Z+1, r24        ; 0x01\r
2553      d20:       80 91 91 01     lds     r24, 0x0191\r
2554      d24:       90 91 92 01     lds     r25, 0x0192\r
2555      d28:       94 83           std     Z+4, r25        ; 0x04\r
2556      d2a:       83 83           std     Z+3, r24        ; 0x03\r
2557      d2c:       0e 94 4c 04     call    0x898   ; 0x898 <USART_printf>\r
2558         LCD_printf("DAC %i", setup.dac_value);\r
2559      d30:       8e e2           ldi     r24, 0x2E       ; 46\r
2560      d32:       91 e0           ldi     r25, 0x01       ; 1\r
2561      d34:       ed b7           in      r30, 0x3d       ; 61\r
2562      d36:       fe b7           in      r31, 0x3e       ; 62\r
2563      d38:       92 83           std     Z+2, r25        ; 0x02\r
2564      d3a:       81 83           std     Z+1, r24        ; 0x01\r
2565      d3c:       80 91 91 01     lds     r24, 0x0191\r
2566      d40:       90 91 92 01     lds     r25, 0x0192\r
2567      d44:       94 83           std     Z+4, r25        ; 0x04\r
2568      d46:       83 83           std     Z+3, r24        ; 0x03\r
2569      d48:       0e 94 0d 03     call    0x61a   ; 0x61a <LCD_printf>\r
2570      d4c:       0f 90           pop     r0\r
2571      d4e:       0f 90           pop     r0\r
2572      d50:       0f 90           pop     r0\r
2573      d52:       0f 90           pop     r0\r
2574         return 0;\r
2575 }\r
2576      d54:       80 e0           ldi     r24, 0x00       ; 0\r
2577      d56:       08 95           ret\r
2578 \r
2579 00000d58 <read>:\r
2580 #include <string.h>\r
2581 #include <stdlib.h>\r
2582 \r
2583 \r
2584 uint8 read(char * arg)\r
2585 {\r
2586      d58:       ef 92           push    r14\r
2587      d5a:       ff 92           push    r15\r
2588      d5c:       0f 93           push    r16\r
2589      d5e:       1f 93           push    r17\r
2590      d60:       cf 93           push    r28\r
2591      d62:       df 93           push    r29\r
2592      d64:       8c 01           movw    r16, r24\r
2593         if (arg[0] == '\0')\r
2594      d66:       dc 01           movw    r26, r24\r
2595      d68:       8c 91           ld      r24, X\r
2596      d6a:       88 23           and     r24, r24\r
2597      d6c:       31 f0           breq    .+12            ; 0xd7a <read+0x22>\r
2598      d6e:       e8 01           movw    r28, r16\r
2599         {\r
2600                 for (char * a = arg; *a != '\0'; ++a)\r
2601                 {\r
2602                         //uint8 channel = *a - '0';\r
2603                         //if (channel >= 0 && channel <= 7) \r
2604                                 USART_printf("%i ", ADC_read(*a - '0'));\r
2605      d70:       95 e3           ldi     r25, 0x35       ; 53\r
2606      d72:       e9 2e           mov     r14, r25\r
2607      d74:       91 e0           ldi     r25, 0x01       ; 1\r
2608      d76:       f9 2e           mov     r15, r25\r
2609      d78:       2e c0           rjmp    .+92            ; 0xdd6 <read+0x7e>\r
2610 #include <stdlib.h>\r
2611 \r
2612 \r
2613 uint8 read(char * arg)\r
2614 {\r
2615         if (arg[0] == '\0')\r
2616      d7a:       10 e0           ldi     r17, 0x00       ; 0\r
2617         {\r
2618                 for (uint8 i=0; i < 8; ++i)\r
2619                 {\r
2620                         USART_printf("%i ", ADC_read(i));\r
2621      d7c:       c5 e3           ldi     r28, 0x35       ; 53\r
2622      d7e:       d1 e0           ldi     r29, 0x01       ; 1\r
2623      d80:       81 2f           mov     r24, r17\r
2624      d82:       0e 94 83 00     call    0x106   ; 0x106 <ADC_read>\r
2625      d86:       00 d0           rcall   .+0             ; 0xd88 <read+0x30>\r
2626      d88:       00 d0           rcall   .+0             ; 0xd8a <read+0x32>\r
2627      d8a:       ed b7           in      r30, 0x3d       ; 61\r
2628      d8c:       fe b7           in      r31, 0x3e       ; 62\r
2629      d8e:       d2 83           std     Z+2, r29        ; 0x02\r
2630      d90:       c1 83           std     Z+1, r28        ; 0x01\r
2631      d92:       94 83           std     Z+4, r25        ; 0x04\r
2632      d94:       83 83           std     Z+3, r24        ; 0x03\r
2633      d96:       0e 94 4c 04     call    0x898   ; 0x898 <USART_printf>\r
2634 \r
2635 uint8 read(char * arg)\r
2636 {\r
2637         if (arg[0] == '\0')\r
2638         {\r
2639                 for (uint8 i=0; i < 8; ++i)\r
2640      d9a:       1f 5f           subi    r17, 0xFF       ; 255\r
2641      d9c:       0f 90           pop     r0\r
2642      d9e:       0f 90           pop     r0\r
2643      da0:       0f 90           pop     r0\r
2644      da2:       0f 90           pop     r0\r
2645      da4:       18 30           cpi     r17, 0x08       ; 8\r
2646      da6:       61 f7           brne    .-40            ; 0xd80 <read+0x28>\r
2647      da8:       34 c0           rjmp    .+104           ; 0xe12 <read+0xba>\r
2648         {\r
2649                 for (char * a = arg; *a != '\0'; ++a)\r
2650                 {\r
2651                         //uint8 channel = *a - '0';\r
2652                         //if (channel >= 0 && channel <= 7) \r
2653                                 USART_printf("%i ", ADC_read(*a - '0'));\r
2654      daa:       80 53           subi    r24, 0x30       ; 48\r
2655      dac:       0e 94 83 00     call    0x106   ; 0x106 <ADC_read>\r
2656      db0:       00 d0           rcall   .+0             ; 0xdb2 <read+0x5a>\r
2657      db2:       00 d0           rcall   .+0             ; 0xdb4 <read+0x5c>\r
2658      db4:       ad b7           in      r26, 0x3d       ; 61\r
2659      db6:       be b7           in      r27, 0x3e       ; 62\r
2660      db8:       12 96           adiw    r26, 0x02       ; 2\r
2661      dba:       fc 92           st      X, r15\r
2662      dbc:       ee 92           st      -X, r14\r
2663      dbe:       11 97           sbiw    r26, 0x01       ; 1\r
2664      dc0:       14 96           adiw    r26, 0x04       ; 4\r
2665      dc2:       9c 93           st      X, r25\r
2666      dc4:       8e 93           st      -X, r24\r
2667      dc6:       13 97           sbiw    r26, 0x03       ; 3\r
2668      dc8:       0e 94 4c 04     call    0x898   ; 0x898 <USART_printf>\r
2669                         USART_printf("%i ", ADC_read(i));\r
2670                 }\r
2671         }\r
2672         else\r
2673         {\r
2674                 for (char * a = arg; *a != '\0'; ++a)\r
2675      dcc:       21 96           adiw    r28, 0x01       ; 1\r
2676      dce:       0f 90           pop     r0\r
2677      dd0:       0f 90           pop     r0\r
2678      dd2:       0f 90           pop     r0\r
2679      dd4:       0f 90           pop     r0\r
2680      dd6:       88 81           ld      r24, Y\r
2681      dd8:       88 23           and     r24, r24\r
2682      dda:       39 f7           brne    .-50            ; 0xdaa <read+0x52>\r
2683                 {\r
2684                         //uint8 channel = *a - '0';\r
2685                         //if (channel >= 0 && channel <= 7) \r
2686                                 USART_printf("%i ", ADC_read(*a - '0'));\r
2687                 }\r
2688                 LCD_printf("%i", setup.adc_values[(int)(arg[0] - '0')]);\r
2689      ddc:       00 d0           rcall   .+0             ; 0xdde <read+0x86>\r
2690      dde:       00 d0           rcall   .+0             ; 0xde0 <read+0x88>\r
2691      de0:       89 e3           ldi     r24, 0x39       ; 57\r
2692      de2:       91 e0           ldi     r25, 0x01       ; 1\r
2693      de4:       ed b7           in      r30, 0x3d       ; 61\r
2694      de6:       fe b7           in      r31, 0x3e       ; 62\r
2695      de8:       92 83           std     Z+2, r25        ; 0x02\r
2696      dea:       81 83           std     Z+1, r24        ; 0x01\r
2697      dec:       d8 01           movw    r26, r16\r
2698      dee:       ec 91           ld      r30, X\r
2699      df0:       f0 e0           ldi     r31, 0x00       ; 0\r
2700      df2:       ee 0f           add     r30, r30\r
2701      df4:       ff 1f           adc     r31, r31\r
2702      df6:       ed 5c           subi    r30, 0xCD       ; 205\r
2703      df8:       fe 4f           sbci    r31, 0xFE       ; 254\r
2704      dfa:       80 81           ld      r24, Z\r
2705      dfc:       91 81           ldd     r25, Z+1        ; 0x01\r
2706      dfe:       ed b7           in      r30, 0x3d       ; 61\r
2707      e00:       fe b7           in      r31, 0x3e       ; 62\r
2708      e02:       94 83           std     Z+4, r25        ; 0x04\r
2709      e04:       83 83           std     Z+3, r24        ; 0x03\r
2710      e06:       0e 94 0d 03     call    0x61a   ; 0x61a <LCD_printf>\r
2711      e0a:       0f 90           pop     r0\r
2712      e0c:       0f 90           pop     r0\r
2713      e0e:       0f 90           pop     r0\r
2714      e10:       0f 90           pop     r0\r
2715         }\r
2716         USART_printf("\r\n");\r
2717      e12:       00 d0           rcall   .+0             ; 0xe14 <read+0xbc>\r
2718      e14:       8c e3           ldi     r24, 0x3C       ; 60\r
2719      e16:       91 e0           ldi     r25, 0x01       ; 1\r
2720      e18:       ad b7           in      r26, 0x3d       ; 61\r
2721      e1a:       be b7           in      r27, 0x3e       ; 62\r
2722      e1c:       12 96           adiw    r26, 0x02       ; 2\r
2723      e1e:       9c 93           st      X, r25\r
2724      e20:       8e 93           st      -X, r24\r
2725      e22:       11 97           sbiw    r26, 0x01       ; 1\r
2726      e24:       0e 94 4c 04     call    0x898   ; 0x898 <USART_printf>\r
2727      e28:       0f 90           pop     r0\r
2728      e2a:       0f 90           pop     r0\r
2729 \r
2730         return 0;\r
2731 }\r
2732      e2c:       80 e0           ldi     r24, 0x00       ; 0\r
2733      e2e:       df 91           pop     r29\r
2734      e30:       cf 91           pop     r28\r
2735      e32:       1f 91           pop     r17\r
2736      e34:       0f 91           pop     r16\r
2737      e36:       ff 90           pop     r15\r
2738      e38:       ef 90           pop     r14\r
2739      e3a:       08 95           ret\r
2740 \r
2741 00000e3c <poll>:\r
2742 \r
2743 uint8 poll(char * arg)\r
2744 {\r
2745      e3c:       cf 92           push    r12\r
2746      e3e:       df 92           push    r13\r
2747      e40:       ef 92           push    r14\r
2748      e42:       ff 92           push    r15\r
2749      e44:       0f 93           push    r16\r
2750      e46:       1f 93           push    r17\r
2751      e48:       cf 93           push    r28\r
2752      e4a:       df 93           push    r29\r
2753      e4c:       ec 01           movw    r28, r24\r
2754         uint32 tmr = 0;\r
2755         USART_printf("# poll\r\n");\r
2756      e4e:       00 d0           rcall   .+0             ; 0xe50 <poll+0x14>\r
2757      e50:       8f e3           ldi     r24, 0x3F       ; 63\r
2758      e52:       91 e0           ldi     r25, 0x01       ; 1\r
2759      e54:       ed b7           in      r30, 0x3d       ; 61\r
2760      e56:       fe b7           in      r31, 0x3e       ; 62\r
2761      e58:       92 83           std     Z+2, r25        ; 0x02\r
2762      e5a:       81 83           std     Z+1, r24        ; 0x01\r
2763      e5c:       0e 94 4c 04     call    0x898   ; 0x898 <USART_printf>\r
2764         LCD_puts("poll");\r
2765      e60:       0f 90           pop     r0\r
2766      e62:       0f 90           pop     r0\r
2767      e64:       88 e4           ldi     r24, 0x48       ; 72\r
2768      e66:       91 e0           ldi     r25, 0x01       ; 1\r
2769      e68:       0e 94 0c 02     call    0x418   ; 0x418 <LCD_puts>\r
2770      e6c:       ee 24           eor     r14, r14\r
2771      e6e:       ff 24           eor     r15, r15\r
2772      e70:       87 01           movw    r16, r14\r
2773         //USART_printf("#t      ADC0    ADC1    ADC2    ADC3    ADC4    ADC5    ADC6    ADC7\r\n);      \r
2774         do\r
2775         {\r
2776                 setup.elapsed_time = 0;\r
2777                 USART_printf("%l ", tmr);\r
2778      e72:       2d e4           ldi     r18, 0x4D       ; 77\r
2779      e74:       c2 2e           mov     r12, r18\r
2780      e76:       21 e0           ldi     r18, 0x01       ; 1\r
2781      e78:       d2 2e           mov     r13, r18\r
2782         USART_printf("# poll\r\n");\r
2783         LCD_puts("poll");\r
2784         //USART_printf("#t      ADC0    ADC1    ADC2    ADC3    ADC4    ADC5    ADC6    ADC7\r\n);      \r
2785         do\r
2786         {\r
2787                 setup.elapsed_time = 0;\r
2788      e7a:       10 92 8d 01     sts     0x018D, r1\r
2789      e7e:       10 92 8e 01     sts     0x018E, r1\r
2790      e82:       10 92 8f 01     sts     0x018F, r1\r
2791      e86:       10 92 90 01     sts     0x0190, r1\r
2792                 USART_printf("%l ", tmr);\r
2793      e8a:       00 d0           rcall   .+0             ; 0xe8c <poll+0x50>\r
2794      e8c:       00 d0           rcall   .+0             ; 0xe8e <poll+0x52>\r
2795      e8e:       00 d0           rcall   .+0             ; 0xe90 <poll+0x54>\r
2796      e90:       ed b7           in      r30, 0x3d       ; 61\r
2797      e92:       fe b7           in      r31, 0x3e       ; 62\r
2798      e94:       d2 82           std     Z+2, r13        ; 0x02\r
2799      e96:       c1 82           std     Z+1, r12        ; 0x01\r
2800      e98:       e3 82           std     Z+3, r14        ; 0x03\r
2801      e9a:       f4 82           std     Z+4, r15        ; 0x04\r
2802      e9c:       05 83           std     Z+5, r16        ; 0x05\r
2803      e9e:       16 83           std     Z+6, r17        ; 0x06\r
2804      ea0:       0e 94 4c 04     call    0x898   ; 0x898 <USART_printf>\r
2805                 read(arg);\r
2806      ea4:       8d b7           in      r24, 0x3d       ; 61\r
2807      ea6:       9e b7           in      r25, 0x3e       ; 62\r
2808      ea8:       06 96           adiw    r24, 0x06       ; 6\r
2809      eaa:       0f b6           in      r0, 0x3f        ; 63\r
2810      eac:       f8 94           cli\r
2811      eae:       9e bf           out     0x3e, r25       ; 62\r
2812      eb0:       0f be           out     0x3f, r0        ; 63\r
2813      eb2:       8d bf           out     0x3d, r24       ; 61\r
2814      eb4:       ce 01           movw    r24, r28\r
2815      eb6:       0e 94 ac 06     call    0xd58   ; 0xd58 <read>\r
2816                 if (arg[0] == '\0' || arg[1] == 't')\r
2817      eba:       88 81           ld      r24, Y\r
2818      ebc:       88 23           and     r24, r24\r
2819      ebe:       19 f0           breq    .+6             ; 0xec6 <poll+0x8a>\r
2820      ec0:       89 81           ldd     r24, Y+1        ; 0x01\r
2821      ec2:       84 37           cpi     r24, 0x74       ; 116\r
2822      ec4:       61 f4           brne    .+24            ; 0xede <poll+0xa2>\r
2823                 {\r
2824                         LCD_Colon(1);\r
2825      ec6:       81 e0           ldi     r24, 0x01       ; 1\r
2826      ec8:       0e 94 4a 02     call    0x494   ; 0x494 <LCD_Colon>\r
2827                         LCD_ShowTime(tmr);\r
2828      ecc:       c8 01           movw    r24, r16\r
2829      ece:       b7 01           movw    r22, r14\r
2830      ed0:       0e 94 64 02     call    0x4c8   ; 0x4c8 <LCD_ShowTime>\r
2831      ed4:       04 c0           rjmp    .+8             ; 0xede <poll+0xa2>\r
2832                 //      return 255;\r
2833                 //}\r
2834 \r
2835                 while (setup.elapsed_time < setup.poll_delay)\r
2836                 {\r
2837                         if (USART_Poll() != '\0')\r
2838      ed6:       0e 94 43 04     call    0x886   ; 0x886 <USART_Poll>\r
2839      eda:       88 23           and     r24, r24\r
2840      edc:       29 f5           brne    .+74            ; 0xf28 <poll+0xec>\r
2841                 //{\r
2842                 //      USART_printf("# tmr>delay\r\n");\r
2843                 //      return 255;\r
2844                 //}\r
2845 \r
2846                 while (setup.elapsed_time < setup.poll_delay)\r
2847      ede:       20 91 8d 01     lds     r18, 0x018D\r
2848      ee2:       30 91 8e 01     lds     r19, 0x018E\r
2849      ee6:       40 91 8f 01     lds     r20, 0x018F\r
2850      eea:       50 91 90 01     lds     r21, 0x0190\r
2851      eee:       80 91 85 01     lds     r24, 0x0185\r
2852      ef2:       90 91 86 01     lds     r25, 0x0186\r
2853      ef6:       a0 e0           ldi     r26, 0x00       ; 0\r
2854      ef8:       b0 e0           ldi     r27, 0x00       ; 0\r
2855      efa:       28 17           cp      r18, r24\r
2856      efc:       39 07           cpc     r19, r25\r
2857      efe:       4a 07           cpc     r20, r26\r
2858      f00:       5b 07           cpc     r21, r27\r
2859      f02:       48 f3           brcs    .-46            ; 0xed6 <poll+0x9a>\r
2860                                 //USART_printf("# STOP %i\r\n", tmr+setup.elapsed_time);\r
2861                                 LCD_Colon(0);\r
2862                                 return 0;\r
2863                         }\r
2864                 }\r
2865                 tmr += setup.elapsed_time;\r
2866      f04:       e2 0e           add     r14, r18\r
2867      f06:       f3 1e           adc     r15, r19\r
2868      f08:       04 1f           adc     r16, r20\r
2869      f0a:       15 1f           adc     r17, r21\r
2870         }\r
2871         while (tmr < setup.poll_timeout);\r
2872      f0c:       80 91 89 01     lds     r24, 0x0189\r
2873      f10:       90 91 8a 01     lds     r25, 0x018A\r
2874      f14:       a0 91 8b 01     lds     r26, 0x018B\r
2875      f18:       b0 91 8c 01     lds     r27, 0x018C\r
2876      f1c:       e8 16           cp      r14, r24\r
2877      f1e:       f9 06           cpc     r15, r25\r
2878      f20:       0a 07           cpc     r16, r26\r
2879      f22:       1b 07           cpc     r17, r27\r
2880      f24:       08 f4           brcc    .+2             ; 0xf28 <poll+0xec>\r
2881      f26:       a9 cf           rjmp    .-174           ; 0xe7a <poll+0x3e>\r
2882         //USART_printf("# done.\r\n");\r
2883         LCD_Colon(0);\r
2884      f28:       80 e0           ldi     r24, 0x00       ; 0\r
2885      f2a:       0e 94 4a 02     call    0x494   ; 0x494 <LCD_Colon>\r
2886         return 0;\r
2887 }\r
2888      f2e:       80 e0           ldi     r24, 0x00       ; 0\r
2889      f30:       df 91           pop     r29\r
2890      f32:       cf 91           pop     r28\r
2891      f34:       1f 91           pop     r17\r
2892      f36:       0f 91           pop     r16\r
2893      f38:       ff 90           pop     r15\r
2894      f3a:       ef 90           pop     r14\r
2895      f3c:       df 90           pop     r13\r
2896      f3e:       cf 90           pop     r12\r
2897      f40:       08 95           ret\r
2898 \r
2899 00000f42 <DAC_Init>:\r
2900 void DAC_Init(void)\r
2901 {\r
2902         //prevDDR = DAC_DDR;\r
2903         //prevPORT = DAC_PORT;\r
2904 \r
2905         DAC_DDR = 0xFF & ~(1<<PORTB6);\r
2906      f42:       8f eb           ldi     r24, 0xBF       ; 191\r
2907      f44:       84 b9           out     0x04, r24       ; 4\r
2908         DAC_PORT = 0xFF | (1<<PORTB6);\r
2909      f46:       8f ef           ldi     r24, 0xFF       ; 255\r
2910      f48:       85 b9           out     0x05, r24       ; 5\r
2911 \r
2912         DAC_PORT = (1<<CS) | (1<<LDAC) | (1<<SHDN) | (1<<PORTB6);\r
2913      f4a:       86 e5           ldi     r24, 0x56       ; 86\r
2914      f4c:       85 b9           out     0x05, r24       ; 5\r
2915         //runningDAC = TRUE;\r
2916 }\r
2917      f4e:       08 95           ret\r
2918 \r
2919 00000f50 <DAC_Set>:\r
2920 \r
2921 void DAC_Set(int output)\r
2922 {\r
2923      f50:       ac 01           movw    r20, r24\r
2924 void DAC_Init(void)\r
2925 {\r
2926         //prevDDR = DAC_DDR;\r
2927         //prevPORT = DAC_PORT;\r
2928 \r
2929         DAC_DDR = 0xFF & ~(1<<PORTB6);\r
2930      f52:       8f eb           ldi     r24, 0xBF       ; 191\r
2931      f54:       84 b9           out     0x04, r24       ; 4\r
2932         DAC_PORT = 0xFF | (1<<PORTB6);\r
2933      f56:       8f ef           ldi     r24, 0xFF       ; 255\r
2934      f58:       85 b9           out     0x05, r24       ; 5\r
2935 \r
2936         DAC_PORT = (1<<CS) | (1<<LDAC) | (1<<SHDN) | (1<<PORTB6);\r
2937      f5a:       86 e5           ldi     r24, 0x56       ; 86\r
2938      f5c:       85 b9           out     0x05, r24       ; 5\r
2939 \r
2940 void DAC_Set(int output)\r
2941 {\r
2942         DAC_Init();\r
2943         \r
2944         while (SCK_ON);\r
2945      f5e:       2b 99           sbic    0x05, 3 ; 5\r
2946      f60:       fe cf           rjmp    .-4             ; 0xf5e <DAC_Set+0xe>\r
2947                 \r
2948         DAC_PORT |= (1<<CS) | (1<<LDAC);\r
2949      f62:       85 b1           in      r24, 0x05       ; 5\r
2950      f64:       86 60           ori     r24, 0x06       ; 6\r
2951      f66:       85 b9           out     0x05, r24       ; 5\r
2952 \r
2953         while (SCK_OFF);\r
2954      f68:       2b 9b           sbis    0x05, 3 ; 5\r
2955      f6a:       fe cf           rjmp    .-4             ; 0xf68 <DAC_Set+0x18>\r
2956         while (SCK_ON);\r
2957      f6c:       2b 99           sbic    0x05, 3 ; 5\r
2958      f6e:       fe cf           rjmp    .-4             ; 0xf6c <DAC_Set+0x1c>\r
2959         \r
2960         //Wait for clock off\r
2961 \r
2962         //Set CS low\r
2963         DAC_PORT &= ~(1<<CS);\r
2964      f70:       29 98           cbi     0x05, 1 ; 5\r
2965 \r
2966         //Configuration bits:\r
2967 \r
2968         //A/B\r
2969         DAC_PORT &= ~(1<<SDI); //Select DAC A\r
2970      f72:       28 98           cbi     0x05, 0 ; 5\r
2971 \r
2972         while (SCK_OFF);\r
2973      f74:       2b 9b           sbis    0x05, 3 ; 5\r
2974      f76:       fe cf           rjmp    .-4             ; 0xf74 <DAC_Set+0x24>\r
2975         while (SCK_ON);\r
2976      f78:       2b 99           sbic    0x05, 3 ; 5\r
2977      f7a:       fe cf           rjmp    .-4             ; 0xf78 <DAC_Set+0x28>\r
2978 \r
2979         //BUF\r
2980         DAC_PORT |= (1<<SDI); //Select buffered reference voltage\r
2981      f7c:       28 9a           sbi     0x05, 0 ; 5\r
2982 \r
2983         while (SCK_OFF);\r
2984      f7e:       2b 9b           sbis    0x05, 3 ; 5\r
2985      f80:       fe cf           rjmp    .-4             ; 0xf7e <DAC_Set+0x2e>\r
2986         while (SCK_ON);\r
2987      f82:       2b 99           sbic    0x05, 3 ; 5\r
2988      f84:       fe cf           rjmp    .-4             ; 0xf82 <DAC_Set+0x32>\r
2989 \r
2990         //GA\r
2991         if (output > 0xFFF)\r
2992      f86:       80 e1           ldi     r24, 0x10       ; 16\r
2993      f88:       40 30           cpi     r20, 0x00       ; 0\r
2994      f8a:       58 07           cpc     r21, r24\r
2995      f8c:       24 f0           brlt    .+8             ; 0xf96 <DAC_Set+0x46>\r
2996         {\r
2997                 DAC_PORT &= ~(1<<SDI); //Select 2x gain\r
2998      f8e:       28 98           cbi     0x05, 0 ; 5\r
2999                 output = output / 2;\r
3000      f90:       55 95           asr     r21\r
3001      f92:       47 95           ror     r20\r
3002      f94:       01 c0           rjmp    .+2             ; 0xf98 <DAC_Set+0x48>\r
3003         }\r
3004         else\r
3005                 DAC_PORT |= (1<<SDI); //Select 1x gain\r
3006      f96:       28 9a           sbi     0x05, 0 ; 5\r
3007 \r
3008         while (SCK_OFF);\r
3009      f98:       2b 9b           sbis    0x05, 3 ; 5\r
3010      f9a:       fe cf           rjmp    .-4             ; 0xf98 <DAC_Set+0x48>\r
3011         while (SCK_ON);\r
3012      f9c:       2b 99           sbic    0x05, 3 ; 5\r
3013      f9e:       fe cf           rjmp    .-4             ; 0xf9c <DAC_Set+0x4c>\r
3014 \r
3015         //SHDN\r
3016         DAC_PORT |= (1<<SDI); //DAC is turned on!\r
3017      fa0:       28 9a           sbi     0x05, 0 ; 5\r
3018 \r
3019         while (SCK_OFF);\r
3020      fa2:       2b 9b           sbis    0x05, 3 ; 5\r
3021      fa4:       fe cf           rjmp    .-4             ; 0xfa2 <DAC_Set+0x52>\r
3022         while (SCK_ON);\r
3023      fa6:       2b 99           sbic    0x05, 3 ; 5\r
3024      fa8:       fe cf           rjmp    .-4             ; 0xfa6 <DAC_Set+0x56>\r
3025      faa:       2b e0           ldi     r18, 0x0B       ; 11\r
3026      fac:       30 e0           ldi     r19, 0x00       ; 0\r
3027 \r
3028         //Now send the 12 data bits\r
3029         for (int i=1; i <= 12; ++i)\r
3030         {\r
3031                 if ((output & (1<<(12-i))) == 0x00)\r
3032      fae:       ca 01           movw    r24, r20\r
3033      fb0:       02 2e           mov     r0, r18\r
3034      fb2:       02 c0           rjmp    .+4             ; 0xfb8 <DAC_Set+0x68>\r
3035      fb4:       95 95           asr     r25\r
3036      fb6:       87 95           ror     r24\r
3037      fb8:       0a 94           dec     r0\r
3038      fba:       e2 f7           brpl    .-8             ; 0xfb4 <DAC_Set+0x64>\r
3039      fbc:       80 fd           sbrc    r24, 0\r
3040      fbe:       02 c0           rjmp    .+4             ; 0xfc4 <DAC_Set+0x74>\r
3041                         DAC_PORT &= ~(1<<SDI);\r
3042      fc0:       28 98           cbi     0x05, 0 ; 5\r
3043      fc2:       01 c0           rjmp    .+2             ; 0xfc6 <DAC_Set+0x76>\r
3044                 else\r
3045                         DAC_PORT |= (1<<SDI);\r
3046      fc4:       28 9a           sbi     0x05, 0 ; 5\r
3047 \r
3048         \r
3049                 while (SCK_OFF);\r
3050      fc6:       2b 9b           sbis    0x05, 3 ; 5\r
3051      fc8:       fe cf           rjmp    .-4             ; 0xfc6 <DAC_Set+0x76>\r
3052                 while (SCK_ON);\r
3053      fca:       2b 99           sbic    0x05, 3 ; 5\r
3054      fcc:       fe cf           rjmp    .-4             ; 0xfca <DAC_Set+0x7a>\r
3055      fce:       21 50           subi    r18, 0x01       ; 1\r
3056      fd0:       30 40           sbci    r19, 0x00       ; 0\r
3057 \r
3058         while (SCK_OFF);\r
3059         while (SCK_ON);\r
3060 \r
3061         //Now send the 12 data bits\r
3062         for (int i=1; i <= 12; ++i)\r
3063      fd2:       8f ef           ldi     r24, 0xFF       ; 255\r
3064      fd4:       2f 3f           cpi     r18, 0xFF       ; 255\r
3065      fd6:       38 07           cpc     r19, r24\r
3066      fd8:       51 f7           brne    .-44            ; 0xfae <DAC_Set+0x5e>\r
3067                 while (SCK_OFF);\r
3068                 while (SCK_ON);\r
3069         }\r
3070 \r
3071         // Set CS to 1\r
3072         DAC_PORT |= (1<<CS);\r
3073      fda:       29 9a           sbi     0x05, 1 ; 5\r
3074 \r
3075         while (SCK_OFF);\r
3076      fdc:       2b 9b           sbis    0x05, 3 ; 5\r
3077      fde:       fe cf           rjmp    .-4             ; 0xfdc <DAC_Set+0x8c>\r
3078         while (SCK_ON);\r
3079      fe0:       2b 99           sbic    0x05, 3 ; 5\r
3080      fe2:       fe cf           rjmp    .-4             ; 0xfe0 <DAC_Set+0x90>\r
3081 \r
3082         //Toggle LDAC\r
3083         DAC_PORT &= ~(1<<LDAC);\r
3084      fe4:       2a 98           cbi     0x05, 2 ; 5\r
3085 \r
3086         while (SCK_OFF);\r
3087      fe6:       2b 9b           sbis    0x05, 3 ; 5\r
3088      fe8:       fe cf           rjmp    .-4             ; 0xfe6 <DAC_Set+0x96>\r
3089         while (SCK_ON);\r
3090      fea:       2b 99           sbic    0x05, 3 ; 5\r
3091      fec:       fe cf           rjmp    .-4             ; 0xfea <DAC_Set+0x9a>\r
3092 \r
3093         DAC_PORT |= (1<<LDAC);\r
3094      fee:       2a 9a           sbi     0x05, 2 ; 5\r
3095 \r
3096         while (SCK_OFF);\r
3097      ff0:       2b 9b           sbis    0x05, 3 ; 5\r
3098      ff2:       fe cf           rjmp    .-4             ; 0xff0 <DAC_Set+0xa0>\r
3099         while (SCK_ON);\r
3100      ff4:       2b 99           sbic    0x05, 3 ; 5\r
3101      ff6:       fe cf           rjmp    .-4             ; 0xff4 <DAC_Set+0xa4>\r
3102 }\r
3103      ff8:       08 95           ret\r
3104 \r
3105 00000ffa <__mulsi3>:\r
3106      ffa:       62 9f           mul     r22, r18\r
3107      ffc:       d0 01           movw    r26, r0\r
3108      ffe:       73 9f           mul     r23, r19\r
3109     1000:       f0 01           movw    r30, r0\r
3110     1002:       82 9f           mul     r24, r18\r
3111     1004:       e0 0d           add     r30, r0\r
3112     1006:       f1 1d           adc     r31, r1\r
3113     1008:       64 9f           mul     r22, r20\r
3114     100a:       e0 0d           add     r30, r0\r
3115     100c:       f1 1d           adc     r31, r1\r
3116     100e:       92 9f           mul     r25, r18\r
3117     1010:       f0 0d           add     r31, r0\r
3118     1012:       83 9f           mul     r24, r19\r
3119     1014:       f0 0d           add     r31, r0\r
3120     1016:       74 9f           mul     r23, r20\r
3121     1018:       f0 0d           add     r31, r0\r
3122     101a:       65 9f           mul     r22, r21\r
3123     101c:       f0 0d           add     r31, r0\r
3124     101e:       99 27           eor     r25, r25\r
3125     1020:       72 9f           mul     r23, r18\r
3126     1022:       b0 0d           add     r27, r0\r
3127     1024:       e1 1d           adc     r30, r1\r
3128     1026:       f9 1f           adc     r31, r25\r
3129     1028:       63 9f           mul     r22, r19\r
3130     102a:       b0 0d           add     r27, r0\r
3131     102c:       e1 1d           adc     r30, r1\r
3132     102e:       f9 1f           adc     r31, r25\r
3133     1030:       bd 01           movw    r22, r26\r
3134     1032:       cf 01           movw    r24, r30\r
3135     1034:       11 24           eor     r1, r1\r
3136     1036:       08 95           ret\r
3137 \r
3138 00001038 <__udivmodhi4>:\r
3139     1038:       aa 1b           sub     r26, r26\r
3140     103a:       bb 1b           sub     r27, r27\r
3141     103c:       51 e1           ldi     r21, 0x11       ; 17\r
3142     103e:       07 c0           rjmp    .+14            ; 0x104e <__udivmodhi4_ep>\r
3143 \r
3144 00001040 <__udivmodhi4_loop>:\r
3145     1040:       aa 1f           adc     r26, r26\r
3146     1042:       bb 1f           adc     r27, r27\r
3147     1044:       a6 17           cp      r26, r22\r
3148     1046:       b7 07           cpc     r27, r23\r
3149     1048:       10 f0           brcs    .+4             ; 0x104e <__udivmodhi4_ep>\r
3150     104a:       a6 1b           sub     r26, r22\r
3151     104c:       b7 0b           sbc     r27, r23\r
3152 \r
3153 0000104e <__udivmodhi4_ep>:\r
3154     104e:       88 1f           adc     r24, r24\r
3155     1050:       99 1f           adc     r25, r25\r
3156     1052:       5a 95           dec     r21\r
3157     1054:       a9 f7           brne    .-22            ; 0x1040 <__udivmodhi4_loop>\r
3158     1056:       80 95           com     r24\r
3159     1058:       90 95           com     r25\r
3160     105a:       bc 01           movw    r22, r24\r
3161     105c:       cd 01           movw    r24, r26\r
3162     105e:       08 95           ret\r
3163 \r
3164 00001060 <__udivmodsi4>:\r
3165     1060:       a1 e2           ldi     r26, 0x21       ; 33\r
3166     1062:       1a 2e           mov     r1, r26\r
3167     1064:       aa 1b           sub     r26, r26\r
3168     1066:       bb 1b           sub     r27, r27\r
3169     1068:       fd 01           movw    r30, r26\r
3170     106a:       0d c0           rjmp    .+26            ; 0x1086 <__udivmodsi4_ep>\r
3171 \r
3172 0000106c <__udivmodsi4_loop>:\r
3173     106c:       aa 1f           adc     r26, r26\r
3174     106e:       bb 1f           adc     r27, r27\r
3175     1070:       ee 1f           adc     r30, r30\r
3176     1072:       ff 1f           adc     r31, r31\r
3177     1074:       a2 17           cp      r26, r18\r
3178     1076:       b3 07           cpc     r27, r19\r
3179     1078:       e4 07           cpc     r30, r20\r
3180     107a:       f5 07           cpc     r31, r21\r
3181     107c:       20 f0           brcs    .+8             ; 0x1086 <__udivmodsi4_ep>\r
3182     107e:       a2 1b           sub     r26, r18\r
3183     1080:       b3 0b           sbc     r27, r19\r
3184     1082:       e4 0b           sbc     r30, r20\r
3185     1084:       f5 0b           sbc     r31, r21\r
3186 \r
3187 00001086 <__udivmodsi4_ep>:\r
3188     1086:       66 1f           adc     r22, r22\r
3189     1088:       77 1f           adc     r23, r23\r
3190     108a:       88 1f           adc     r24, r24\r
3191     108c:       99 1f           adc     r25, r25\r
3192     108e:       1a 94           dec     r1\r
3193     1090:       69 f7           brne    .-38            ; 0x106c <__udivmodsi4_loop>\r
3194     1092:       60 95           com     r22\r
3195     1094:       70 95           com     r23\r
3196     1096:       80 95           com     r24\r
3197     1098:       90 95           com     r25\r
3198     109a:       9b 01           movw    r18, r22\r
3199     109c:       ac 01           movw    r20, r24\r
3200     109e:       bd 01           movw    r22, r26\r
3201     10a0:       cf 01           movw    r24, r30\r
3202     10a2:       08 95           ret\r
3203 \r
3204 000010a4 <atoi>:\r
3205     10a4:       fc 01           movw    r30, r24\r
3206     10a6:       88 27           eor     r24, r24\r
3207     10a8:       99 27           eor     r25, r25\r
3208     10aa:       e8 94           clt\r
3209     10ac:       21 91           ld      r18, Z+\r
3210     10ae:       20 32           cpi     r18, 0x20       ; 32\r
3211     10b0:       e9 f3           breq    .-6             ; 0x10ac <atoi+0x8>\r
3212     10b2:       29 30           cpi     r18, 0x09       ; 9\r
3213     10b4:       10 f0           brcs    .+4             ; 0x10ba <atoi+0x16>\r
3214     10b6:       2e 30           cpi     r18, 0x0E       ; 14\r
3215     10b8:       c8 f3           brcs    .-14            ; 0x10ac <atoi+0x8>\r
3216     10ba:       2b 32           cpi     r18, 0x2B       ; 43\r
3217     10bc:       41 f0           breq    .+16            ; 0x10ce <atoi+0x2a>\r
3218     10be:       2d 32           cpi     r18, 0x2D       ; 45\r
3219     10c0:       39 f4           brne    .+14            ; 0x10d0 <atoi+0x2c>\r
3220     10c2:       68 94           set\r
3221     10c4:       04 c0           rjmp    .+8             ; 0x10ce <atoi+0x2a>\r
3222     10c6:       0e 94 70 08     call    0x10e0  ; 0x10e0 <__mulhi_const_10>\r
3223     10ca:       82 0f           add     r24, r18\r
3224     10cc:       91 1d           adc     r25, r1\r
3225     10ce:       21 91           ld      r18, Z+\r
3226     10d0:       20 53           subi    r18, 0x30       ; 48\r
3227     10d2:       2a 30           cpi     r18, 0x0A       ; 10\r
3228     10d4:       c0 f3           brcs    .-16            ; 0x10c6 <atoi+0x22>\r
3229     10d6:       1e f4           brtc    .+6             ; 0x10de <atoi+0x3a>\r
3230     10d8:       90 95           com     r25\r
3231     10da:       81 95           neg     r24\r
3232     10dc:       9f 4f           sbci    r25, 0xFF       ; 255\r
3233     10de:       08 95           ret\r
3234 \r
3235 000010e0 <__mulhi_const_10>:\r
3236     10e0:       7a e0           ldi     r23, 0x0A       ; 10\r
3237     10e2:       97 9f           mul     r25, r23\r
3238     10e4:       90 2d           mov     r25, r0\r
3239     10e6:       87 9f           mul     r24, r23\r
3240     10e8:       80 2d           mov     r24, r0\r
3241     10ea:       91 0d           add     r25, r1\r
3242     10ec:       11 24           eor     r1, r1\r
3243     10ee:       08 95           ret\r
3244 \r
3245 000010f0 <_exit>:\r
3246     10f0:       f8 94           cli\r
3247 \r
3248 000010f2 <__stop_program>:\r
3249     10f2:       ff cf           rjmp    .-2             ; 0x10f2 <__stop_program>\r

UCC git Repository :: git.ucc.asn.au