
Main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00001090  00000000  00000000  000000b4  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         000000e6  00800060  00001090  00001144  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000056  00800146  00800146  0000122a  2**0
                  ALLOC
  3 .eeprom       00000038  00810000  00810000  0000122a  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  4 .stab         000009c0  00000000  00000000  00001264  2**2
                  CONTENTS, READONLY, DEBUGGING
  5 .stabstr      000001b2  00000000  00000000  00001c24  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_aranges 00000060  00000000  00000000  00001dd8  2**3
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_pubnames 000002b9  00000000  00000000  00001e38  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_info   0000136b  00000000  00000000  000020f1  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_abbrev 000002fc  00000000  00000000  0000345c  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_line   00000dc9  00000000  00000000  00003758  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_frame  00000150  00000000  00000000  00004524  2**2
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    000002ff  00000000  00000000  00004674  2**0
                  CONTENTS, READONLY, DEBUGGING
 13 .debug_loc    00000508  00000000  00000000  00004973  2**0
                  CONTENTS, READONLY, DEBUGGING
 14 .debug_pubtypes 00000044  00000000  00000000  00004e7b  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
       0:	12 c0       	rjmp	.+36     	; 0x26 <__ctors_end>
       2:	2c c0       	rjmp	.+88     	; 0x5c <__bad_interrupt>
       4:	2b c0       	rjmp	.+86     	; 0x5c <__bad_interrupt>
       6:	4f c1       	rjmp	.+670    	; 0x2a6 <__vector_3>
       8:	29 c0       	rjmp	.+82     	; 0x5c <__bad_interrupt>
       a:	28 c0       	rjmp	.+80     	; 0x5c <__bad_interrupt>
       c:	27 c0       	rjmp	.+78     	; 0x5c <__bad_interrupt>
       e:	26 c0       	rjmp	.+76     	; 0x5c <__bad_interrupt>
      10:	25 c0       	rjmp	.+74     	; 0x5c <__bad_interrupt>
      12:	24 c0       	rjmp	.+72     	; 0x5c <__bad_interrupt>
      14:	23 c0       	rjmp	.+70     	; 0x5c <__bad_interrupt>
      16:	22 c0       	rjmp	.+68     	; 0x5c <__bad_interrupt>
      18:	21 c0       	rjmp	.+66     	; 0x5c <__bad_interrupt>
      1a:	20 c0       	rjmp	.+64     	; 0x5c <__bad_interrupt>
      1c:	1f c0       	rjmp	.+62     	; 0x5c <__bad_interrupt>
      1e:	1e c0       	rjmp	.+60     	; 0x5c <__bad_interrupt>
      20:	1d c0       	rjmp	.+58     	; 0x5c <__bad_interrupt>
      22:	1c c0       	rjmp	.+56     	; 0x5c <__bad_interrupt>
      24:	1b c0       	rjmp	.+54     	; 0x5c <__bad_interrupt>

00000026 <__ctors_end>:
      26:	11 24       	eor	r1, r1
      28:	1f be       	out	0x3f, r1	; 63
      2a:	cf e5       	ldi	r28, 0x5F	; 95
      2c:	d4 e0       	ldi	r29, 0x04	; 4
      2e:	de bf       	out	0x3e, r29	; 62
      30:	cd bf       	out	0x3d, r28	; 61

00000032 <__do_copy_data>:
      32:	11 e0       	ldi	r17, 0x01	; 1
      34:	a0 e6       	ldi	r26, 0x60	; 96
      36:	b0 e0       	ldi	r27, 0x00	; 0
      38:	e0 e9       	ldi	r30, 0x90	; 144
      3a:	f0 e1       	ldi	r31, 0x10	; 16
      3c:	02 c0       	rjmp	.+4      	; 0x42 <__SREG__+0x3>
      3e:	05 90       	lpm	r0, Z+
      40:	0d 92       	st	X+, r0
      42:	a6 34       	cpi	r26, 0x46	; 70
      44:	b1 07       	cpc	r27, r17
      46:	d9 f7       	brne	.-10     	; 0x3e <__SP_H__>

00000048 <__do_clear_bss>:
      48:	11 e0       	ldi	r17, 0x01	; 1
      4a:	a6 e4       	ldi	r26, 0x46	; 70
      4c:	b1 e0       	ldi	r27, 0x01	; 1
      4e:	01 c0       	rjmp	.+2      	; 0x52 <.do_clear_bss_start>

00000050 <.do_clear_bss_loop>:
      50:	1d 92       	st	X+, r1

00000052 <.do_clear_bss_start>:
      52:	ac 39       	cpi	r26, 0x9C	; 156
      54:	b1 07       	cpc	r27, r17
      56:	e1 f7       	brne	.-8      	; 0x50 <.do_clear_bss_loop>
      58:	f3 d5       	rcall	.+3046   	; 0xc40 <main>
      5a:	18 c8       	rjmp	.-4048   	; 0xfffff08c <__eeprom_end+0xff7ef054>

0000005c <__bad_interrupt>:
      5c:	d1 cf       	rjmp	.-94     	; 0x0 <__vectors>

0000005e <LCD_Wait>:
//******************************************
// Процедура ожидания готовности индикатора
//******************************************
void LCD_Wait (void)
{
    char old_PORTD = PORTD;
      5e:	92 b3       	in	r25, 0x12	; 18
    char old_DDRD = DDRD;
      60:	21 b3       	in	r18, 0x11	; 17
    DDRD   = 0b00001111;
      62:	8f e0       	ldi	r24, 0x0F	; 15
      64:	81 bb       	out	0x11, r24	; 17
    PORTD |= 0b11110000;
      66:	82 b3       	in	r24, 0x12	; 18
      68:	80 6f       	ori	r24, 0xF0	; 240
      6a:	82 bb       	out	0x12, r24	; 18
    LCD_RS_CLR();
      6c:	92 98       	cbi	0x12, 2	; 18
    LCD_RW_SET();
      6e:	93 9a       	sbi	0x12, 3	; 18
    while (1) {
      LCD_E_SET();
      70:	91 9a       	sbi	0x12, 1	; 18
	#else
		//round up by default
		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
	#endif

	__builtin_avr_delay_cycles(__ticks_dc);
      72:	00 c0       	rjmp	.+0      	; 0x74 <LCD_Wait+0x16>
      74:	00 c0       	rjmp	.+0      	; 0x76 <LCD_Wait+0x18>
      76:	00 00       	nop
      _delay_us(5);
      char is_busy = LCD_BF();
      78:	80 b3       	in	r24, 0x10	; 16
      LCD_E_CLR();    
      7a:	91 98       	cbi	0x12, 1	; 18
      7c:	00 00       	nop
      _delay_us(1);
      LCD_E_SET();
      7e:	91 9a       	sbi	0x12, 1	; 18
      80:	00 00       	nop
      _delay_us(1);
      LCD_E_CLR();
      82:	91 98       	cbi	0x12, 1	; 18
      84:	00 00       	nop
      _delay_us(1);          
      if (!is_busy) break;     
      86:	87 fd       	sbrc	r24, 7
      88:	f3 cf       	rjmp	.-26     	; 0x70 <LCD_Wait+0x12>
    };
    DDRD  = old_DDRD;
      8a:	21 bb       	out	0x11, r18	; 17
    PORTD = old_PORTD;
      8c:	92 bb       	out	0x12, r25	; 18
}
      8e:	08 95       	ret

00000090 <LCD_Addr>:
//******************************************
// Процедура установки адреса для операций записи
//******************************************
void LCD_Addr (unsigned char a)
{
      90:	df 93       	push	r29
      92:	cf 93       	push	r28
      94:	0f 92       	push	r0
      96:	cd b7       	in	r28, 0x3d	; 61
      98:	de b7       	in	r29, 0x3e	; 62
    LCD_Wait();
      9a:	89 83       	std	Y+1, r24	; 0x01
      9c:	e0 df       	rcall	.-64     	; 0x5e <LCD_Wait>
    LCD_RS_CLR();
      9e:	92 98       	cbi	0x12, 2	; 18
    LCD_RW_CLR();
      a0:	93 98       	cbi	0x12, 3	; 18
    LCD_E_SET();
      a2:	91 9a       	sbi	0x12, 1	; 18
    LCD_DB_HI((a|0x80));       // Set DDRAM address
      a4:	92 b3       	in	r25, 0x12	; 18
      a6:	9f 70       	andi	r25, 0x0F	; 15
      a8:	90 68       	ori	r25, 0x80	; 128
      aa:	89 81       	ldd	r24, Y+1	; 0x01
      ac:	28 2f       	mov	r18, r24
      ae:	20 77       	andi	r18, 0x70	; 112
      b0:	92 2b       	or	r25, r18
      b2:	92 bb       	out	0x12, r25	; 18
      b4:	00 00       	nop
    _delay_us(1);
    LCD_E_CLR();
      b6:	91 98       	cbi	0x12, 1	; 18
      b8:	00 00       	nop
    _delay_us(1);
    LCD_E_SET();
      ba:	91 9a       	sbi	0x12, 1	; 18
    LCD_DB_LO(a);
      bc:	92 b3       	in	r25, 0x12	; 18
      be:	82 95       	swap	r24
      c0:	80 7f       	andi	r24, 0xF0	; 240
      c2:	9f 70       	andi	r25, 0x0F	; 15
      c4:	89 2b       	or	r24, r25
      c6:	82 bb       	out	0x12, r24	; 18
      c8:	00 00       	nop
    _delay_us(1);
    LCD_E_CLR();
      ca:	91 98       	cbi	0x12, 1	; 18
}
      cc:	0f 90       	pop	r0
      ce:	cf 91       	pop	r28
      d0:	df 91       	pop	r29
      d2:	08 95       	ret

000000d4 <LCD_Cmd>:
//******************************************
// Процедура выдачи команды на индикатор
//******************************************
void LCD_Cmd (unsigned char c)
{
      d4:	df 93       	push	r29
      d6:	cf 93       	push	r28
      d8:	0f 92       	push	r0
      da:	cd b7       	in	r28, 0x3d	; 61
      dc:	de b7       	in	r29, 0x3e	; 62
    LCD_Wait();
      de:	89 83       	std	Y+1, r24	; 0x01
      e0:	be df       	rcall	.-132    	; 0x5e <LCD_Wait>
    LCD_RS_CLR();
      e2:	92 98       	cbi	0x12, 2	; 18
    LCD_RW_CLR();
      e4:	93 98       	cbi	0x12, 3	; 18
    LCD_E_SET();
      e6:	91 9a       	sbi	0x12, 1	; 18
    LCD_DB_HI(c);      
      e8:	22 b3       	in	r18, 0x12	; 18
      ea:	89 81       	ldd	r24, Y+1	; 0x01
      ec:	98 2f       	mov	r25, r24
      ee:	90 7f       	andi	r25, 0xF0	; 240
      f0:	2f 70       	andi	r18, 0x0F	; 15
      f2:	92 2b       	or	r25, r18
      f4:	92 bb       	out	0x12, r25	; 18
      f6:	00 00       	nop
    _delay_us(1);
    LCD_E_CLR();
      f8:	91 98       	cbi	0x12, 1	; 18
      fa:	00 c0       	rjmp	.+0      	; 0xfc <LCD_Cmd+0x28>
      fc:	00 c0       	rjmp	.+0      	; 0xfe <LCD_Cmd+0x2a>
      fe:	00 00       	nop
    _delay_us(5);
    LCD_E_SET();
     100:	91 9a       	sbi	0x12, 1	; 18
    LCD_DB_LO(c);
     102:	92 b3       	in	r25, 0x12	; 18
     104:	82 95       	swap	r24
     106:	80 7f       	andi	r24, 0xF0	; 240
     108:	9f 70       	andi	r25, 0x0F	; 15
     10a:	89 2b       	or	r24, r25
     10c:	82 bb       	out	0x12, r24	; 18
     10e:	00 00       	nop
    _delay_us(1);
    LCD_E_CLR();
     110:	91 98       	cbi	0x12, 1	; 18
}
     112:	0f 90       	pop	r0
     114:	cf 91       	pop	r28
     116:	df 91       	pop	r29
     118:	08 95       	ret

0000011a <LCD_Write>:
//******************************************
// Процедура выдачи символа на индикатор
//******************************************
void LCD_Write (char b)
{
     11a:	df 93       	push	r29
     11c:	cf 93       	push	r28
     11e:	0f 92       	push	r0
     120:	cd b7       	in	r28, 0x3d	; 61
     122:	de b7       	in	r29, 0x3e	; 62
    LCD_Wait();
     124:	89 83       	std	Y+1, r24	; 0x01
     126:	9b df       	rcall	.-202    	; 0x5e <LCD_Wait>
    LCD_RS_SET();
     128:	92 9a       	sbi	0x12, 2	; 18
    LCD_RW_CLR();
     12a:	93 98       	cbi	0x12, 3	; 18
    LCD_E_SET();
     12c:	91 9a       	sbi	0x12, 1	; 18
    LCD_DB_HI(b);      
     12e:	22 b3       	in	r18, 0x12	; 18
     130:	89 81       	ldd	r24, Y+1	; 0x01
     132:	98 2f       	mov	r25, r24
     134:	90 7f       	andi	r25, 0xF0	; 240
     136:	2f 70       	andi	r18, 0x0F	; 15
     138:	92 2b       	or	r25, r18
     13a:	92 bb       	out	0x12, r25	; 18
     13c:	00 00       	nop
    _delay_us(1);
    LCD_E_CLR();
     13e:	91 98       	cbi	0x12, 1	; 18
     140:	00 00       	nop
    _delay_us(1);
    LCD_E_SET();
     142:	91 9a       	sbi	0x12, 1	; 18
    LCD_DB_LO(b);
     144:	92 b3       	in	r25, 0x12	; 18
     146:	82 95       	swap	r24
     148:	80 7f       	andi	r24, 0xF0	; 240
     14a:	9f 70       	andi	r25, 0x0F	; 15
     14c:	89 2b       	or	r24, r25
     14e:	82 bb       	out	0x12, r24	; 18
     150:	00 00       	nop
    _delay_us(1);
    LCD_E_CLR();
     152:	91 98       	cbi	0x12, 1	; 18
}
     154:	0f 90       	pop	r0
     156:	cf 91       	pop	r28
     158:	df 91       	pop	r29
     15a:	08 95       	ret

0000015c <LCD_Write8>:
//******************************************
// Процедура выдачи на индикатор 8 символов
//******************************************
void LCD_Write8 (char* arr)
{
     15c:	0f 93       	push	r16
     15e:	1f 93       	push	r17
     160:	cf 93       	push	r28
     162:	df 93       	push	r29
    for (int i=0; i<8; i++) LCD_Write(arr[i]);
     164:	08 2f       	mov	r16, r24
     166:	19 2f       	mov	r17, r25
     168:	c0 e0       	ldi	r28, 0x00	; 0
     16a:	d0 e0       	ldi	r29, 0x00	; 0
     16c:	f8 01       	movw	r30, r16
     16e:	81 91       	ld	r24, Z+
     170:	8f 01       	movw	r16, r30
     172:	d3 df       	rcall	.-90     	; 0x11a <LCD_Write>
     174:	21 96       	adiw	r28, 0x01	; 1
     176:	c8 30       	cpi	r28, 0x08	; 8
     178:	d1 05       	cpc	r29, r1
     17a:	c1 f7       	brne	.-16     	; 0x16c <LCD_Write8+0x10>
}
     17c:	df 91       	pop	r29
     17e:	cf 91       	pop	r28
     180:	1f 91       	pop	r17
     182:	0f 91       	pop	r16
     184:	08 95       	ret

00000186 <LCD_Clear>:
//******************************************
// Очистка дисплея
//******************************************
void LCD_Clear (void)
{
     186:	cf 93       	push	r28
     188:	df 93       	push	r29
    LCD_Addr(00);      
     18a:	80 e0       	ldi	r24, 0x00	; 0
     18c:	81 df       	rcall	.-254    	; 0x90 <LCD_Addr>
     18e:	c8 e0       	ldi	r28, 0x08	; 8
     190:	d0 e0       	ldi	r29, 0x00	; 0
    for(int j=0; j<8; j++) LCD_Write(0x20);
     192:	80 e2       	ldi	r24, 0x20	; 32
     194:	c2 df       	rcall	.-124    	; 0x11a <LCD_Write>
     196:	21 97       	sbiw	r28, 0x01	; 1
     198:	e1 f7       	brne	.-8      	; 0x192 <LCD_Clear+0xc>
    LCD_Addr(0x40); 
     19a:	80 e4       	ldi	r24, 0x40	; 64
     19c:	79 df       	rcall	.-270    	; 0x90 <LCD_Addr>
     19e:	c8 e0       	ldi	r28, 0x08	; 8
     1a0:	d0 e0       	ldi	r29, 0x00	; 0
    for(int j=0; j<8; j++) LCD_Write(0x20);
     1a2:	80 e2       	ldi	r24, 0x20	; 32
     1a4:	ba df       	rcall	.-140    	; 0x11a <LCD_Write>
     1a6:	21 97       	sbiw	r28, 0x01	; 1
     1a8:	e1 f7       	brne	.-8      	; 0x1a2 <LCD_Clear+0x1c>
}
     1aa:	df 91       	pop	r29
     1ac:	cf 91       	pop	r28
     1ae:	08 95       	ret

000001b0 <DAC_Write>:
//****************************************** 
// Переслать 24 битное слово в AD5791
//****************************************** 
void DAC_Write (long int data)
{
    DAC_SYNC_SET();
     1b0:	a8 98       	cbi	0x15, 0	; 21
    long int tmp = data;
     1b2:	26 2f       	mov	r18, r22
     1b4:	37 2f       	mov	r19, r23
     1b6:	48 2f       	mov	r20, r24
     1b8:	59 2f       	mov	r21, r25
    for (char i = 1; i<=24; i++) {
     1ba:	71 e0       	ldi	r23, 0x01	; 1
        DAC_SDIN(tmp>>23);
     1bc:	65 b3       	in	r22, 0x15	; 21
     1be:	da 01       	movw	r26, r20
     1c0:	c9 01       	movw	r24, r18
     1c2:	e5 e1       	ldi	r30, 0x15	; 21
     1c4:	b6 95       	lsr	r27
     1c6:	a7 95       	ror	r26
     1c8:	97 95       	ror	r25
     1ca:	87 95       	ror	r24
     1cc:	ea 95       	dec	r30
     1ce:	d1 f7       	brne	.-12     	; 0x1c4 <DAC_Write+0x14>
     1d0:	84 70       	andi	r24, 0x04	; 4
     1d2:	90 70       	andi	r25, 0x00	; 0
     1d4:	a0 70       	andi	r26, 0x00	; 0
     1d6:	b0 70       	andi	r27, 0x00	; 0
     1d8:	6b 7f       	andi	r22, 0xFB	; 251
     1da:	68 2b       	or	r22, r24
     1dc:	65 bb       	out	0x15, r22	; 21
        tmp = tmp << 1;
     1de:	22 0f       	add	r18, r18
     1e0:	33 1f       	adc	r19, r19
     1e2:	44 1f       	adc	r20, r20
     1e4:	55 1f       	adc	r21, r21
     1e6:	00 00       	nop
        _delay_us(1);
        DAC_SCLK_SET();
     1e8:	a9 9a       	sbi	0x15, 1	; 21
     1ea:	00 00       	nop
        _delay_us(1);
        DAC_SCLK_CLR();
     1ec:	a9 98       	cbi	0x15, 1	; 21
//****************************************** 
void DAC_Write (long int data)
{
    DAC_SYNC_SET();
    long int tmp = data;
    for (char i = 1; i<=24; i++) {
     1ee:	7f 5f       	subi	r23, 0xFF	; 255
     1f0:	79 31       	cpi	r23, 0x19	; 25
     1f2:	21 f7       	brne	.-56     	; 0x1bc <DAC_Write+0xc>
        _delay_us(1);
        DAC_SCLK_SET();
        _delay_us(1);
        DAC_SCLK_CLR();
    };    
    DAC_SYNC_CLR();
     1f4:	a8 9a       	sbi	0x15, 0	; 21
    DAC_SCLK_CLR();
     1f6:	a9 98       	cbi	0x15, 1	; 21
    DAC_SDIN_CLR();
     1f8:	aa 98       	cbi	0x15, 2	; 21
}
     1fa:	08 95       	ret

000001fc <KeyClear>:
//******************************************
// Очистить буфер нажатых клавиш
//****************************************** 
void KeyClear (void)
{
    for (int i=0; i<_KeyBufferMax; i++) _KeyCycles[i] = 0; // Очищаем клавиатурный буфер 
     1fc:	80 e0       	ldi	r24, 0x00	; 0
     1fe:	90 e0       	ldi	r25, 0x00	; 0
     200:	fc 01       	movw	r30, r24
     202:	ee 0f       	add	r30, r30
     204:	ff 1f       	adc	r31, r31
     206:	ea 5a       	subi	r30, 0xAA	; 170
     208:	fe 4f       	sbci	r31, 0xFE	; 254
     20a:	11 82       	std	Z+1, r1	; 0x01
     20c:	10 82       	st	Z, r1
     20e:	01 96       	adiw	r24, 0x01	; 1
     210:	8a 30       	cpi	r24, 0x0A	; 10
     212:	91 05       	cpc	r25, r1
     214:	a9 f7       	brne	.-22     	; 0x200 <KeyClear+0x4>
    for (int i=0; i<_MaxKeys; i++) _KeyBuffer[i] = 0;        // Очищаем массив флагов
     216:	10 92 62 01 	sts	0x0162, r1
     21a:	10 92 63 01 	sts	0x0163, r1
     21e:	10 92 64 01 	sts	0x0164, r1
     222:	10 92 65 01 	sts	0x0165, r1
     226:	10 92 66 01 	sts	0x0166, r1
    _KeyBufferPos = 0;
     22a:	10 92 51 01 	sts	0x0151, r1
     22e:	10 92 50 01 	sts	0x0150, r1
}
     232:	08 95       	ret

00000234 <KeyPressed>:
//******************************************
// Есть ли в буфере код нажатой клавиши?
//****************************************** 
unsigned char KeyPressed (void)
{
    return(_KeyBufferPos!=0);
     234:	20 91 50 01 	lds	r18, 0x0150
     238:	30 91 51 01 	lds	r19, 0x0151
     23c:	81 e0       	ldi	r24, 0x01	; 1
     23e:	21 15       	cp	r18, r1
     240:	31 05       	cpc	r19, r1
     242:	09 f4       	brne	.+2      	; 0x246 <KeyPressed+0x12>
     244:	80 e0       	ldi	r24, 0x00	; 0
}
     246:	08 95       	ret

00000248 <GetKey>:
//******************************************
// Получить код нажатой клавиши
//****************************************** 
unsigned char GetKey (void)
{
    if (_KeyBufferPos==0) return(0);    // Если буфер пуст, возвратить код k_Center
     248:	80 91 50 01 	lds	r24, 0x0150
     24c:	90 91 51 01 	lds	r25, 0x0151
     250:	00 97       	sbiw	r24, 0x00	; 0
     252:	f9 f0       	breq	.+62     	; 0x292 <GetKey+0x4a>
    else {
      char _key = _KeyBuffer[0];        // Иначе возвращаем код из буфера и смещаем его на 1 позицию
     254:	80 91 62 01 	lds	r24, 0x0162
      for (int i=0; i<_KeyBufferMax-1; i++) _KeyBuffer[i] = _KeyBuffer[i+1];
     258:	20 e0       	ldi	r18, 0x00	; 0
     25a:	30 e0       	ldi	r19, 0x00	; 0
     25c:	01 c0       	rjmp	.+2      	; 0x260 <GetKey+0x18>
     25e:	9a 01       	movw	r18, r20
     260:	a9 01       	movw	r20, r18
     262:	4f 5f       	subi	r20, 0xFF	; 255
     264:	5f 4f       	sbci	r21, 0xFF	; 255
     266:	fa 01       	movw	r30, r20
     268:	ee 59       	subi	r30, 0x9E	; 158
     26a:	fe 4f       	sbci	r31, 0xFE	; 254
     26c:	90 81       	ld	r25, Z
     26e:	2e 59       	subi	r18, 0x9E	; 158
     270:	3e 4f       	sbci	r19, 0xFE	; 254
     272:	f9 01       	movw	r30, r18
     274:	90 83       	st	Z, r25
     276:	49 30       	cpi	r20, 0x09	; 9
     278:	51 05       	cpc	r21, r1
     27a:	89 f7       	brne	.-30     	; 0x25e <GetKey+0x16>
      _KeyBufferPos--;
     27c:	20 91 50 01 	lds	r18, 0x0150
     280:	30 91 51 01 	lds	r19, 0x0151
     284:	21 50       	subi	r18, 0x01	; 1
     286:	30 40       	sbci	r19, 0x00	; 0
     288:	30 93 51 01 	sts	0x0151, r19
     28c:	20 93 50 01 	sts	0x0150, r18
      return(_key);
     290:	08 95       	ret
//******************************************
// Получить код нажатой клавиши
//****************************************** 
unsigned char GetKey (void)
{
    if (_KeyBufferPos==0) return(0);    // Если буфер пуст, возвратить код k_Center
     292:	80 e0       	ldi	r24, 0x00	; 0
      char _key = _KeyBuffer[0];        // Иначе возвращаем код из буфера и смещаем его на 1 позицию
      for (int i=0; i<_KeyBufferMax-1; i++) _KeyBuffer[i] = _KeyBuffer[i+1];
      _KeyBufferPos--;
      return(_key);
    }
}
     294:	08 95       	ret

00000296 <ReadKey>:
//******************************************
// Есть ли в буфере код нажатой клавиши?
//****************************************** 
unsigned char KeyPressed (void)
{
    return(_KeyBufferPos!=0);
     296:	80 91 50 01 	lds	r24, 0x0150
     29a:	90 91 51 01 	lds	r25, 0x0151
//******************************************
// Ждать нажатия и получить код нажатой клавиши
//****************************************** 
unsigned char ReadKey (void)
{
    while (!KeyPressed());    
     29e:	00 97       	sbiw	r24, 0x00	; 0
     2a0:	d1 f3       	breq	.-12     	; 0x296 <ReadKey>
    return(GetKey());
     2a2:	d2 df       	rcall	.-92     	; 0x248 <GetKey>
}
     2a4:	08 95       	ret

000002a6 <__vector_3>:
//******************************************
// Обработчик прерываний таймера для опроса клавиатуры
//****************************************** 
ISR (TIMER2_COMP_vect)
{
     2a6:	1f 92       	push	r1
     2a8:	0f 92       	push	r0
     2aa:	0f b6       	in	r0, 0x3f	; 63
     2ac:	0f 92       	push	r0
     2ae:	11 24       	eor	r1, r1
     2b0:	2f 93       	push	r18
     2b2:	3f 93       	push	r19
     2b4:	4f 93       	push	r20
     2b6:	5f 93       	push	r21
     2b8:	6f 93       	push	r22
     2ba:	7f 93       	push	r23
     2bc:	8f 93       	push	r24
     2be:	9f 93       	push	r25
     2c0:	af 93       	push	r26
     2c2:	bf 93       	push	r27
     2c4:	cf 93       	push	r28
     2c6:	df 93       	push	r29
     2c8:	ef 93       	push	r30
     2ca:	ff 93       	push	r31
    ADCSR |= (1<<ADSC);                             // запускаем преобразование
     2cc:	36 9a       	sbi	0x06, 6	; 6
    while (ADCSR & (1<<ADSC)) {};                   // не закончилось ли преобразование
     2ce:	36 99       	sbic	0x06, 6	; 6
     2d0:	fe cf       	rjmp	.-4      	; 0x2ce <__vector_3+0x28>
    unsigned char key_raw = ADCH;     
     2d2:	65 b1       	in	r22, 0x05	; 5
     2d4:	a8 eb       	ldi	r26, 0xB8	; 184
     2d6:	b0 e0       	ldi	r27, 0x00	; 0
    for (int idx=0; idx<5; idx++) {                 // перебираем массив интервалов кодов АЦП
     2d8:	80 e0       	ldi	r24, 0x00	; 0
     2da:	90 e0       	ldi	r25, 0x00	; 0
        };
      };
      if (!key_state) _KeyCycles[idx]=0;            // обновляем состояние клавиши
      else {
        _KeyCycles[idx]++;
        if (_KeyCycles[idx] > _MaxCycles) _KeyCycles[idx] = _MaxCycles+1;
     2dc:	45 e0       	ldi	r20, 0x05	; 5
     2de:	50 e0       	ldi	r21, 0x00	; 0
{
    ADCSR |= (1<<ADSC);                             // запускаем преобразование
    while (ADCSR & (1<<ADSC)) {};                   // не закончилось ли преобразование
    unsigned char key_raw = ADCH;     
    for (int idx=0; idx<5; idx++) {                 // перебираем массив интервалов кодов АЦП
      char key_state = (key_raw>=_KeyLoADC[idx]) && (key_raw<_KeyHiADC[idx]);// анализируем попадение в интервал
     2e0:	2d 91       	ld	r18, X+
     2e2:	62 17       	cp	r22, r18
     2e4:	40 f0       	brcs	.+16     	; 0x2f6 <__vector_3+0x50>
    return(GetKey());
}
//******************************************
// Обработчик прерываний таймера для опроса клавиатуры
//****************************************** 
ISR (TIMER2_COMP_vect)
     2e6:	fc 01       	movw	r30, r24
     2e8:	e3 54       	subi	r30, 0x43	; 67
     2ea:	ff 4f       	sbci	r31, 0xFF	; 255
     2ec:	21 e0       	ldi	r18, 0x01	; 1
     2ee:	30 e0       	ldi	r19, 0x00	; 0
     2f0:	70 81       	ld	r23, Z
     2f2:	67 17       	cp	r22, r23
     2f4:	10 f0       	brcs	.+4      	; 0x2fa <__vector_3+0x54>
{
    ADCSR |= (1<<ADSC);                             // запускаем преобразование
    while (ADCSR & (1<<ADSC)) {};                   // не закончилось ли преобразование
    unsigned char key_raw = ADCH;     
    for (int idx=0; idx<5; idx++) {                 // перебираем массив интервалов кодов АЦП
      char key_state = (key_raw>=_KeyLoADC[idx]) && (key_raw<_KeyHiADC[idx]);// анализируем попадение в интервал
     2f6:	20 e0       	ldi	r18, 0x00	; 0
     2f8:	30 e0       	ldi	r19, 0x00	; 0
      if ((_KeyCycles[idx]==_MaxCycles) && (key_state)) {
     2fa:	fc 01       	movw	r30, r24
     2fc:	ee 0f       	add	r30, r30
     2fe:	ff 1f       	adc	r31, r31
     300:	ef 01       	movw	r28, r30
     302:	ca 5a       	subi	r28, 0xAA	; 170
     304:	de 4f       	sbci	r29, 0xFE	; 254
     306:	09 90       	ld	r0, Y+
     308:	d8 81       	ld	r29, Y
     30a:	c0 2d       	mov	r28, r0
     30c:	c4 30       	cpi	r28, 0x04	; 4
     30e:	d1 05       	cpc	r29, r1
     310:	d9 f4       	brne	.+54     	; 0x348 <__vector_3+0xa2>
     312:	22 23       	and	r18, r18
     314:	d9 f0       	breq	.+54     	; 0x34c <__vector_3+0xa6>
        if (_KeyBufferPos < _KeyBufferMax) {        // если позволяет длина буфера,
     316:	20 91 50 01 	lds	r18, 0x0150
     31a:	30 91 51 01 	lds	r19, 0x0151
     31e:	2a 30       	cpi	r18, 0x0A	; 10
     320:	31 05       	cpc	r19, r1
     322:	cc f4       	brge	.+50     	; 0x356 <__vector_3+0xb0>
          _KeyBuffer[_KeyBufferPos] = idx;          // добавляем в него код нажатой клавиши
     324:	c0 91 50 01 	lds	r28, 0x0150
     328:	d0 91 51 01 	lds	r29, 0x0151
     32c:	ce 59       	subi	r28, 0x9E	; 158
     32e:	de 4f       	sbci	r29, 0xFE	; 254
     330:	88 83       	st	Y, r24
          _KeyBufferPos++;
     332:	20 91 50 01 	lds	r18, 0x0150
     336:	30 91 51 01 	lds	r19, 0x0151
     33a:	2f 5f       	subi	r18, 0xFF	; 255
     33c:	3f 4f       	sbci	r19, 0xFF	; 255
     33e:	30 93 51 01 	sts	0x0151, r19
     342:	20 93 50 01 	sts	0x0150, r18
     346:	07 c0       	rjmp	.+14     	; 0x356 <__vector_3+0xb0>
        };
      };
      if (!key_state) _KeyCycles[idx]=0;            // обновляем состояние клавиши
     348:	22 23       	and	r18, r18
     34a:	29 f4       	brne	.+10     	; 0x356 <__vector_3+0xb0>
     34c:	ea 5a       	subi	r30, 0xAA	; 170
     34e:	fe 4f       	sbci	r31, 0xFE	; 254
     350:	11 82       	std	Z+1, r1	; 0x01
     352:	10 82       	st	Z, r1
     354:	0f c0       	rjmp	.+30     	; 0x374 <__vector_3+0xce>
      else {
        _KeyCycles[idx]++;
     356:	ea 5a       	subi	r30, 0xAA	; 170
     358:	fe 4f       	sbci	r31, 0xFE	; 254
     35a:	20 81       	ld	r18, Z
     35c:	31 81       	ldd	r19, Z+1	; 0x01
     35e:	2f 5f       	subi	r18, 0xFF	; 255
     360:	3f 4f       	sbci	r19, 0xFF	; 255
     362:	31 83       	std	Z+1, r19	; 0x01
     364:	20 83       	st	Z, r18
        if (_KeyCycles[idx] > _MaxCycles) _KeyCycles[idx] = _MaxCycles+1;
     366:	20 81       	ld	r18, Z
     368:	31 81       	ldd	r19, Z+1	; 0x01
     36a:	25 30       	cpi	r18, 0x05	; 5
     36c:	31 05       	cpc	r19, r1
     36e:	14 f0       	brlt	.+4      	; 0x374 <__vector_3+0xce>
     370:	51 83       	std	Z+1, r21	; 0x01
     372:	40 83       	st	Z, r20
ISR (TIMER2_COMP_vect)
{
    ADCSR |= (1<<ADSC);                             // запускаем преобразование
    while (ADCSR & (1<<ADSC)) {};                   // не закончилось ли преобразование
    unsigned char key_raw = ADCH;     
    for (int idx=0; idx<5; idx++) {                 // перебираем массив интервалов кодов АЦП
     374:	01 96       	adiw	r24, 0x01	; 1
     376:	85 30       	cpi	r24, 0x05	; 5
     378:	91 05       	cpc	r25, r1
     37a:	09 f0       	breq	.+2      	; 0x37e <__vector_3+0xd8>
     37c:	b1 cf       	rjmp	.-158    	; 0x2e0 <__vector_3+0x3a>
      else {
        _KeyCycles[idx]++;
        if (_KeyCycles[idx] > _MaxCycles) _KeyCycles[idx] = _MaxCycles+1;
      }
    };   
}
     37e:	ff 91       	pop	r31
     380:	ef 91       	pop	r30
     382:	df 91       	pop	r29
     384:	cf 91       	pop	r28
     386:	bf 91       	pop	r27
     388:	af 91       	pop	r26
     38a:	9f 91       	pop	r25
     38c:	8f 91       	pop	r24
     38e:	7f 91       	pop	r23
     390:	6f 91       	pop	r22
     392:	5f 91       	pop	r21
     394:	4f 91       	pop	r20
     396:	3f 91       	pop	r19
     398:	2f 91       	pop	r18
     39a:	0f 90       	pop	r0
     39c:	0f be       	out	0x3f, r0	; 63
     39e:	0f 90       	pop	r0
     3a0:	1f 90       	pop	r1
     3a2:	18 95       	reti

000003a4 <Init>:
//******************************************
// Инициализация калибратора
//****************************************** 
void Init (void)
{
     3a4:	cf 93       	push	r28
     3a6:	df 93       	push	r29
// Инициализация интерфейсов, таймера, АЦП
    DDRB  = 0b00000010;
     3a8:	82 e0       	ldi	r24, 0x02	; 2
     3aa:	87 bb       	out	0x17, r24	; 23
    PORTB = 0b11111101;
     3ac:	8d ef       	ldi	r24, 0xFD	; 253
     3ae:	88 bb       	out	0x18, r24	; 24
    DDRD  = 0b11111111;
     3b0:	8f ef       	ldi	r24, 0xFF	; 255
     3b2:	81 bb       	out	0x11, r24	; 17
    PORTD = 0b00000000;
     3b4:	12 ba       	out	0x12, r1	; 18
    DDRC  = 0b11011111;
     3b6:	8f ed       	ldi	r24, 0xDF	; 223
     3b8:	84 bb       	out	0x14, r24	; 20
    PORTC = 0b00000001;
     3ba:	81 e0       	ldi	r24, 0x01	; 1
     3bc:	85 bb       	out	0x15, r24	; 21
    OCR1AH=0; OCR1AL=0x56;                  // 2000 Гц    
     3be:	1b bc       	out	0x2b, r1	; 43
     3c0:	86 e5       	ldi	r24, 0x56	; 86
     3c2:	8a bd       	out	0x2a, r24	; 42
    TCCR1A =TCCR1A&~(1<<COM1A0);            // Запретить изменение вывода OC1A
     3c4:	8f b5       	in	r24, 0x2f	; 47
     3c6:	8f 7b       	andi	r24, 0xBF	; 191
     3c8:	8f bd       	out	0x2f, r24	; 47
    TCCR1B|=(1<<WGM12)|(0<<CS11)|(1<<CS10); // Режим CTC. Тактировать с делителем на 64
     3ca:	8e b5       	in	r24, 0x2e	; 46
     3cc:	89 60       	ori	r24, 0x09	; 9
     3ce:	8e bd       	out	0x2e, r24	; 46
    TCCR1A|=(1<<FOC1A);
     3d0:	8f b5       	in	r24, 0x2f	; 47
     3d2:	88 60       	ori	r24, 0x08	; 8
     3d4:	8f bd       	out	0x2f, r24	; 47
    ADMUX = (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX3)|(1<<MUX2)|(0<<MUX1)|(1<<MUX0);
     3d6:	85 e6       	ldi	r24, 0x65	; 101
     3d8:	87 b9       	out	0x07, r24	; 7
    ADCSR = (1<<ADEN)|(0<<ADSC)|(0<<ADFR)|(0<<ADIE)|(0<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
     3da:	83 e8       	ldi	r24, 0x83	; 131
     3dc:	86 b9       	out	0x06, r24	; 6
    SREG |= _BV(SREG_I);                    // Глобальное разрешение прерываний
     3de:	8f b7       	in	r24, 0x3f	; 63
     3e0:	80 68       	ori	r24, 0x80	; 128
     3e2:	8f bf       	out	0x3f, r24	; 63
	#else
		//round up by default
		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
	#endif

	__builtin_avr_delay_cycles(__ticks_dc);
     3e4:	8f e3       	ldi	r24, 0x3F	; 63
     3e6:	9d e0       	ldi	r25, 0x0D	; 13
     3e8:	a3 e0       	ldi	r26, 0x03	; 3
     3ea:	81 50       	subi	r24, 0x01	; 1
     3ec:	90 40       	sbci	r25, 0x00	; 0
     3ee:	a0 40       	sbci	r26, 0x00	; 0
     3f0:	e1 f7       	brne	.-8      	; 0x3ea <Init+0x46>
     3f2:	00 c0       	rjmp	.+0      	; 0x3f4 <Init+0x50>
     3f4:	00 00       	nop
// Инициализация LCD
    _delay_ms(1000);
    LCD_RS_CLR();
     3f6:	92 98       	cbi	0x12, 2	; 18
    LCD_RW_CLR();
     3f8:	93 98       	cbi	0x12, 3	; 18
    LCD_E_SET();
     3fa:	91 9a       	sbi	0x12, 1	; 18
    LCD_DB_HI(0b00110000);
     3fc:	82 b3       	in	r24, 0x12	; 18
     3fe:	8f 70       	andi	r24, 0x0F	; 15
     400:	80 63       	ori	r24, 0x30	; 48
     402:	82 bb       	out	0x12, r24	; 18
	#else
		//round up by default
		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
	#endif

	__builtin_avr_delay_cycles(__ticks_dc);
     404:	00 c0       	rjmp	.+0      	; 0x406 <Init+0x62>
     406:	00 c0       	rjmp	.+0      	; 0x408 <Init+0x64>
     408:	00 00       	nop
    _delay_us(5);
    LCD_E_CLR();
     40a:	91 98       	cbi	0x12, 1	; 18
	#else
		//round up by default
		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
	#endif

	__builtin_avr_delay_cycles(__ticks_dc);
     40c:	a1 ee       	ldi	r26, 0xE1	; 225
     40e:	b4 e0       	ldi	r27, 0x04	; 4
     410:	11 97       	sbiw	r26, 0x01	; 1
     412:	f1 f7       	brne	.-4      	; 0x410 <Init+0x6c>
     414:	00 c0       	rjmp	.+0      	; 0x416 <Init+0x72>
     416:	00 00       	nop
    _delay_ms(5);
    LCD_E_SET();
     418:	91 9a       	sbi	0x12, 1	; 18
    LCD_DB_HI(0b00110000);
     41a:	82 b3       	in	r24, 0x12	; 18
     41c:	8f 70       	andi	r24, 0x0F	; 15
     41e:	80 63       	ori	r24, 0x30	; 48
     420:	82 bb       	out	0x12, r24	; 18
	#else
		//round up by default
		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
	#endif

	__builtin_avr_delay_cycles(__ticks_dc);
     422:	00 c0       	rjmp	.+0      	; 0x424 <Init+0x80>
     424:	00 c0       	rjmp	.+0      	; 0x426 <Init+0x82>
     426:	00 00       	nop
    _delay_us(5);
    LCD_E_CLR();
     428:	91 98       	cbi	0x12, 1	; 18
	#else
		//round up by default
		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
	#endif

	__builtin_avr_delay_cycles(__ticks_dc);
     42a:	81 ee       	ldi	r24, 0xE1	; 225
     42c:	94 e0       	ldi	r25, 0x04	; 4
     42e:	01 97       	sbiw	r24, 0x01	; 1
     430:	f1 f7       	brne	.-4      	; 0x42e <Init+0x8a>
     432:	00 c0       	rjmp	.+0      	; 0x434 <Init+0x90>
     434:	00 00       	nop
    _delay_ms(5);
    LCD_E_SET();
     436:	91 9a       	sbi	0x12, 1	; 18
    LCD_DB_HI(0b00100000);  // 4-bit mode
     438:	82 b3       	in	r24, 0x12	; 18
     43a:	8f 70       	andi	r24, 0x0F	; 15
     43c:	80 62       	ori	r24, 0x20	; 32
     43e:	82 bb       	out	0x12, r24	; 18
	#else
		//round up by default
		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
	#endif

	__builtin_avr_delay_cycles(__ticks_dc);
     440:	00 c0       	rjmp	.+0      	; 0x442 <Init+0x9e>
     442:	00 c0       	rjmp	.+0      	; 0x444 <Init+0xa0>
     444:	00 00       	nop
    _delay_us(5);
    LCD_E_CLR();
     446:	91 98       	cbi	0x12, 1	; 18
	#else
		//round up by default
		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
	#endif

	__builtin_avr_delay_cycles(__ticks_dc);
     448:	a1 ee       	ldi	r26, 0xE1	; 225
     44a:	b4 e0       	ldi	r27, 0x04	; 4
     44c:	11 97       	sbiw	r26, 0x01	; 1
     44e:	f1 f7       	brne	.-4      	; 0x44c <Init+0xa8>
     450:	00 c0       	rjmp	.+0      	; 0x452 <Init+0xae>
     452:	00 00       	nop
    _delay_ms(5);
    LCD_Cmd(0b00101000);    // 2 lines, 5x8 dot
     454:	88 e2       	ldi	r24, 0x28	; 40
     456:	3e de       	rcall	.-900    	; 0xd4 <LCD_Cmd>
    LCD_Cmd(0b00001111);    // Display, cursor, blinking
     458:	8f e0       	ldi	r24, 0x0F	; 15
     45a:	3c de       	rcall	.-904    	; 0xd4 <LCD_Cmd>
    LCD_Cmd(0b00000110);    // Cursor/display shift
     45c:	86 e0       	ldi	r24, 0x06	; 6
     45e:	3a de       	rcall	.-908    	; 0xd4 <LCD_Cmd>
    LCD_Cmd(0b00000001);    // Display clear
     460:	81 e0       	ldi	r24, 0x01	; 1
     462:	38 de       	rcall	.-912    	; 0xd4 <LCD_Cmd>
// Инициализация клавиатуры
    ASSR = 0x00;                            // Инициализируем таймер 2: асинхронный режим отключен
     464:	12 bc       	out	0x22, r1	; 34
    TCCR2 |= (0<<CS20)|(0<<CS21)|(1<<CS22); // Коэффициент предделения 64
     466:	85 b5       	in	r24, 0x25	; 37
     468:	84 60       	ori	r24, 0x04	; 4
     46a:	85 bd       	out	0x25, r24	; 37
    TCNT2 = 0x00;                           // Начальное значение 0
     46c:	14 bc       	out	0x24, r1	; 36
    OCR2 = 0xFE;                            // Регистр сравнения на максимум
     46e:	8e ef       	ldi	r24, 0xFE	; 254
     470:	83 bd       	out	0x23, r24	; 35
    TIMSK = (1<<OCIE2);                     // Прерывание разрешено
     472:	80 e8       	ldi	r24, 0x80	; 128
     474:	89 bf       	out	0x39, r24	; 57
    KeyClear();
     476:	c2 de       	rcall	.-636    	; 0x1fc <KeyClear>
// Инициализация DAC
    LCD_Clear();                    // Выводим заставку
     478:	86 de       	rcall	.-756    	; 0x186 <LCD_Clear>
    LCD_Addr(0); LCD_Write8(Msg_DCCal);
     47a:	80 e0       	ldi	r24, 0x00	; 0
     47c:	09 de       	rcall	.-1006   	; 0x90 <LCD_Addr>
     47e:	82 ec       	ldi	r24, 0xC2	; 194
     480:	90 e0       	ldi	r25, 0x00	; 0
     482:	6c de       	rcall	.-808    	; 0x15c <LCD_Write8>
    LCD_Addr(0x40); LCD_Write8(Msg_Nano);
     484:	80 e4       	ldi	r24, 0x40	; 64
     486:	04 de       	rcall	.-1016   	; 0x90 <LCD_Addr>
     488:	8a ec       	ldi	r24, 0xCA	; 202
     48a:	90 e0       	ldi	r25, 0x00	; 0
     48c:	67 de       	rcall	.-818    	; 0x15c <LCD_Write8>
     48e:	8f e3       	ldi	r24, 0x3F	; 63
     490:	92 e4       	ldi	r25, 0x42	; 66
     492:	af e0       	ldi	r26, 0x0F	; 15
     494:	81 50       	subi	r24, 0x01	; 1
     496:	90 40       	sbci	r25, 0x00	; 0
     498:	a0 40       	sbci	r26, 0x00	; 0
     49a:	e1 f7       	brne	.-8      	; 0x494 <__stack+0x35>
     49c:	00 c0       	rjmp	.+0      	; 0x49e <__stack+0x3f>
     49e:	00 00       	nop
    _delay_ms(5000);                // Задержка на время разогрева LM399H
    Beep_On(); _delay_ms(10); Beep_Off();
     4a0:	8f b5       	in	r24, 0x2f	; 47
     4a2:	80 64       	ori	r24, 0x40	; 64
     4a4:	8f bd       	out	0x2f, r24	; 47
     4a6:	a3 ec       	ldi	r26, 0xC3	; 195
     4a8:	b9 e0       	ldi	r27, 0x09	; 9
     4aa:	11 97       	sbiw	r26, 0x01	; 1
     4ac:	f1 f7       	brne	.-4      	; 0x4aa <__stack+0x4b>
     4ae:	00 c0       	rjmp	.+0      	; 0x4b0 <__stack+0x51>
     4b0:	00 00       	nop
     4b2:	8f b5       	in	r24, 0x2f	; 47
     4b4:	8f 7b       	andi	r24, 0xBF	; 191
     4b6:	8f bd       	out	0x2f, r24	; 47
    LCD_Clear();
     4b8:	66 de       	rcall	.-820    	; 0x186 <LCD_Clear>
    LCD_Addr(0); LCD_Write8(Msg_Starting);
     4ba:	80 e0       	ldi	r24, 0x00	; 0
     4bc:	e9 dd       	rcall	.-1070   	; 0x90 <LCD_Addr>
     4be:	8a e2       	ldi	r24, 0x2A	; 42
     4c0:	91 e0       	ldi	r25, 0x01	; 1
     4c2:	4c de       	rcall	.-872    	; 0x15c <LCD_Write8>
    LCD_Addr(0x40); 
     4c4:	80 e4       	ldi	r24, 0x40	; 64
     4c6:	e4 dd       	rcall	.-1080   	; 0x90 <LCD_Addr>
    LCD_Cmd(0b00001100);            // Временно отключаем курсор и мигание
     4c8:	8c e0       	ldi	r24, 0x0C	; 12
     4ca:	04 de       	rcall	.-1016   	; 0xd4 <LCD_Cmd>
     4cc:	c8 e0       	ldi	r28, 0x08	; 8
     4ce:	d0 e0       	ldi	r29, 0x00	; 0
    for (int i=0; i<8; i++) {LCD_Write(255); _delay_ms(500);}
     4d0:	8f ef       	ldi	r24, 0xFF	; 255
     4d2:	23 de       	rcall	.-954    	; 0x11a <LCD_Write>
     4d4:	8f e9       	ldi	r24, 0x9F	; 159
     4d6:	96 e8       	ldi	r25, 0x86	; 134
     4d8:	a1 e0       	ldi	r26, 0x01	; 1
     4da:	81 50       	subi	r24, 0x01	; 1
     4dc:	90 40       	sbci	r25, 0x00	; 0
     4de:	a0 40       	sbci	r26, 0x00	; 0
     4e0:	e1 f7       	brne	.-8      	; 0x4da <__stack+0x7b>
     4e2:	00 c0       	rjmp	.+0      	; 0x4e4 <__stack+0x85>
     4e4:	00 00       	nop
     4e6:	21 97       	sbiw	r28, 0x01	; 1
     4e8:	99 f7       	brne	.-26     	; 0x4d0 <__stack+0x71>
    LCD_Cmd(0b00001111);            // Включаем курсор и мигание
     4ea:	8f e0       	ldi	r24, 0x0F	; 15
     4ec:	f3 dd       	rcall	.-1050   	; 0xd4 <LCD_Cmd>
    // Отключаем SDO и clamp, режим 1х с компенсацией вх. тока ОУ, линейность для ИОН<=10 В
    DAC_Write(CTRL_REG | RBUF | SDODIS | LINCOMP10 | BIN2sC);
     4ee:	62 e3       	ldi	r22, 0x32	; 50
     4f0:	70 e0       	ldi	r23, 0x00	; 0
     4f2:	80 e2       	ldi	r24, 0x20	; 32
     4f4:	90 e0       	ldi	r25, 0x00	; 0
     4f6:	5c de       	rcall	.-840    	; 0x1b0 <DAC_Write>
    DAC_Write(DATA_REG | 0x0);      // Устанавливаем начальный нулевой код ЦАП
     4f8:	60 e0       	ldi	r22, 0x00	; 0
     4fa:	70 e0       	ldi	r23, 0x00	; 0
     4fc:	80 e1       	ldi	r24, 0x10	; 16
     4fe:	90 e0       	ldi	r25, 0x00	; 0
     500:	57 de       	rcall	.-850    	; 0x1b0 <DAC_Write>
    DAC_Write(SCTRL_REG | LDAC);    // Загружаем в DAC
     502:	61 e0       	ldi	r22, 0x01	; 1
     504:	70 e0       	ldi	r23, 0x00	; 0
     506:	80 e4       	ldi	r24, 0x40	; 64
     508:	90 e0       	ldi	r25, 0x00	; 0
     50a:	52 de       	rcall	.-860    	; 0x1b0 <DAC_Write>
    DAC_Write(SCTRL_REG);
     50c:	60 e0       	ldi	r22, 0x00	; 0
     50e:	70 e0       	ldi	r23, 0x00	; 0
     510:	80 e4       	ldi	r24, 0x40	; 64
     512:	90 e0       	ldi	r25, 0x00	; 0
     514:	4d de       	rcall	.-870    	; 0x1b0 <DAC_Write>
}
     516:	df 91       	pop	r29
     518:	cf 91       	pop	r28
     51a:	08 95       	ret

0000051c <Config_Load>:
//******************************************
// Загрузить конфигурацию из EEPROM
//******************************************
void Config_Load (void)
{
    eeprom_read_block(&CAL_ZERO,&CFG_CAL_ZERO,8);
     51c:	88 e4       	ldi	r24, 0x48	; 72
     51e:	91 e0       	ldi	r25, 0x01	; 1
     520:	60 e0       	ldi	r22, 0x00	; 0
     522:	70 e0       	ldi	r23, 0x00	; 0
     524:	48 e0       	ldi	r20, 0x08	; 8
     526:	50 e0       	ldi	r21, 0x00	; 0
     528:	81 d5       	rcall	.+2818   	; 0x102c <__eerd_block_m8>
    eeprom_read_block(&CAL_FS,&CFG_CAL_FS,MODES*8);
     52a:	8c e6       	ldi	r24, 0x6C	; 108
     52c:	91 e0       	ldi	r25, 0x01	; 1
     52e:	68 e0       	ldi	r22, 0x08	; 8
     530:	70 e0       	ldi	r23, 0x00	; 0
     532:	40 e3       	ldi	r20, 0x30	; 48
     534:	50 e0       	ldi	r21, 0x00	; 0
     536:	7a d5       	rcall	.+2804   	; 0x102c <__eerd_block_m8>
}
     538:	08 95       	ret

0000053a <Config_Update>:
//******************************************
// Обновить конфигурацию в EEPROM
//******************************************
void Config_Update (void)
{
    eeprom_update_block(&CAL_ZERO,&CFG_CAL_ZERO,8);
     53a:	88 e4       	ldi	r24, 0x48	; 72
     53c:	91 e0       	ldi	r25, 0x01	; 1
     53e:	60 e0       	ldi	r22, 0x00	; 0
     540:	70 e0       	ldi	r23, 0x00	; 0
     542:	48 e0       	ldi	r20, 0x08	; 8
     544:	50 e0       	ldi	r21, 0x00	; 0
     546:	82 d5       	rcall	.+2820   	; 0x104c <__eeupd_block_m8>
    eeprom_update_block(&CAL_FS,&CFG_CAL_FS,MODES*8);
     548:	8c e6       	ldi	r24, 0x6C	; 108
     54a:	91 e0       	ldi	r25, 0x01	; 1
     54c:	68 e0       	ldi	r22, 0x08	; 8
     54e:	70 e0       	ldi	r23, 0x00	; 0
     550:	40 e3       	ldi	r20, 0x30	; 48
     552:	50 e0       	ldi	r21, 0x00	; 0
     554:	7b d5       	rcall	.+2806   	; 0x104c <__eeupd_block_m8>
}
     556:	08 95       	ret

00000558 <SetOutput>:
//******************************************
// Обработка данных по калибровочному уравнению
//******************************************
void SetOutput (void)
{
     558:	2f 92       	push	r2
     55a:	3f 92       	push	r3
     55c:	4f 92       	push	r4
     55e:	5f 92       	push	r5
     560:	6f 92       	push	r6
     562:	7f 92       	push	r7
     564:	8f 92       	push	r8
     566:	9f 92       	push	r9
     568:	af 92       	push	r10
     56a:	bf 92       	push	r11
     56c:	cf 92       	push	r12
     56e:	df 92       	push	r13
     570:	ef 92       	push	r14
     572:	ff 92       	push	r15
     574:	0f 93       	push	r16
     576:	1f 93       	push	r17
     578:	df 93       	push	r29
     57a:	cf 93       	push	r28
     57c:	00 d0       	rcall	.+0      	; 0x57e <SetOutput+0x26>
     57e:	00 d0       	rcall	.+0      	; 0x580 <SetOutput+0x28>
     580:	cd b7       	in	r28, 0x3d	; 61
     582:	de b7       	in	r29, 0x3e	; 62
    if (MODE==M_RAW) 
     584:	e0 91 46 01 	lds	r30, 0x0146
     588:	f0 91 47 01 	lds	r31, 0x0147
     58c:	30 97       	sbiw	r30, 0x00	; 0
     58e:	49 f4       	brne	.+18     	; 0x5a2 <SetOutput+0x4a>
      DAC_Write(DATA_REG | BUFFER);
     590:	60 91 52 01 	lds	r22, 0x0152
     594:	70 91 53 01 	lds	r23, 0x0153
     598:	80 91 54 01 	lds	r24, 0x0154
     59c:	90 91 55 01 	lds	r25, 0x0155
     5a0:	e7 c0       	rjmp	.+462    	; 0x770 <SetOutput+0x218>
    else {
      int64_t tmp = (CAL_FS[MODE]-CAL_ZERO)*(int64_t)BUFFER*(int64_t)10/(int64_t)10000000+(int64_t)CAL_ZERO;
     5a2:	50 90 48 01 	lds	r5, 0x0148
     5a6:	40 90 49 01 	lds	r4, 0x0149
     5aa:	30 90 4a 01 	lds	r3, 0x014A
     5ae:	20 90 4b 01 	lds	r2, 0x014B
     5b2:	50 91 4c 01 	lds	r21, 0x014C
     5b6:	59 83       	std	Y+1, r21	; 0x01
     5b8:	60 91 4d 01 	lds	r22, 0x014D
     5bc:	6a 83       	std	Y+2, r22	; 0x02
     5be:	70 91 4e 01 	lds	r23, 0x014E
     5c2:	7b 83       	std	Y+3, r23	; 0x03
     5c4:	80 91 4f 01 	lds	r24, 0x014F
     5c8:	8c 83       	std	Y+4, r24	; 0x04
     5ca:	13 e0       	ldi	r17, 0x03	; 3
     5cc:	ee 0f       	add	r30, r30
     5ce:	ff 1f       	adc	r31, r31
     5d0:	1a 95       	dec	r17
     5d2:	e1 f7       	brne	.-8      	; 0x5cc <SetOutput+0x74>
     5d4:	e4 59       	subi	r30, 0x94	; 148
     5d6:	fe 4f       	sbci	r31, 0xFE	; 254
     5d8:	80 81       	ld	r24, Z
     5da:	51 81       	ldd	r21, Z+1	; 0x01
     5dc:	f2 80       	ldd	r15, Z+2	; 0x02
     5de:	73 81       	ldd	r23, Z+3	; 0x03
     5e0:	04 81       	ldd	r16, Z+4	; 0x04
     5e2:	b5 81       	ldd	r27, Z+5	; 0x05
     5e4:	e6 80       	ldd	r14, Z+6	; 0x06
     5e6:	97 81       	ldd	r25, Z+7	; 0x07
     5e8:	28 2f       	mov	r18, r24
     5ea:	25 19       	sub	r18, r5
     5ec:	31 e0       	ldi	r19, 0x01	; 1
     5ee:	82 17       	cp	r24, r18
     5f0:	08 f0       	brcs	.+2      	; 0x5f4 <SetOutput+0x9c>
     5f2:	30 e0       	ldi	r19, 0x00	; 0
     5f4:	45 2f       	mov	r20, r21
     5f6:	44 19       	sub	r20, r4
     5f8:	81 e0       	ldi	r24, 0x01	; 1
     5fa:	54 17       	cp	r21, r20
     5fc:	08 f0       	brcs	.+2      	; 0x600 <SetOutput+0xa8>
     5fe:	80 e0       	ldi	r24, 0x00	; 0
     600:	a4 2f       	mov	r26, r20
     602:	a3 1b       	sub	r26, r19
     604:	3a 2f       	mov	r19, r26
     606:	51 e0       	ldi	r21, 0x01	; 1
     608:	4a 17       	cp	r20, r26
     60a:	08 f0       	brcs	.+2      	; 0x60e <SetOutput+0xb6>
     60c:	50 e0       	ldi	r21, 0x00	; 0
     60e:	85 2b       	or	r24, r21
     610:	6f 2d       	mov	r22, r15
     612:	63 19       	sub	r22, r3
     614:	51 e0       	ldi	r21, 0x01	; 1
     616:	f6 16       	cp	r15, r22
     618:	08 f0       	brcs	.+2      	; 0x61c <SetOutput+0xc4>
     61a:	50 e0       	ldi	r21, 0x00	; 0
     61c:	46 2f       	mov	r20, r22
     61e:	48 1b       	sub	r20, r24
     620:	81 e0       	ldi	r24, 0x01	; 1
     622:	64 17       	cp	r22, r20
     624:	08 f0       	brcs	.+2      	; 0x628 <SetOutput+0xd0>
     626:	80 e0       	ldi	r24, 0x00	; 0
     628:	58 2b       	or	r21, r24
     62a:	67 2f       	mov	r22, r23
     62c:	62 19       	sub	r22, r2
     62e:	81 e0       	ldi	r24, 0x01	; 1
     630:	76 17       	cp	r23, r22
     632:	08 f0       	brcs	.+2      	; 0x636 <SetOutput+0xde>
     634:	80 e0       	ldi	r24, 0x00	; 0
     636:	e6 2f       	mov	r30, r22
     638:	e5 1b       	sub	r30, r21
     63a:	5e 2f       	mov	r21, r30
     63c:	71 e0       	ldi	r23, 0x01	; 1
     63e:	6e 17       	cp	r22, r30
     640:	08 f0       	brcs	.+2      	; 0x644 <SetOutput+0xec>
     642:	70 e0       	ldi	r23, 0x00	; 0
     644:	87 2b       	or	r24, r23
     646:	a0 2f       	mov	r26, r16
     648:	f9 81       	ldd	r31, Y+1	; 0x01
     64a:	af 1b       	sub	r26, r31
     64c:	71 e0       	ldi	r23, 0x01	; 1
     64e:	0a 17       	cp	r16, r26
     650:	08 f0       	brcs	.+2      	; 0x654 <SetOutput+0xfc>
     652:	70 e0       	ldi	r23, 0x00	; 0
     654:	6a 2f       	mov	r22, r26
     656:	68 1b       	sub	r22, r24
     658:	81 e0       	ldi	r24, 0x01	; 1
     65a:	a6 17       	cp	r26, r22
     65c:	08 f0       	brcs	.+2      	; 0x660 <SetOutput+0x108>
     65e:	80 e0       	ldi	r24, 0x00	; 0
     660:	78 2b       	or	r23, r24
     662:	ab 2f       	mov	r26, r27
     664:	8a 81       	ldd	r24, Y+2	; 0x02
     666:	a8 1b       	sub	r26, r24
     668:	81 e0       	ldi	r24, 0x01	; 1
     66a:	ba 17       	cp	r27, r26
     66c:	08 f0       	brcs	.+2      	; 0x670 <SetOutput+0x118>
     66e:	80 e0       	ldi	r24, 0x00	; 0
     670:	ba 2f       	mov	r27, r26
     672:	b7 1b       	sub	r27, r23
     674:	7b 2f       	mov	r23, r27
     676:	f1 e0       	ldi	r31, 0x01	; 1
     678:	ab 17       	cp	r26, r27
     67a:	08 f0       	brcs	.+2      	; 0x67e <SetOutput+0x126>
     67c:	f0 e0       	ldi	r31, 0x00	; 0
     67e:	8f 2b       	or	r24, r31
     680:	fe 2d       	mov	r31, r14
     682:	eb 81       	ldd	r30, Y+3	; 0x03
     684:	fe 1b       	sub	r31, r30
     686:	e1 e0       	ldi	r30, 0x01	; 1
     688:	ef 16       	cp	r14, r31
     68a:	08 f0       	brcs	.+2      	; 0x68e <SetOutput+0x136>
     68c:	e0 e0       	ldi	r30, 0x00	; 0
     68e:	af 2f       	mov	r26, r31
     690:	a8 1b       	sub	r26, r24
     692:	8a 2f       	mov	r24, r26
     694:	a1 e0       	ldi	r26, 0x01	; 1
     696:	f8 17       	cp	r31, r24
     698:	08 f0       	brcs	.+2      	; 0x69c <SetOutput+0x144>
     69a:	a0 e0       	ldi	r26, 0x00	; 0
     69c:	ea 2b       	or	r30, r26
     69e:	bc 81       	ldd	r27, Y+4	; 0x04
     6a0:	9b 1b       	sub	r25, r27
     6a2:	e0 90 52 01 	lds	r14, 0x0152
     6a6:	f0 90 53 01 	lds	r15, 0x0153
     6aa:	00 91 54 01 	lds	r16, 0x0154
     6ae:	10 91 55 01 	lds	r17, 0x0155
     6b2:	37 01       	movw	r6, r14
     6b4:	48 01       	movw	r8, r16
     6b6:	99 0c       	add	r9, r9
     6b8:	66 08       	sbc	r6, r6
     6ba:	76 2c       	mov	r7, r6
     6bc:	43 01       	movw	r8, r6
     6be:	9e 1b       	sub	r25, r30
     6c0:	57 01       	movw	r10, r14
     6c2:	68 01       	movw	r12, r16
     6c4:	e6 2c       	mov	r14, r6
     6c6:	f6 2c       	mov	r15, r6
     6c8:	06 2d       	mov	r16, r6
     6ca:	16 2d       	mov	r17, r6
     6cc:	de d3       	rcall	.+1980   	; 0xe8a <__muldi3>
     6ce:	a0 e4       	ldi	r26, 0x40	; 64
     6d0:	aa 2e       	mov	r10, r26
     6d2:	f2 e4       	ldi	r31, 0x42	; 66
     6d4:	bf 2e       	mov	r11, r31
     6d6:	ef e0       	ldi	r30, 0x0F	; 15
     6d8:	ce 2e       	mov	r12, r30
     6da:	dd 24       	eor	r13, r13
     6dc:	ee 24       	eor	r14, r14
     6de:	ff 24       	eor	r15, r15
     6e0:	00 e0       	ldi	r16, 0x00	; 0
     6e2:	10 e0       	ldi	r17, 0x00	; 0
     6e4:	99 d3       	rcall	.+1842   	; 0xe18 <__divdi3>
     6e6:	f9 01       	movw	r30, r18
     6e8:	da 01       	movw	r26, r20
     6ea:	e6 2e       	mov	r14, r22
     6ec:	67 2e       	mov	r6, r23
     6ee:	02 2f       	mov	r16, r18
     6f0:	05 0d       	add	r16, r5
     6f2:	ff 24       	eor	r15, r15
     6f4:	f3 94       	inc	r15
     6f6:	02 17       	cp	r16, r18
     6f8:	08 f0       	brcs	.+2      	; 0x6fc <SetOutput+0x1a4>
     6fa:	ff 24       	eor	r15, r15
     6fc:	1f 2f       	mov	r17, r31
     6fe:	14 0d       	add	r17, r4
     700:	55 24       	eor	r5, r5
     702:	53 94       	inc	r5
     704:	1f 17       	cp	r17, r31
     706:	08 f0       	brcs	.+2      	; 0x70a <SetOutput+0x1b2>
     708:	55 24       	eor	r5, r5
     70a:	ef 2d       	mov	r30, r15
     70c:	e1 0f       	add	r30, r17
     70e:	f1 e0       	ldi	r31, 0x01	; 1
     710:	e1 17       	cp	r30, r17
     712:	08 f0       	brcs	.+2      	; 0x716 <SetOutput+0x1be>
     714:	f0 e0       	ldi	r31, 0x00	; 0
     716:	5f 2a       	or	r5, r31
     718:	1e 2f       	mov	r17, r30
     71a:	2a 2f       	mov	r18, r26
     71c:	23 0d       	add	r18, r3
     71e:	e1 e0       	ldi	r30, 0x01	; 1
     720:	2a 17       	cp	r18, r26
     722:	08 f0       	brcs	.+2      	; 0x726 <SetOutput+0x1ce>
     724:	e0 e0       	ldi	r30, 0x00	; 0
     726:	52 0e       	add	r5, r18
     728:	f1 e0       	ldi	r31, 0x01	; 1
     72a:	52 16       	cp	r5, r18
     72c:	08 f0       	brcs	.+2      	; 0x730 <SetOutput+0x1d8>
     72e:	f0 e0       	ldi	r31, 0x00	; 0
     730:	ef 2b       	or	r30, r31
     732:	25 2d       	mov	r18, r5
     734:	3b 2f       	mov	r19, r27
     736:	32 0d       	add	r19, r2
     738:	f1 e0       	ldi	r31, 0x01	; 1
     73a:	3b 17       	cp	r19, r27
     73c:	08 f0       	brcs	.+2      	; 0x740 <SetOutput+0x1e8>
     73e:	f0 e0       	ldi	r31, 0x00	; 0
     740:	e3 0f       	add	r30, r19
     742:	a1 e0       	ldi	r26, 0x01	; 1
     744:	e3 17       	cp	r30, r19
     746:	08 f0       	brcs	.+2      	; 0x74a <SetOutput+0x1f2>
     748:	a0 e0       	ldi	r26, 0x00	; 0
     74a:	fa 2b       	or	r31, r26
     74c:	3e 2f       	mov	r19, r30
     74e:	49 81       	ldd	r20, Y+1	; 0x01
     750:	4e 0d       	add	r20, r14
     752:	e1 e0       	ldi	r30, 0x01	; 1
     754:	4e 15       	cp	r20, r14
     756:	08 f0       	brcs	.+2      	; 0x75a <SetOutput+0x202>
     758:	e0 e0       	ldi	r30, 0x00	; 0
     75a:	f4 0f       	add	r31, r20
     75c:	a1 e0       	ldi	r26, 0x01	; 1
     75e:	f4 17       	cp	r31, r20
     760:	08 f0       	brcs	.+2      	; 0x764 <SetOutput+0x20c>
     762:	a0 e0       	ldi	r26, 0x00	; 0
     764:	ea 2b       	or	r30, r26
     766:	5a 81       	ldd	r21, Y+2	; 0x02
     768:	56 0d       	add	r21, r6
     76a:	e5 0f       	add	r30, r21
      DAC_Write(DATA_REG | tmp);
     76c:	c9 01       	movw	r24, r18
     76e:	b8 01       	movw	r22, r16
     770:	80 61       	ori	r24, 0x10	; 16
     772:	1e dd       	rcall	.-1476   	; 0x1b0 <DAC_Write>
    }
    DAC_Write(SCTRL_REG | LDAC);    
     774:	61 e0       	ldi	r22, 0x01	; 1
     776:	70 e0       	ldi	r23, 0x00	; 0
     778:	80 e4       	ldi	r24, 0x40	; 64
     77a:	90 e0       	ldi	r25, 0x00	; 0
     77c:	19 dd       	rcall	.-1486   	; 0x1b0 <DAC_Write>
    DAC_Write(SCTRL_REG);
     77e:	60 e0       	ldi	r22, 0x00	; 0
     780:	70 e0       	ldi	r23, 0x00	; 0
     782:	80 e4       	ldi	r24, 0x40	; 64
     784:	90 e0       	ldi	r25, 0x00	; 0
     786:	14 dd       	rcall	.-1496   	; 0x1b0 <DAC_Write>
}
     788:	0f 90       	pop	r0
     78a:	0f 90       	pop	r0
     78c:	0f 90       	pop	r0
     78e:	0f 90       	pop	r0
     790:	cf 91       	pop	r28
     792:	df 91       	pop	r29
     794:	1f 91       	pop	r17
     796:	0f 91       	pop	r16
     798:	ff 90       	pop	r15
     79a:	ef 90       	pop	r14
     79c:	df 90       	pop	r13
     79e:	cf 90       	pop	r12
     7a0:	bf 90       	pop	r11
     7a2:	af 90       	pop	r10
     7a4:	9f 90       	pop	r9
     7a6:	8f 90       	pop	r8
     7a8:	7f 90       	pop	r7
     7aa:	6f 90       	pop	r6
     7ac:	5f 90       	pop	r5
     7ae:	4f 90       	pop	r4
     7b0:	3f 90       	pop	r3
     7b2:	2f 90       	pop	r2
     7b4:	08 95       	ret

000007b6 <Display>:
//******************************************
// Вывести на LCD дисплей результат 
//******************************************
void Display (void)
{
     7b6:	af 92       	push	r10
     7b8:	bf 92       	push	r11
     7ba:	cf 92       	push	r12
     7bc:	df 92       	push	r13
     7be:	ef 92       	push	r14
     7c0:	ff 92       	push	r15
     7c2:	0f 93       	push	r16
     7c4:	1f 93       	push	r17
     7c6:	df 93       	push	r29
     7c8:	cf 93       	push	r28
     7ca:	cd b7       	in	r28, 0x3d	; 61
     7cc:	de b7       	in	r29, 0x3e	; 62
     7ce:	28 97       	sbiw	r28, 0x08	; 8
     7d0:	0f b6       	in	r0, 0x3f	; 63
     7d2:	f8 94       	cli
     7d4:	de bf       	out	0x3e, r29	; 62
     7d6:	0f be       	out	0x3f, r0	; 63
     7d8:	cd bf       	out	0x3d, r28	; 61
    char BufferLCD[8];
    for (unsigned char j=0; j<=7; j++) BufferLCD[j] = 0x20;
     7da:	80 e2       	ldi	r24, 0x20	; 32
     7dc:	89 83       	std	Y+1, r24	; 0x01
     7de:	8a 83       	std	Y+2, r24	; 0x02
     7e0:	8b 83       	std	Y+3, r24	; 0x03
     7e2:	8c 83       	std	Y+4, r24	; 0x04
     7e4:	8d 83       	std	Y+5, r24	; 0x05
     7e6:	8e 83       	std	Y+6, r24	; 0x06
     7e8:	8f 83       	std	Y+7, r24	; 0x07
     7ea:	88 87       	std	Y+8, r24	; 0x08
    long int tmp = BUFFER;
     7ec:	60 91 52 01 	lds	r22, 0x0152
     7f0:	70 91 53 01 	lds	r23, 0x0153
     7f4:	80 91 54 01 	lds	r24, 0x0154
     7f8:	90 91 55 01 	lds	r25, 0x0155
     7fc:	8e 01       	movw	r16, r28
     7fe:	08 5f       	subi	r16, 0xF8	; 248
     800:	1f 4f       	sbci	r17, 0xFF	; 255
    DAC_Write(SCTRL_REG);
}
//******************************************
// Вывести на LCD дисплей результат 
//******************************************
void Display (void)
     802:	5e 01       	movw	r10, r28
     804:	08 94       	sec
     806:	a1 1c       	adc	r10, r1
     808:	b1 1c       	adc	r11, r1
{
    char BufferLCD[8];
    for (unsigned char j=0; j<=7; j++) BufferLCD[j] = 0x20;
    long int tmp = BUFFER;
    for(unsigned char j=0; j<7; j++) {
      BufferLCD[6-j] = 0x30+(tmp % 10);
     80a:	3a e0       	ldi	r19, 0x0A	; 10
     80c:	c3 2e       	mov	r12, r19
     80e:	d1 2c       	mov	r13, r1
     810:	e1 2c       	mov	r14, r1
     812:	f1 2c       	mov	r15, r1
     814:	a7 01       	movw	r20, r14
     816:	96 01       	movw	r18, r12
     818:	95 d3       	rcall	.+1834   	; 0xf44 <__divmodsi4>
     81a:	60 5d       	subi	r22, 0xD0	; 208
     81c:	f8 01       	movw	r30, r16
     81e:	62 93       	st	-Z, r22
     820:	8f 01       	movw	r16, r30
      tmp /= 10;
     822:	b9 01       	movw	r22, r18
     824:	ca 01       	movw	r24, r20
void Display (void)
{
    char BufferLCD[8];
    for (unsigned char j=0; j<=7; j++) BufferLCD[j] = 0x20;
    long int tmp = BUFFER;
    for(unsigned char j=0; j<7; j++) {
     826:	ea 15       	cp	r30, r10
     828:	fb 05       	cpc	r31, r11
     82a:	a1 f7       	brne	.-24     	; 0x814 <Display+0x5e>
      BufferLCD[6-j] = 0x30+(tmp % 10);
      tmp /= 10;
    }
    LCD_Addr(DOT_POS[MODE]);
     82c:	e0 91 46 01 	lds	r30, 0x0146
     830:	f0 91 47 01 	lds	r31, 0x0147
     834:	ee 0f       	add	r30, r30
     836:	ff 1f       	adc	r31, r31
     838:	e4 55       	subi	r30, 0x54	; 84
     83a:	ff 4f       	sbci	r31, 0xFF	; 255
     83c:	80 81       	ld	r24, Z
     83e:	28 dc       	rcall	.-1968   	; 0x90 <LCD_Addr>
    LCD_Write('.');
     840:	8e e2       	ldi	r24, 0x2E	; 46
     842:	6b dc       	rcall	.-1834   	; 0x11a <LCD_Write>
    LCD_Addr(0);
     844:	80 e0       	ldi	r24, 0x00	; 0
     846:	24 dc       	rcall	.-1976   	; 0x90 <LCD_Addr>
     848:	6e 01       	movw	r12, r28
     84a:	08 94       	sec
     84c:	c1 1c       	adc	r12, r1
     84e:	d1 1c       	adc	r13, r1
     850:	00 e0       	ldi	r16, 0x00	; 0
     852:	10 e0       	ldi	r17, 0x00	; 0
     854:	80 2f       	mov	r24, r16
    for(unsigned char j=0; j<7; j++) {
      if (j<DOT_POS[MODE]) 
     856:	e0 91 46 01 	lds	r30, 0x0146
     85a:	f0 91 47 01 	lds	r31, 0x0147
     85e:	ee 0f       	add	r30, r30
     860:	ff 1f       	adc	r31, r31
     862:	e4 55       	subi	r30, 0x54	; 84
     864:	ff 4f       	sbci	r31, 0xFF	; 255
     866:	20 81       	ld	r18, Z
     868:	31 81       	ldd	r19, Z+1	; 0x01
     86a:	02 17       	cp	r16, r18
     86c:	13 07       	cpc	r17, r19
     86e:	0c f0       	brlt	.+2      	; 0x872 <Display+0xbc>
        LCD_Addr(j);
      else 
        LCD_Addr(j+1);
     870:	8f 5f       	subi	r24, 0xFF	; 255
     872:	0e dc       	rcall	.-2020   	; 0x90 <LCD_Addr>
      LCD_Write(BufferLCD[j]);
     874:	f6 01       	movw	r30, r12
     876:	81 91       	ld	r24, Z+
     878:	6f 01       	movw	r12, r30
     87a:	4f dc       	rcall	.-1890   	; 0x11a <LCD_Write>
     87c:	0f 5f       	subi	r16, 0xFF	; 255
     87e:	1f 4f       	sbci	r17, 0xFF	; 255
      tmp /= 10;
    }
    LCD_Addr(DOT_POS[MODE]);
    LCD_Write('.');
    LCD_Addr(0);
    for(unsigned char j=0; j<7; j++) {
     880:	07 30       	cpi	r16, 0x07	; 7
     882:	11 05       	cpc	r17, r1
     884:	39 f7       	brne	.-50     	; 0x854 <Display+0x9e>
        LCD_Addr(j);
      else 
        LCD_Addr(j+1);
      LCD_Write(BufferLCD[j]);
    }
    if (CUR_POS<DOT_POS[MODE]) LCD_Addr(CUR_POS);
     886:	80 91 60 01 	lds	r24, 0x0160
     88a:	90 91 61 01 	lds	r25, 0x0161
     88e:	e0 91 46 01 	lds	r30, 0x0146
     892:	f0 91 47 01 	lds	r31, 0x0147
     896:	ee 0f       	add	r30, r30
     898:	ff 1f       	adc	r31, r31
     89a:	e4 55       	subi	r30, 0x54	; 84
     89c:	ff 4f       	sbci	r31, 0xFF	; 255
     89e:	20 81       	ld	r18, Z
     8a0:	31 81       	ldd	r19, Z+1	; 0x01
     8a2:	82 17       	cp	r24, r18
     8a4:	93 07       	cpc	r25, r19
     8a6:	0c f0       	brlt	.+2      	; 0x8aa <Display+0xf4>
    else LCD_Addr(CUR_POS+1);
     8a8:	8f 5f       	subi	r24, 0xFF	; 255
     8aa:	f2 db       	rcall	.-2076   	; 0x90 <LCD_Addr>
}
     8ac:	28 96       	adiw	r28, 0x08	; 8
     8ae:	0f b6       	in	r0, 0x3f	; 63
     8b0:	f8 94       	cli
     8b2:	de bf       	out	0x3e, r29	; 62
     8b4:	0f be       	out	0x3f, r0	; 63
     8b6:	cd bf       	out	0x3d, r28	; 61
     8b8:	cf 91       	pop	r28
     8ba:	df 91       	pop	r29
     8bc:	1f 91       	pop	r17
     8be:	0f 91       	pop	r16
     8c0:	ff 90       	pop	r15
     8c2:	ef 90       	pop	r14
     8c4:	df 90       	pop	r13
     8c6:	cf 90       	pop	r12
     8c8:	bf 90       	pop	r11
     8ca:	af 90       	pop	r10
     8cc:	08 95       	ret

000008ce <Selector>:
//******************************************
// Меню для набора значения напряжения/силы тока/кода ЦАП
//******************************************
void Selector (void)
{
     8ce:	1f 93       	push	r17
//    CUR_POS = 0;
    Display();
     8d0:	72 df       	rcall	.-284    	; 0x7b6 <Display>
    SetOutput();
     8d2:	42 de       	rcall	.-892    	; 0x558 <SetOutput>
    char SelIsDone = 0;
    while (!SelIsDone) {
      char k = ReadKey();    
     8d4:	e0 dc       	rcall	.-1600   	; 0x296 <ReadKey>
      switch (k) {
     8d6:	82 30       	cpi	r24, 0x02	; 2
     8d8:	71 f0       	breq	.+28     	; 0x8f6 <Selector+0x28>
     8da:	83 30       	cpi	r24, 0x03	; 3
     8dc:	30 f4       	brcc	.+12     	; 0x8ea <Selector+0x1c>
     8de:	88 23       	and	r24, r24
     8e0:	a1 f0       	breq	.+40     	; 0x90a <Selector+0x3c>
     8e2:	81 30       	cpi	r24, 0x01	; 1
     8e4:	09 f0       	breq	.+2      	; 0x8e8 <Selector+0x1a>
     8e6:	85 c0       	rjmp	.+266    	; 0x9f2 <Selector+0x124>
     8e8:	4c c0       	rjmp	.+152    	; 0x982 <Selector+0xb4>
     8ea:	83 30       	cpi	r24, 0x03	; 3
     8ec:	e1 f0       	breq	.+56     	; 0x926 <Selector+0x58>
     8ee:	84 30       	cpi	r24, 0x04	; 4
     8f0:	09 f0       	breq	.+2      	; 0x8f4 <Selector+0x26>
     8f2:	7f c0       	rjmp	.+254    	; 0x9f2 <Selector+0x124>
     8f4:	7c c0       	rjmp	.+248    	; 0x9ee <Selector+0x120>
        case k_Center:
          SelIsDone = 1;  
        break;
        case k_Left:
          if (CUR_POS>0) CUR_POS--;
     8f6:	80 91 60 01 	lds	r24, 0x0160
     8fa:	90 91 61 01 	lds	r25, 0x0161
     8fe:	18 16       	cp	r1, r24
     900:	19 06       	cpc	r1, r25
     902:	0c f0       	brlt	.+2      	; 0x906 <Selector+0x38>
     904:	76 c0       	rjmp	.+236    	; 0x9f2 <Selector+0x124>
     906:	01 97       	sbiw	r24, 0x01	; 1
     908:	09 c0       	rjmp	.+18     	; 0x91c <Selector+0x4e>
        break;
        case k_Right:
          if (CUR_POS<6) CUR_POS++;
     90a:	80 91 60 01 	lds	r24, 0x0160
     90e:	90 91 61 01 	lds	r25, 0x0161
     912:	86 30       	cpi	r24, 0x06	; 6
     914:	91 05       	cpc	r25, r1
     916:	0c f0       	brlt	.+2      	; 0x91a <Selector+0x4c>
     918:	6c c0       	rjmp	.+216    	; 0x9f2 <Selector+0x124>
     91a:	01 96       	adiw	r24, 0x01	; 1
     91c:	90 93 61 01 	sts	0x0161, r25
     920:	80 93 60 01 	sts	0x0160, r24
     924:	66 c0       	rjmp	.+204    	; 0x9f2 <Selector+0x124>
        break;
        case k_Up:
          if (BUFFER+DELTA[CUR_POS]<=MAX[MODE]) BUFFER+=DELTA[CUR_POS];
     926:	e0 91 60 01 	lds	r30, 0x0160
     92a:	f0 91 61 01 	lds	r31, 0x0161
     92e:	ee 0f       	add	r30, r30
     930:	ff 1f       	adc	r31, r31
     932:	ee 0f       	add	r30, r30
     934:	ff 1f       	adc	r31, r31
     936:	e0 5a       	subi	r30, 0xA0	; 160
     938:	ff 4f       	sbci	r31, 0xFF	; 255
     93a:	80 81       	ld	r24, Z
     93c:	91 81       	ldd	r25, Z+1	; 0x01
     93e:	a2 81       	ldd	r26, Z+2	; 0x02
     940:	b3 81       	ldd	r27, Z+3	; 0x03
     942:	20 91 52 01 	lds	r18, 0x0152
     946:	30 91 53 01 	lds	r19, 0x0153
     94a:	40 91 54 01 	lds	r20, 0x0154
     94e:	50 91 55 01 	lds	r21, 0x0155
     952:	82 0f       	add	r24, r18
     954:	93 1f       	adc	r25, r19
     956:	a4 1f       	adc	r26, r20
     958:	b5 1f       	adc	r27, r21
     95a:	e0 91 46 01 	lds	r30, 0x0146
     95e:	f0 91 47 01 	lds	r31, 0x0147
     962:	ee 0f       	add	r30, r30
     964:	ff 1f       	adc	r31, r31
     966:	ee 0f       	add	r30, r30
     968:	ff 1f       	adc	r31, r31
     96a:	e4 58       	subi	r30, 0x84	; 132
     96c:	ff 4f       	sbci	r31, 0xFF	; 255
     96e:	20 81       	ld	r18, Z
     970:	31 81       	ldd	r19, Z+1	; 0x01
     972:	42 81       	ldd	r20, Z+2	; 0x02
     974:	53 81       	ldd	r21, Z+3	; 0x03
     976:	28 17       	cp	r18, r24
     978:	39 07       	cpc	r19, r25
     97a:	4a 07       	cpc	r20, r26
     97c:	5b 07       	cpc	r21, r27
     97e:	cc f1       	brlt	.+114    	; 0x9f2 <Selector+0x124>
     980:	2d c0       	rjmp	.+90     	; 0x9dc <Selector+0x10e>
        break;
        case k_Down:
          if (BUFFER-DELTA[CUR_POS]>=MIN[MODE]) BUFFER-=DELTA[CUR_POS];
     982:	e0 91 60 01 	lds	r30, 0x0160
     986:	f0 91 61 01 	lds	r31, 0x0161
     98a:	ee 0f       	add	r30, r30
     98c:	ff 1f       	adc	r31, r31
     98e:	ee 0f       	add	r30, r30
     990:	ff 1f       	adc	r31, r31
     992:	e0 5a       	subi	r30, 0xA0	; 160
     994:	ff 4f       	sbci	r31, 0xFF	; 255
     996:	80 91 52 01 	lds	r24, 0x0152
     99a:	90 91 53 01 	lds	r25, 0x0153
     99e:	a0 91 54 01 	lds	r26, 0x0154
     9a2:	b0 91 55 01 	lds	r27, 0x0155
     9a6:	20 81       	ld	r18, Z
     9a8:	31 81       	ldd	r19, Z+1	; 0x01
     9aa:	42 81       	ldd	r20, Z+2	; 0x02
     9ac:	53 81       	ldd	r21, Z+3	; 0x03
     9ae:	82 1b       	sub	r24, r18
     9b0:	93 0b       	sbc	r25, r19
     9b2:	a4 0b       	sbc	r26, r20
     9b4:	b5 0b       	sbc	r27, r21
     9b6:	e0 91 46 01 	lds	r30, 0x0146
     9ba:	f0 91 47 01 	lds	r31, 0x0147
     9be:	ee 0f       	add	r30, r30
     9c0:	ff 1f       	adc	r31, r31
     9c2:	ee 0f       	add	r30, r30
     9c4:	ff 1f       	adc	r31, r31
     9c6:	ec 56       	subi	r30, 0x6C	; 108
     9c8:	ff 4f       	sbci	r31, 0xFF	; 255
     9ca:	20 81       	ld	r18, Z
     9cc:	31 81       	ldd	r19, Z+1	; 0x01
     9ce:	42 81       	ldd	r20, Z+2	; 0x02
     9d0:	53 81       	ldd	r21, Z+3	; 0x03
     9d2:	82 17       	cp	r24, r18
     9d4:	93 07       	cpc	r25, r19
     9d6:	a4 07       	cpc	r26, r20
     9d8:	b5 07       	cpc	r27, r21
     9da:	5c f0       	brlt	.+22     	; 0x9f2 <Selector+0x124>
     9dc:	80 93 52 01 	sts	0x0152, r24
     9e0:	90 93 53 01 	sts	0x0153, r25
     9e4:	a0 93 54 01 	sts	0x0154, r26
     9e8:	b0 93 55 01 	sts	0x0155, r27
     9ec:	02 c0       	rjmp	.+4      	; 0x9f2 <Selector+0x124>
    char SelIsDone = 0;
    while (!SelIsDone) {
      char k = ReadKey();    
      switch (k) {
        case k_Center:
          SelIsDone = 1;  
     9ee:	11 e0       	ldi	r17, 0x01	; 1
     9f0:	01 c0       	rjmp	.+2      	; 0x9f4 <Selector+0x126>
        break;
        case k_Up:
          if (BUFFER+DELTA[CUR_POS]<=MAX[MODE]) BUFFER+=DELTA[CUR_POS];
        break;
        case k_Down:
          if (BUFFER-DELTA[CUR_POS]>=MIN[MODE]) BUFFER-=DELTA[CUR_POS];
     9f2:	10 e0       	ldi	r17, 0x00	; 0
        break;
      }
      Beep_On(); _delay_ms(2); Beep_Off();  
     9f4:	8f b5       	in	r24, 0x2f	; 47
     9f6:	80 64       	ori	r24, 0x40	; 64
     9f8:	8f bd       	out	0x2f, r24	; 47
     9fa:	83 ef       	ldi	r24, 0xF3	; 243
     9fc:	91 e0       	ldi	r25, 0x01	; 1
     9fe:	01 97       	sbiw	r24, 0x01	; 1
     a00:	f1 f7       	brne	.-4      	; 0x9fe <Selector+0x130>
     a02:	00 c0       	rjmp	.+0      	; 0xa04 <Selector+0x136>
     a04:	00 00       	nop
     a06:	8f b5       	in	r24, 0x2f	; 47
     a08:	8f 7b       	andi	r24, 0xBF	; 191
     a0a:	8f bd       	out	0x2f, r24	; 47
      Display();
     a0c:	d4 de       	rcall	.-600    	; 0x7b6 <Display>
      SetOutput();
     a0e:	a4 dd       	rcall	.-1208   	; 0x558 <SetOutput>
{
//    CUR_POS = 0;
    Display();
    SetOutput();
    char SelIsDone = 0;
    while (!SelIsDone) {
     a10:	11 23       	and	r17, r17
     a12:	09 f4       	brne	.+2      	; 0xa16 <Selector+0x148>
     a14:	5f cf       	rjmp	.-322    	; 0x8d4 <Selector+0x6>
      }
      Beep_On(); _delay_ms(2); Beep_Off();  
      Display();
      SetOutput();
    }
}
     a16:	1f 91       	pop	r17
     a18:	08 95       	ret

00000a1a <Calibration>:
//******************************************
// Меню калибровки
//******************************************
void Calibration (void)
{
     a1a:	cf 92       	push	r12
     a1c:	df 92       	push	r13
     a1e:	ef 92       	push	r14
     a20:	ff 92       	push	r15
     a22:	0f 93       	push	r16
     a24:	1f 93       	push	r17
     a26:	df 93       	push	r29
     a28:	cf 93       	push	r28
     a2a:	0f 92       	push	r0
     a2c:	cd b7       	in	r28, 0x3d	; 61
     a2e:	de b7       	in	r29, 0x3e	; 62
    LCD_Clear();
     a30:	aa db       	rcall	.-2220   	; 0x186 <LCD_Clear>
    LCD_Addr(0x00); LCD_Write8(Msg_Correct);
     a32:	80 e0       	ldi	r24, 0x00	; 0
     a34:	2d db       	rcall	.-2470   	; 0x90 <LCD_Addr>
     a36:	82 ed       	ldi	r24, 0xD2	; 210
     a38:	90 e0       	ldi	r25, 0x00	; 0
     a3a:	90 db       	rcall	.-2272   	; 0x15c <LCD_Write8>
     a3c:	8f e9       	ldi	r24, 0x9F	; 159
     a3e:	96 e8       	ldi	r25, 0x86	; 134
     a40:	a1 e0       	ldi	r26, 0x01	; 1
     a42:	81 50       	subi	r24, 0x01	; 1
     a44:	90 40       	sbci	r25, 0x00	; 0
     a46:	a0 40       	sbci	r26, 0x00	; 0
     a48:	e1 f7       	brne	.-8      	; 0xa42 <Calibration+0x28>
     a4a:	00 c0       	rjmp	.+0      	; 0xa4c <Calibration+0x32>
     a4c:	00 00       	nop
    _delay_ms(500);
    int Old_MODE = MODE;
     a4e:	e0 90 46 01 	lds	r14, 0x0146
     a52:	f0 90 47 01 	lds	r15, 0x0147
    MODE = M_RAW;
     a56:	10 92 47 01 	sts	0x0147, r1
     a5a:	10 92 46 01 	sts	0x0146, r1
    int pos = 0; char CalIsDone = 0;
     a5e:	cc 24       	eor	r12, r12
     a60:	dd 24       	eor	r13, r13
    char k;
    while(!CalIsDone) {                      
      LCD_Addr(0x40); 
     a62:	80 e4       	ldi	r24, 0x40	; 64
     a64:	15 db       	rcall	.-2518   	; 0x90 <LCD_Addr>
      switch (pos) {
     a66:	c1 14       	cp	r12, r1
     a68:	d1 04       	cpc	r13, r1
     a6a:	31 f0       	breq	.+12     	; 0xa78 <Calibration+0x5e>
     a6c:	91 e0       	ldi	r25, 0x01	; 1
     a6e:	c9 16       	cp	r12, r25
     a70:	d1 04       	cpc	r13, r1
     a72:	09 f0       	breq	.+2      	; 0xa76 <Calibration+0x5c>
     a74:	42 c0       	rjmp	.+132    	; 0xafa <Calibration+0xe0>
     a76:	0c c0       	rjmp	.+24     	; 0xa90 <Calibration+0x76>
        case 0:
          LCD_Write8(Msg_Exit);
     a78:	82 e1       	ldi	r24, 0x12	; 18
     a7a:	91 e0       	ldi	r25, 0x01	; 1
     a7c:	6f db       	rcall	.-2338   	; 0x15c <LCD_Write8>
          k = ReadKey();
     a7e:	0b dc       	rcall	.-2026   	; 0x296 <ReadKey>
          CalIsDone = (k==k_Center);
     a80:	01 e0       	ldi	r16, 0x01	; 1
     a82:	84 30       	cpi	r24, 0x04	; 4
     a84:	09 f0       	breq	.+2      	; 0xa88 <Calibration+0x6e>
     a86:	00 e0       	ldi	r16, 0x00	; 0
          LCD_Clear();
     a88:	89 83       	std	Y+1, r24	; 0x01
     a8a:	7d db       	rcall	.-2310   	; 0x186 <LCD_Clear>
        break;
     a8c:	89 81       	ldd	r24, Y+1	; 0x01
     a8e:	81 c0       	rjmp	.+258    	; 0xb92 <Calibration+0x178>
        case 1:
          LCD_Write8(Msg_0V);
     a90:	82 ee       	ldi	r24, 0xE2	; 226
     a92:	90 e0       	ldi	r25, 0x00	; 0
     a94:	63 db       	rcall	.-2362   	; 0x15c <LCD_Write8>
          k = ReadKey();
     a96:	ff db       	rcall	.-2050   	; 0x296 <ReadKey>
          if (k==k_Center) {
     a98:	84 30       	cpi	r24, 0x04	; 4
     a9a:	09 f0       	breq	.+2      	; 0xa9e <Calibration+0x84>
     a9c:	79 c0       	rjmp	.+242    	; 0xb90 <Calibration+0x176>
            BUFFER = CAL_ZERO;
     a9e:	80 91 48 01 	lds	r24, 0x0148
     aa2:	90 91 49 01 	lds	r25, 0x0149
     aa6:	a0 91 4a 01 	lds	r26, 0x014A
     aaa:	b0 91 4b 01 	lds	r27, 0x014B
     aae:	80 93 52 01 	sts	0x0152, r24
     ab2:	90 93 53 01 	sts	0x0153, r25
     ab6:	a0 93 54 01 	sts	0x0154, r26
     aba:	b0 93 55 01 	sts	0x0155, r27
            Selector();
     abe:	07 df       	rcall	.-498    	; 0x8ce <Selector>
            CAL_ZERO = BUFFER;
     ac0:	80 91 52 01 	lds	r24, 0x0152
     ac4:	90 91 53 01 	lds	r25, 0x0153
     ac8:	a0 91 54 01 	lds	r26, 0x0154
     acc:	b0 91 55 01 	lds	r27, 0x0155
     ad0:	80 93 48 01 	sts	0x0148, r24
     ad4:	90 93 49 01 	sts	0x0149, r25
     ad8:	a0 93 4a 01 	sts	0x014A, r26
     adc:	b0 93 4b 01 	sts	0x014B, r27
     ae0:	bb 0f       	add	r27, r27
     ae2:	88 0b       	sbc	r24, r24
     ae4:	98 2f       	mov	r25, r24
     ae6:	dc 01       	movw	r26, r24
     ae8:	80 93 4c 01 	sts	0x014C, r24
     aec:	80 93 4d 01 	sts	0x014D, r24
     af0:	80 93 4e 01 	sts	0x014E, r24
     af4:	80 93 4f 01 	sts	0x014F, r24
     af8:	3a c0       	rjmp	.+116    	; 0xb6e <Calibration+0x154>
            Config_Update();
            LCD_Addr(0x00); LCD_Write8(Msg_Ok); _delay_ms(1000);
          };
        break;
        default:
          LCD_Write8(NAME[pos-1]);
     afa:	86 01       	movw	r16, r12
     afc:	01 50       	subi	r16, 0x01	; 1
     afe:	10 40       	sbci	r17, 0x00	; 0
     b00:	f8 01       	movw	r30, r16
     b02:	ee 0f       	add	r30, r30
     b04:	ff 1f       	adc	r31, r31
     b06:	e6 5c       	subi	r30, 0xC6	; 198
     b08:	fe 4f       	sbci	r31, 0xFE	; 254
     b0a:	80 81       	ld	r24, Z
     b0c:	91 81       	ldd	r25, Z+1	; 0x01
     b0e:	26 db       	rcall	.-2484   	; 0x15c <LCD_Write8>
          k = ReadKey();
     b10:	c2 db       	rcall	.-2172   	; 0x296 <ReadKey>
          if (k==k_Center) {
     b12:	84 30       	cpi	r24, 0x04	; 4
     b14:	e9 f5       	brne	.+122    	; 0xb90 <Calibration+0x176>
            BUFFER = CAL_FS[pos-1];
     b16:	a3 e0       	ldi	r26, 0x03	; 3
     b18:	00 0f       	add	r16, r16
     b1a:	11 1f       	adc	r17, r17
     b1c:	aa 95       	dec	r26
     b1e:	e1 f7       	brne	.-8      	; 0xb18 <Calibration+0xfe>
     b20:	04 59       	subi	r16, 0x94	; 148
     b22:	1e 4f       	sbci	r17, 0xFE	; 254
     b24:	f8 01       	movw	r30, r16
     b26:	80 81       	ld	r24, Z
     b28:	91 81       	ldd	r25, Z+1	; 0x01
     b2a:	a2 81       	ldd	r26, Z+2	; 0x02
     b2c:	b3 81       	ldd	r27, Z+3	; 0x03
     b2e:	80 93 52 01 	sts	0x0152, r24
     b32:	90 93 53 01 	sts	0x0153, r25
     b36:	a0 93 54 01 	sts	0x0154, r26
     b3a:	b0 93 55 01 	sts	0x0155, r27
            Selector();
     b3e:	c7 de       	rcall	.-626    	; 0x8ce <Selector>
            CAL_FS[pos-1] = BUFFER;
     b40:	80 91 52 01 	lds	r24, 0x0152
     b44:	90 91 53 01 	lds	r25, 0x0153
     b48:	a0 91 54 01 	lds	r26, 0x0154
     b4c:	b0 91 55 01 	lds	r27, 0x0155
     b50:	9c 01       	movw	r18, r24
     b52:	ad 01       	movw	r20, r26
     b54:	55 0f       	add	r21, r21
     b56:	22 0b       	sbc	r18, r18
     b58:	32 2f       	mov	r19, r18
     b5a:	a9 01       	movw	r20, r18
     b5c:	f8 01       	movw	r30, r16
     b5e:	80 83       	st	Z, r24
     b60:	91 83       	std	Z+1, r25	; 0x01
     b62:	a2 83       	std	Z+2, r26	; 0x02
     b64:	b3 83       	std	Z+3, r27	; 0x03
     b66:	24 83       	std	Z+4, r18	; 0x04
     b68:	25 83       	std	Z+5, r18	; 0x05
     b6a:	26 83       	std	Z+6, r18	; 0x06
     b6c:	27 83       	std	Z+7, r18	; 0x07
            Config_Update();
     b6e:	e5 dc       	rcall	.-1590   	; 0x53a <Config_Update>
            LCD_Addr(0x00); LCD_Write8(Msg_Ok); _delay_ms(1000);
     b70:	80 e0       	ldi	r24, 0x00	; 0
     b72:	8e da       	rcall	.-2788   	; 0x90 <LCD_Addr>
     b74:	82 e2       	ldi	r24, 0x22	; 34
     b76:	91 e0       	ldi	r25, 0x01	; 1
     b78:	f1 da       	rcall	.-2590   	; 0x15c <LCD_Write8>
     b7a:	8f e3       	ldi	r24, 0x3F	; 63
     b7c:	9d e0       	ldi	r25, 0x0D	; 13
     b7e:	a3 e0       	ldi	r26, 0x03	; 3
     b80:	81 50       	subi	r24, 0x01	; 1
     b82:	90 40       	sbci	r25, 0x00	; 0
     b84:	a0 40       	sbci	r26, 0x00	; 0
     b86:	e1 f7       	brne	.-8      	; 0xb80 <Calibration+0x166>
     b88:	00 c0       	rjmp	.+0      	; 0xb8a <Calibration+0x170>
     b8a:	00 00       	nop
          };
        break;
        default:
          LCD_Write8(NAME[pos-1]);
          k = ReadKey();
          if (k==k_Center) {
     b8c:	00 e0       	ldi	r16, 0x00	; 0
     b8e:	11 c0       	rjmp	.+34     	; 0xbb2 <Calibration+0x198>
     b90:	00 e0       	ldi	r16, 0x00	; 0
            CAL_FS[pos-1] = BUFFER;
            Config_Update();
            LCD_Addr(0x00); LCD_Write8(Msg_Ok); _delay_ms(1000);
          };
      };
      if (k==k_Left) pos--;
     b92:	82 30       	cpi	r24, 0x02	; 2
     b94:	21 f0       	breq	.+8      	; 0xb9e <Calibration+0x184>
      if (k==k_Right) pos++;
     b96:	88 23       	and	r24, r24
     b98:	41 f0       	breq	.+16     	; 0xbaa <Calibration+0x190>
      if (k==k_Up) pos--;
     b9a:	83 30       	cpi	r24, 0x03	; 3
     b9c:	21 f4       	brne	.+8      	; 0xba6 <Calibration+0x18c>
     b9e:	08 94       	sec
     ba0:	c1 08       	sbc	r12, r1
     ba2:	d1 08       	sbc	r13, r1
     ba4:	06 c0       	rjmp	.+12     	; 0xbb2 <Calibration+0x198>
      if (k==k_Down) pos++;
     ba6:	81 30       	cpi	r24, 0x01	; 1
     ba8:	21 f4       	brne	.+8      	; 0xbb2 <Calibration+0x198>
     baa:	08 94       	sec
     bac:	c1 1c       	adc	r12, r1
     bae:	d1 1c       	adc	r13, r1
     bb0:	05 c0       	rjmp	.+10     	; 0xbbc <Calibration+0x1a2>
      if (pos<0) pos = 6;
     bb2:	9f ef       	ldi	r25, 0xFF	; 255
     bb4:	c9 16       	cp	r12, r25
     bb6:	9f ef       	ldi	r25, 0xFF	; 255
     bb8:	d9 06       	cpc	r13, r25
     bba:	29 f0       	breq	.+10     	; 0xbc6 <Calibration+0x1ac>
      if (pos>6) pos = 0;
     bbc:	a7 e0       	ldi	r26, 0x07	; 7
     bbe:	ca 16       	cp	r12, r26
     bc0:	d1 04       	cpc	r13, r1
     bc2:	2c f4       	brge	.+10     	; 0xbce <Calibration+0x1b4>
     bc4:	06 c0       	rjmp	.+12     	; 0xbd2 <Calibration+0x1b8>
      };
      if (k==k_Left) pos--;
      if (k==k_Right) pos++;
      if (k==k_Up) pos--;
      if (k==k_Down) pos++;
      if (pos<0) pos = 6;
     bc6:	e6 e0       	ldi	r30, 0x06	; 6
     bc8:	ce 2e       	mov	r12, r30
     bca:	d1 2c       	mov	r13, r1
     bcc:	02 c0       	rjmp	.+4      	; 0xbd2 <Calibration+0x1b8>
      if (pos>6) pos = 0;
     bce:	cc 24       	eor	r12, r12
     bd0:	dd 24       	eor	r13, r13
      LCD_Addr(0x00); LCD_Write8(Msg_Correct);
     bd2:	80 e0       	ldi	r24, 0x00	; 0
     bd4:	5d da       	rcall	.-2886   	; 0x90 <LCD_Addr>
     bd6:	82 ed       	ldi	r24, 0xD2	; 210
     bd8:	90 e0       	ldi	r25, 0x00	; 0
     bda:	c0 da       	rcall	.-2688   	; 0x15c <LCD_Write8>
      Beep_On(); _delay_ms(2); Beep_Off();  
     bdc:	8f b5       	in	r24, 0x2f	; 47
     bde:	80 64       	ori	r24, 0x40	; 64
     be0:	8f bd       	out	0x2f, r24	; 47
     be2:	e3 ef       	ldi	r30, 0xF3	; 243
     be4:	f1 e0       	ldi	r31, 0x01	; 1
     be6:	31 97       	sbiw	r30, 0x01	; 1
     be8:	f1 f7       	brne	.-4      	; 0xbe6 <Calibration+0x1cc>
     bea:	00 c0       	rjmp	.+0      	; 0xbec <Calibration+0x1d2>
     bec:	00 00       	nop
     bee:	8f b5       	in	r24, 0x2f	; 47
     bf0:	8f 7b       	andi	r24, 0xBF	; 191
     bf2:	8f bd       	out	0x2f, r24	; 47
    _delay_ms(500);
    int Old_MODE = MODE;
    MODE = M_RAW;
    int pos = 0; char CalIsDone = 0;
    char k;
    while(!CalIsDone) {                      
     bf4:	00 23       	and	r16, r16
     bf6:	09 f4       	brne	.+2      	; 0xbfa <Calibration+0x1e0>
     bf8:	34 cf       	rjmp	.-408    	; 0xa62 <Calibration+0x48>
      if (pos<0) pos = 6;
      if (pos>6) pos = 0;
      LCD_Addr(0x00); LCD_Write8(Msg_Correct);
      Beep_On(); _delay_ms(2); Beep_Off();  
    }
    Beep_On(); _delay_ms(20); Beep_Off();  
     bfa:	8f b5       	in	r24, 0x2f	; 47
     bfc:	80 64       	ori	r24, 0x40	; 64
     bfe:	8f bd       	out	0x2f, r24	; 47
     c00:	87 e8       	ldi	r24, 0x87	; 135
     c02:	93 e1       	ldi	r25, 0x13	; 19
     c04:	01 97       	sbiw	r24, 0x01	; 1
     c06:	f1 f7       	brne	.-4      	; 0xc04 <Calibration+0x1ea>
     c08:	00 c0       	rjmp	.+0      	; 0xc0a <Calibration+0x1f0>
     c0a:	00 00       	nop
     c0c:	8f b5       	in	r24, 0x2f	; 47
     c0e:	8f 7b       	andi	r24, 0xBF	; 191
     c10:	8f bd       	out	0x2f, r24	; 47
    LCD_Clear();
     c12:	b9 da       	rcall	.-2702   	; 0x186 <LCD_Clear>
    MODE = Old_MODE;
     c14:	f0 92 47 01 	sts	0x0147, r15
     c18:	e0 92 46 01 	sts	0x0146, r14
    BUFFER = 0;
     c1c:	10 92 52 01 	sts	0x0152, r1
     c20:	10 92 53 01 	sts	0x0153, r1
     c24:	10 92 54 01 	sts	0x0154, r1
     c28:	10 92 55 01 	sts	0x0155, r1
}
     c2c:	0f 90       	pop	r0
     c2e:	cf 91       	pop	r28
     c30:	df 91       	pop	r29
     c32:	1f 91       	pop	r17
     c34:	0f 91       	pop	r16
     c36:	ff 90       	pop	r15
     c38:	ef 90       	pop	r14
     c3a:	df 90       	pop	r13
     c3c:	cf 90       	pop	r12
     c3e:	08 95       	ret

00000c40 <main>:
//******************************************
int main (void)
{
     c40:	1f 93       	push	r17
    Config_Load();                  // Загружаем конфигурацию из EEPROM
     c42:	6c dc       	rcall	.-1832   	; 0x51c <Config_Load>
    cli();                          
     c44:	f8 94       	cli
    Init();                         // Инициализируем всё
     c46:	ae db       	rcall	.-2212   	; 0x3a4 <Init>
    sei();                          // Разрешаем прерывания
     c48:	78 94       	sei
    
    Beep_On(); _delay_ms(50); Beep_Off();
     c4a:	8f b5       	in	r24, 0x2f	; 47
     c4c:	80 64       	ori	r24, 0x40	; 64
     c4e:	8f bd       	out	0x2f, r24	; 47
     c50:	83 ed       	ldi	r24, 0xD3	; 211
     c52:	90 e3       	ldi	r25, 0x30	; 48
     c54:	01 97       	sbiw	r24, 0x01	; 1
     c56:	f1 f7       	brne	.-4      	; 0xc54 <main+0x14>
     c58:	00 c0       	rjmp	.+0      	; 0xc5a <main+0x1a>
     c5a:	00 00       	nop
     c5c:	8f b5       	in	r24, 0x2f	; 47
     c5e:	8f 7b       	andi	r24, 0xBF	; 191
     c60:	8f bd       	out	0x2f, r24	; 47
    MODE = M_10V_10mA;              // Начальный режим 10V_10mA
     c62:	83 e0       	ldi	r24, 0x03	; 3
     c64:	90 e0       	ldi	r25, 0x00	; 0
     c66:	90 93 47 01 	sts	0x0147, r25
     c6a:	80 93 46 01 	sts	0x0146, r24
    BUFFER = MIN[MODE];
     c6e:	10 92 52 01 	sts	0x0152, r1
     c72:	10 92 53 01 	sts	0x0153, r1
     c76:	10 92 54 01 	sts	0x0154, r1
     c7a:	10 92 55 01 	sts	0x0155, r1
    SetOutput();
     c7e:	6c dc       	rcall	.-1832   	; 0x558 <SetOutput>
    LCD_Addr(0x40); LCD_Write8(Msg_10V_10mA);
     c80:	80 e4       	ldi	r24, 0x40	; 64
     c82:	06 da       	rcall	.-3060   	; 0x90 <LCD_Addr>
     c84:	8a ef       	ldi	r24, 0xFA	; 250
     c86:	90 e0       	ldi	r25, 0x00	; 0
     c88:	69 da       	rcall	.-2862   	; 0x15c <LCD_Write8>
    while(1) {                      // Основной цикл
      LCD_Addr(0x0);
     c8a:	80 e0       	ldi	r24, 0x00	; 0
     c8c:	01 da       	rcall	.-3070   	; 0x90 <LCD_Addr>
      LCD_Write8(Msg_Select);
     c8e:	82 e3       	ldi	r24, 0x32	; 50
     c90:	91 e0       	ldi	r25, 0x01	; 1
     c92:	64 da       	rcall	.-2872   	; 0x15c <LCD_Write8>
      char k = ReadKey();
     c94:	00 db       	rcall	.-2560   	; 0x296 <ReadKey>
     c96:	18 2f       	mov	r17, r24
      Beep_On(); _delay_ms(2); Beep_Off();
     c98:	8f b5       	in	r24, 0x2f	; 47
     c9a:	80 64       	ori	r24, 0x40	; 64
     c9c:	8f bd       	out	0x2f, r24	; 47
     c9e:	83 ef       	ldi	r24, 0xF3	; 243
     ca0:	91 e0       	ldi	r25, 0x01	; 1
     ca2:	01 97       	sbiw	r24, 0x01	; 1
     ca4:	f1 f7       	brne	.-4      	; 0xca2 <main+0x62>
     ca6:	00 c0       	rjmp	.+0      	; 0xca8 <main+0x68>
     ca8:	00 00       	nop
     caa:	8f b5       	in	r24, 0x2f	; 47
     cac:	8f 7b       	andi	r24, 0xBF	; 191
     cae:	8f bd       	out	0x2f, r24	; 47
      if ((k==k_Left) && (MODE>0)) {
     cb0:	12 30       	cpi	r17, 0x02	; 2
     cb2:	51 f4       	brne	.+20     	; 0xcc8 <main+0x88>
     cb4:	20 91 46 01 	lds	r18, 0x0146
     cb8:	30 91 47 01 	lds	r19, 0x0147
     cbc:	12 16       	cp	r1, r18
     cbe:	13 06       	cpc	r1, r19
     cc0:	94 f4       	brge	.+36     	; 0xce6 <main+0xa6>
        MODE--; 
     cc2:	21 50       	subi	r18, 0x01	; 1
     cc4:	30 40       	sbci	r19, 0x00	; 0
     cc6:	0b c0       	rjmp	.+22     	; 0xcde <main+0x9e>
//        BUFFER = MIN[MODE];
      };
      if ((k==k_Right) && (MODE<MODES-1)) {
     cc8:	11 23       	and	r17, r17
     cca:	69 f4       	brne	.+26     	; 0xce6 <main+0xa6>
     ccc:	20 91 46 01 	lds	r18, 0x0146
     cd0:	30 91 47 01 	lds	r19, 0x0147
     cd4:	25 30       	cpi	r18, 0x05	; 5
     cd6:	31 05       	cpc	r19, r1
     cd8:	34 f4       	brge	.+12     	; 0xce6 <main+0xa6>
        MODE++; 
     cda:	2f 5f       	subi	r18, 0xFF	; 255
     cdc:	3f 4f       	sbci	r19, 0xFF	; 255
     cde:	30 93 47 01 	sts	0x0147, r19
     ce2:	20 93 46 01 	sts	0x0146, r18
//        BUFFER = MIN[MODE];
      };
      LCD_Addr(0x40);
     ce6:	80 e4       	ldi	r24, 0x40	; 64
     ce8:	d3 d9       	rcall	.-3162   	; 0x90 <LCD_Addr>
      if (MODE==M_RAW) {
     cea:	e0 91 46 01 	lds	r30, 0x0146
     cee:	f0 91 47 01 	lds	r31, 0x0147
     cf2:	30 97       	sbiw	r30, 0x00	; 0
     cf4:	41 f4       	brne	.+16     	; 0xd06 <main+0xc6>
        LCD_Write8(Msg_Cal);
     cf6:	8a ed       	ldi	r24, 0xDA	; 218
     cf8:	90 e0       	ldi	r25, 0x00	; 0
     cfa:	30 da       	rcall	.-2976   	; 0x15c <LCD_Write8>
        LCD_Addr(0x0);
     cfc:	80 e0       	ldi	r24, 0x00	; 0
     cfe:	c8 d9       	rcall	.-3184   	; 0x90 <LCD_Addr>
        LCD_Write8(Msg_CLR);
     d00:	8a e1       	ldi	r24, 0x1A	; 26
     d02:	91 e0       	ldi	r25, 0x01	; 1
     d04:	06 c0       	rjmp	.+12     	; 0xd12 <main+0xd2>
      }
      else  
        LCD_Write8(NAME[MODE]);
     d06:	ee 0f       	add	r30, r30
     d08:	ff 1f       	adc	r31, r31
     d0a:	e6 5c       	subi	r30, 0xC6	; 198
     d0c:	fe 4f       	sbci	r31, 0xFE	; 254
     d0e:	80 81       	ld	r24, Z
     d10:	91 81       	ldd	r25, Z+1	; 0x01
     d12:	24 da       	rcall	.-3000   	; 0x15c <LCD_Write8>
      if ((k==k_Center)&&(MODE==M_RAW)) {
     d14:	14 30       	cpi	r17, 0x04	; 4
     d16:	41 f4       	brne	.+16     	; 0xd28 <main+0xe8>
     d18:	20 91 46 01 	lds	r18, 0x0146
     d1c:	30 91 47 01 	lds	r19, 0x0147
     d20:	21 15       	cp	r18, r1
     d22:	31 05       	cpc	r19, r1
     d24:	09 f4       	brne	.+2      	; 0xd28 <main+0xe8>
        Calibration();
     d26:	79 de       	rcall	.-782    	; 0xa1a <Calibration>
//        MODE = M_10V_10mA;
//        LCD_Addr(0x40); LCD_Write8(Msg_10V_10mA);
      }
      if (MODE!=M_RAW)
     d28:	e0 91 46 01 	lds	r30, 0x0146
     d2c:	f0 91 47 01 	lds	r31, 0x0147
     d30:	30 97       	sbiw	r30, 0x00	; 0
     d32:	09 f4       	brne	.+2      	; 0xd36 <main+0xf6>
     d34:	aa cf       	rjmp	.-172    	; 0xc8a <main+0x4a>
        switch (k) {
     d36:	13 30       	cpi	r17, 0x03	; 3
     d38:	31 f0       	breq	.+12     	; 0xd46 <main+0x106>
     d3a:	14 30       	cpi	r17, 0x04	; 4
     d3c:	e9 f0       	breq	.+58     	; 0xd78 <main+0x138>
     d3e:	11 30       	cpi	r17, 0x01	; 1
     d40:	09 f0       	breq	.+2      	; 0xd44 <main+0x104>
     d42:	a3 cf       	rjmp	.-186    	; 0xc8a <main+0x4a>
     d44:	07 c0       	rjmp	.+14     	; 0xd54 <main+0x114>
          case k_Center:
            Selector();
          break;
          case k_Up:
            BUFFER = MAX[MODE];
     d46:	ee 0f       	add	r30, r30
     d48:	ff 1f       	adc	r31, r31
     d4a:	ee 0f       	add	r30, r30
     d4c:	ff 1f       	adc	r31, r31
     d4e:	e4 58       	subi	r30, 0x84	; 132
     d50:	ff 4f       	sbci	r31, 0xFF	; 255
     d52:	06 c0       	rjmp	.+12     	; 0xd60 <main+0x120>
            Selector();
          break;
          case k_Down:
            BUFFER = MIN[MODE]; 
     d54:	ee 0f       	add	r30, r30
     d56:	ff 1f       	adc	r31, r31
     d58:	ee 0f       	add	r30, r30
     d5a:	ff 1f       	adc	r31, r31
     d5c:	ec 56       	subi	r30, 0x6C	; 108
     d5e:	ff 4f       	sbci	r31, 0xFF	; 255
     d60:	80 81       	ld	r24, Z
     d62:	91 81       	ldd	r25, Z+1	; 0x01
     d64:	a2 81       	ldd	r26, Z+2	; 0x02
     d66:	b3 81       	ldd	r27, Z+3	; 0x03
     d68:	80 93 52 01 	sts	0x0152, r24
     d6c:	90 93 53 01 	sts	0x0153, r25
     d70:	a0 93 54 01 	sts	0x0154, r26
     d74:	b0 93 55 01 	sts	0x0155, r27
            Selector();
     d78:	aa dd       	rcall	.-1196   	; 0x8ce <Selector>
     d7a:	87 cf       	rjmp	.-242    	; 0xc8a <main+0x4a>

00000d7c <__umoddi3>:

;; R25:R18 = R24:R18  umod  R17:R10
;; Ordinary ABI-Function

DEFUN __umoddi3
    set
     d7c:	68 94       	set
    rjmp __udivdi3_umoddi3
     d7e:	01 c0       	rjmp	.+2      	; 0xd82 <__udivdi3_umoddi3>

00000d80 <__udivdi3>:

;; R25:R18 = R24:R18  udiv  R17:R10
;; Ordinary ABI-Function

DEFUN __udivdi3
    clt
     d80:	e8 94       	clt

00000d82 <__udivdi3_umoddi3>:
ENDF __udivdi3

DEFUN __udivdi3_umoddi3
    push    C0
     d82:	8f 92       	push	r8
    push    C1
     d84:	9f 92       	push	r9
    push    C4
     d86:	cf 93       	push	r28
    push    C5
     d88:	df 93       	push	r29
    XCALL   __udivmod64
     d8a:	05 d0       	rcall	.+10     	; 0xd96 <__udivmod64>
    pop     C5
     d8c:	df 91       	pop	r29
    pop     C4
     d8e:	cf 91       	pop	r28
    pop     C1
     d90:	9f 90       	pop	r9
    pop     C0
     d92:	8f 90       	pop	r8
    ret
     d94:	08 95       	ret

00000d96 <__udivmod64>:
;; T = 1: Compute Remainder in A[] and shift SS one Bit left

DEFUN __udivmod64

    ;; Clear Remainder (C6, C7 will follow)
    clr     C0
     d96:	88 24       	eor	r8, r8
    clr     C1
     d98:	99 24       	eor	r9, r9
    wmov    C2, C0
     d9a:	f4 01       	movw	r30, r8
    wmov    C4, C0
     d9c:	e4 01       	movw	r28, r8
    ldi     C7, 64
     d9e:	b0 e4       	ldi	r27, 0x40	; 64

#if SPEED_DIV == 0 || SPEED_DIV == 16
    ;; Initialize Loop-Counter
    mov     R_cnt, C7
     da0:	1b 2e       	mov	r1, r27
    wmov    C6, C0
     da2:	d4 01       	movw	r26, r8
    clr     C7

#elif  SPEED_DIV == 16

    ;; Compare shifted Dividend against Divisor
    cp      A7, B3
     da4:	9d 15       	cp	r25, r13
    cpc     C0, B4
     da6:	8e 04       	cpc	r8, r14
    cpc     C1, B5
     da8:	9f 04       	cpc	r9, r15
    cpc     C2, B6
     daa:	e0 07       	cpc	r30, r16
    cpc     C3, B7
     dac:	f1 07       	cpc	r31, r17
    brcc    2f
     dae:	38 f4       	brcc	.+14     	; 0xdbe <__udivmod64+0x28>

    ;; Divisor is greater than shifted Dividen: We can shift the Dividend
    ;; and it is still smaller than the Divisor --> Shift one 32-Bit Chunk
    wmov  C2,A6  $  wmov C0,A4
     db0:	fc 01       	movw	r30, r24
     db2:	4b 01       	movw	r8, r22
    wmov  A6,A2  $  wmov A4,A0
     db4:	ca 01       	movw	r24, r20
     db6:	b9 01       	movw	r22, r18
    wmov  A2,C6  $  wmov A0,C4
     db8:	ad 01       	movw	r20, r26
     dba:	9e 01       	movw	r18, r28

    ;; Set Bit Counter to 32
    lsr     R_cnt
     dbc:	16 94       	lsr	r1
#endif /* SPEED_DIV */

;; The very Division + Remainder Routine

3:  ;; Left-shift Dividend...
    lsl A0     $  rol A1     $  rol A2     $  rol A3
     dbe:	22 0f       	add	r18, r18
     dc0:	33 1f       	adc	r19, r19
     dc2:	44 1f       	adc	r20, r20
     dc4:	55 1f       	adc	r21, r21
    rol A4     $  rol A5     $  rol A6     $  rol A7
     dc6:	66 1f       	adc	r22, r22
     dc8:	77 1f       	adc	r23, r23
     dca:	88 1f       	adc	r24, r24
     dcc:	99 1f       	adc	r25, r25

    ;; ...into Remainder
    rol C0     $  rol C1     $  rol C2     $  rol C3
     dce:	88 1c       	adc	r8, r8
     dd0:	99 1c       	adc	r9, r9
     dd2:	ee 1f       	adc	r30, r30
     dd4:	ff 1f       	adc	r31, r31
    rol C4     $  rol C5     $  rol C6     $  rol C7
     dd6:	cc 1f       	adc	r28, r28
     dd8:	dd 1f       	adc	r29, r29
     dda:	aa 1f       	adc	r26, r26
     ddc:	bb 1f       	adc	r27, r27

    ;; Compare Remainder and Divisor
    CP  C0,B0  $  cpc C1,B1  $  cpc C2,B2  $  cpc C3,B3
     dde:	8a 14       	cp	r8, r10
     de0:	9b 04       	cpc	r9, r11
     de2:	ec 05       	cpc	r30, r12
     de4:	fd 05       	cpc	r31, r13
    cpc C4,B4  $  cpc C5,B5  $  cpc C6,B6  $  cpc C7,B7
     de6:	ce 05       	cpc	r28, r14
     de8:	df 05       	cpc	r29, r15
     dea:	a0 07       	cpc	r26, r16
     dec:	b1 07       	cpc	r27, r17

    brcs 4f
     dee:	48 f0       	brcs	.+18     	; 0xe02 <__udivmod64+0x6c>

    ;; Divisor fits into Remainder:  Subtract it from Remainder...
    SUB C0,B0  $  sbc C1,B1  $  sbc C2,B2  $  sbc C3,B3
     df0:	8a 18       	sub	r8, r10
     df2:	9b 08       	sbc	r9, r11
     df4:	ec 09       	sbc	r30, r12
     df6:	fd 09       	sbc	r31, r13
    sbc C4,B4  $  sbc C5,B5  $  sbc C6,B6  $  sbc C7,B7
     df8:	ce 09       	sbc	r28, r14
     dfa:	df 09       	sbc	r29, r15
     dfc:	a0 0b       	sbc	r26, r16
     dfe:	b1 0b       	sbc	r27, r17

    ;; ...and set according Bit in the upcoming Quotient
    ;; The Bit will travel to its final Position
    ori A0, 1
     e00:	21 60       	ori	r18, 0x01	; 1

4:  ;; This Bit is done
    dec     R_cnt
     e02:	1a 94       	dec	r1
    brne    3b
     e04:	e1 f6       	brne	.-72     	; 0xdbe <__udivmod64+0x28>
    ;; __zero_reg__ is 0 again

    ;; T = 0: We are fine with the Quotient in A[]
    ;; T = 1: Copy Remainder to A[]
5:  brtc    6f
     e06:	2e f4       	brtc	.+10     	; 0xe12 <__udivmod64+0x7c>
    wmov    A0, C0
     e08:	94 01       	movw	r18, r8
    wmov    A2, C2
     e0a:	af 01       	movw	r20, r30
    wmov    A4, C4
     e0c:	be 01       	movw	r22, r28
    wmov    A6, C6
     e0e:	cd 01       	movw	r24, r26
    ;; Move the Sign of the Result to SS.7
    lsl     SS
     e10:	00 0c       	add	r0, r0

6:  ret
     e12:	08 95       	ret

00000e14 <__moddi3>:

;; R25:R18 = R24:R18  mod  R17:R10
;; Ordinary ABI-Function

DEFUN __moddi3
    set
     e14:	68 94       	set
    rjmp    __divdi3_moddi3
     e16:	01 c0       	rjmp	.+2      	; 0xe1a <__divdi3_moddi3>

00000e18 <__divdi3>:

;; R25:R18 = R24:R18  div  R17:R10
;; Ordinary ABI-Function

DEFUN __divdi3
    clt
     e18:	e8 94       	clt

00000e1a <__divdi3_moddi3>:
ENDF __divdi3

DEFUN  __divdi3_moddi3
#if SPEED_DIV
    mov     r31, A7
     e1a:	f9 2f       	mov	r31, r25
    or      r31, B7
     e1c:	f1 2b       	or	r31, r17
    brmi    0f
     e1e:	0a f0       	brmi	.+2      	; 0xe22 <__divdi3_moddi3+0x8>
    ;; Both Signs are 0:  the following Complexitiy is not needed
    XJMP    __udivdi3_umoddi3
     e20:	b0 cf       	rjmp	.-160    	; 0xd82 <__udivdi3_umoddi3>
#endif /* SPEED_DIV */    

0:  ;; The Prologue
    ;; Save Z = 12 Registers:  Y, 17...8
    ;; No Frame needed (X = 0)
    clr r26
     e22:	aa 27       	eor	r26, r26
    clr r27
     e24:	bb 27       	eor	r27, r27
    ldi r30, lo8(gs(1f))
     e26:	e6 e1       	ldi	r30, 0x16	; 22
    ldi r31, hi8(gs(1f))
     e28:	f7 e0       	ldi	r31, 0x07	; 7
    XJMP __prologue_saves__ + ((18 - 12) * 2)
     e2a:	ad c0       	rjmp	.+346    	; 0xf86 <__prologue_saves__+0xc>

1:  ;; SS.7 will contain the Sign of the Quotient  (A.sign * B.sign)
    ;; SS.6 will contain the Sign of the Remainder (A.sign)
    mov     SS, A7
     e2c:	09 2e       	mov	r0, r25
    asr     SS
     e2e:	05 94       	asr	r0
    ;; Adjust Dividend's Sign as needed
#if SPEED_DIV
    ;; Compiling for Speed we know that at least one Sign must be < 0
    ;; Thus, if A[] >= 0 then we know B[] < 0
    brpl    22f
     e30:	1a f4       	brpl	.+6      	; 0xe38 <__divdi3_moddi3+0x1e>
#else
    brpl    21f
#endif /* SPEED_DIV */
   
    XCALL   X__negdi2
     e32:	1b d0       	rcall	.+54     	; 0xe6a <X__negdi2>

    ;; Adjust Divisor's Sign and SS.7 as needed
21: tst     B7
     e34:	11 23       	and	r17, r17
    brpl    3f
     e36:	92 f4       	brpl	.+36     	; 0xe5c <__divdi3_moddi3+0x42>
22: ldi     NN, 1 << 7
     e38:	f0 e8       	ldi	r31, 0x80	; 128
    eor     SS, NN
     e3a:	0f 26       	eor	r0, r31

    ldi NN, -1
     e3c:	ff ef       	ldi	r31, 0xFF	; 255
    com B4     $  com B5     $  com B6     $  com B7
     e3e:	e0 94       	com	r14
     e40:	f0 94       	com	r15
     e42:	00 95       	com	r16
     e44:	10 95       	com	r17
               $  com B1     $  com B2     $  com B3
     e46:	b0 94       	com	r11
     e48:	c0 94       	com	r12
     e4a:	d0 94       	com	r13
    NEG B0
     e4c:	a1 94       	neg	r10
               $  sbc B1,NN  $  sbc B2,NN  $  sbc B3,NN
     e4e:	bf 0a       	sbc	r11, r31
     e50:	cf 0a       	sbc	r12, r31
     e52:	df 0a       	sbc	r13, r31
    sbc B4,NN  $  sbc B5,NN  $  sbc B6,NN  $  sbc B7,NN
     e54:	ef 0a       	sbc	r14, r31
     e56:	ff 0a       	sbc	r15, r31
     e58:	0f 0b       	sbc	r16, r31
     e5a:	1f 0b       	sbc	r17, r31

3:  ;; Do the unsigned 64-Bit Division/Modulo (depending on T-flag)
    XCALL   __udivmod64
     e5c:	9c df       	rcall	.-200    	; 0xd96 <__udivmod64>
    ;; Adjust Result's Sign
#ifdef __AVR_ERRATA_SKIP_JMP_CALL__
    tst     SS
    brpl    4f
#else
    sbrc    SS, 7
     e5e:	07 fc       	sbrc	r0, 7
#endif /* __AVR_HAVE_JMP_CALL__ */
    XCALL   X__negdi2
     e60:	04 d0       	rcall	.+8      	; 0xe6a <X__negdi2>

4:  ;; Epilogue: Restore the Z = 12 Registers and return
    in r28, __SP_L__
     e62:	cd b7       	in	r28, 0x3d	; 61
    in r29, __SP_H__
     e64:	de b7       	in	r29, 0x3e	; 62
    ldi r30, 12
     e66:	ec e0       	ldi	r30, 0x0C	; 12
    XJMP __epilogue_restores__ + ((18 - 12) * 2)
     e68:	aa c0       	rjmp	.+340    	; 0xfbe <__epilogue_restores__+0xc>

00000e6a <X__negdi2>:
#endif /* L_divdi3 */

#if defined (L_negdi2)
DEFUN X__negdi2

    com  A4    $  com  A5    $  com  A6    $  com  A7
     e6a:	60 95       	com	r22
     e6c:	70 95       	com	r23
     e6e:	80 95       	com	r24
     e70:	90 95       	com	r25
               $  com  A1    $  com  A2    $  com  A3
     e72:	30 95       	com	r19
     e74:	40 95       	com	r20
     e76:	50 95       	com	r21
    NEG  A0
     e78:	21 95       	neg	r18
               $  sbci A1,-1 $  sbci A2,-1 $  sbci A3,-1
     e7a:	3f 4f       	sbci	r19, 0xFF	; 255
     e7c:	4f 4f       	sbci	r20, 0xFF	; 255
     e7e:	5f 4f       	sbci	r21, 0xFF	; 255
    sbci A4,-1 $  sbci A5,-1 $  sbci A6,-1 $  sbci A7,-1
     e80:	6f 4f       	sbci	r22, 0xFF	; 255
     e82:	7f 4f       	sbci	r23, 0xFF	; 255
     e84:	8f 4f       	sbci	r24, 0xFF	; 255
     e86:	9f 4f       	sbci	r25, 0xFF	; 255
    ret
     e88:	08 95       	ret

00000e8a <__muldi3>:
;; A[]     *= B[]
;; R25:R18 *= R17:R10
;; Ordinary ABI-Function

DEFUN __muldi3
    push    r29
     e8a:	df 93       	push	r29
    push    r28
     e8c:	cf 93       	push	r28
    push    r17
     e8e:	1f 93       	push	r17
    push    r16
     e90:	0f 93       	push	r16

    ;; Counting in Words, we have to perform a 4 * 4 Multiplication

    ;; 3 * 0  +  0 * 3
    mul  A7,B0  $             $  mov C7,r0
     e92:	9a 9d       	mul	r25, r10
     e94:	f0 2d       	mov	r31, r0
    mul  A0,B7  $             $  add C7,r0
     e96:	21 9f       	mul	r18, r17
     e98:	f0 0d       	add	r31, r0
    mul  A6,B1  $             $  add C7,r0
     e9a:	8b 9d       	mul	r24, r11
     e9c:	f0 0d       	add	r31, r0
    mul  A6,B0  $  mov C6,r0  $  add C7,r1
     e9e:	8a 9d       	mul	r24, r10
     ea0:	e0 2d       	mov	r30, r0
     ea2:	f1 0d       	add	r31, r1
    mul  B6,A1  $             $  add C7,r0
     ea4:	03 9f       	mul	r16, r19
     ea6:	f0 0d       	add	r31, r0
    mul  B6,A0  $  add C6,r0  $  adc C7,r1
     ea8:	02 9f       	mul	r16, r18
     eaa:	e0 0d       	add	r30, r0
     eac:	f1 1d       	adc	r31, r1

    ;; 1 * 2
    mul  A2,B4  $  add C6,r0  $  adc C7,r1
     eae:	4e 9d       	mul	r20, r14
     eb0:	e0 0d       	add	r30, r0
     eb2:	f1 1d       	adc	r31, r1
    mul  A3,B4  $             $  add C7,r0
     eb4:	5e 9d       	mul	r21, r14
     eb6:	f0 0d       	add	r31, r0
    mul  A2,B5  $             $  add C7,r0
     eb8:	4f 9d       	mul	r20, r15
     eba:	f0 0d       	add	r31, r0

    push    A5
     ebc:	7f 93       	push	r23
    push    A4
     ebe:	6f 93       	push	r22
    push    B1
     ec0:	bf 92       	push	r11
    push    B0
     ec2:	af 92       	push	r10
    push    A3
     ec4:	5f 93       	push	r21
    push    A2
     ec6:	4f 93       	push	r20

    ;; 0 * 0
    wmov    26, B0
     ec8:	d5 01       	movw	r26, r10
    XCALL   __umulhisi3
     eca:	30 d0       	rcall	.+96     	; 0xf2c <__umulhisi3>
    wmov    C0, 22
     ecc:	8b 01       	movw	r16, r22
    wmov    C2, 24
     ece:	ac 01       	movw	r20, r24

    ;; 0 * 2
    wmov    26, B4
     ed0:	d7 01       	movw	r26, r14
    XCALL   __umulhisi3  $  wmov C4,22            $ add C6,24 $ adc C7,25
     ed2:	2c d0       	rcall	.+88     	; 0xf2c <__umulhisi3>
     ed4:	eb 01       	movw	r28, r22
     ed6:	e8 0f       	add	r30, r24
     ed8:	f9 1f       	adc	r31, r25

    wmov    26, B2
     eda:	d6 01       	movw	r26, r12
    ;; 0 * 1
    rcall   __muldi3_6
     edc:	1f d0       	rcall	.+62     	; 0xf1c <__muldi3_6>

    pop     A0
     ede:	2f 91       	pop	r18
    pop     A1
     ee0:	3f 91       	pop	r19
    ;; 1 * 1
    wmov    26, B2
     ee2:	d6 01       	movw	r26, r12
    XCALL   __umulhisi3  $  add C4,22 $ adc C5,23 $ adc C6,24 $ adc C7,25
     ee4:	23 d0       	rcall	.+70     	; 0xf2c <__umulhisi3>
     ee6:	c6 0f       	add	r28, r22
     ee8:	d7 1f       	adc	r29, r23
     eea:	e8 1f       	adc	r30, r24
     eec:	f9 1f       	adc	r31, r25

    pop     r26
     eee:	af 91       	pop	r26
    pop     r27
     ef0:	bf 91       	pop	r27
    ;; 1 * 0
    rcall   __muldi3_6
     ef2:	14 d0       	rcall	.+40     	; 0xf1c <__muldi3_6>

    pop     A0
     ef4:	2f 91       	pop	r18
    pop     A1
     ef6:	3f 91       	pop	r19
    ;; 2 * 0
    XCALL   __umulhisi3  $  add C4,22 $ adc C5,23 $ adc C6,24 $ adc C7,25
     ef8:	19 d0       	rcall	.+50     	; 0xf2c <__umulhisi3>
     efa:	c6 0f       	add	r28, r22
     efc:	d7 1f       	adc	r29, r23
     efe:	e8 1f       	adc	r30, r24
     f00:	f9 1f       	adc	r31, r25

    ;; 2 * 1
    wmov    26, B2
     f02:	d6 01       	movw	r26, r12
    XCALL   __umulhisi3  $            $           $ add C6,22 $ adc C7,23
     f04:	13 d0       	rcall	.+38     	; 0xf2c <__umulhisi3>
     f06:	e6 0f       	add	r30, r22
     f08:	f7 1f       	adc	r31, r23

    ;; A[] = C[]
    wmov    A0, C0
     f0a:	98 01       	movw	r18, r16
    ;; A2 = C2 already
    wmov    A4, C4
     f0c:	be 01       	movw	r22, r28
    wmov    A6, C6
     f0e:	cf 01       	movw	r24, r30

    clr     __zero_reg__
     f10:	11 24       	eor	r1, r1
    pop     r16
     f12:	0f 91       	pop	r16
    pop     r17
     f14:	1f 91       	pop	r17
    pop     r28
     f16:	cf 91       	pop	r28
    pop     r29
     f18:	df 91       	pop	r29
    ret
     f1a:	08 95       	ret

00000f1c <__muldi3_6>:

__muldi3_6:
    XCALL   __umulhisi3
     f1c:	07 d0       	rcall	.+14     	; 0xf2c <__umulhisi3>
    add     C2, 22
     f1e:	46 0f       	add	r20, r22
    adc     C3, 23
     f20:	57 1f       	adc	r21, r23
    adc     C4, 24
     f22:	c8 1f       	adc	r28, r24
    adc     C5, 25
     f24:	d9 1f       	adc	r29, r25
    brcc    0f
     f26:	08 f4       	brcc	.+2      	; 0xf2a <__muldi3_6+0xe>
    adiw    C6, 1
     f28:	31 96       	adiw	r30, 0x01	; 1
0:  ret
     f2a:	08 95       	ret

00000f2c <__umulhisi3>:
#if defined (L_umulhisi3)
;;; R25:R22 = (unsigned long) R27:R26 * (unsigned long) R19:R18
;;; C3:C0   = (unsigned long) A1:A0   * (unsigned long) B1:B0
;;; Clobbers: __tmp_reg__
DEFUN __umulhisi3
    mul     A0, B0
     f2c:	a2 9f       	mul	r26, r18
    movw    C0, r0
     f2e:	b0 01       	movw	r22, r0
    mul     A1, B1
     f30:	b3 9f       	mul	r27, r19
    movw    C2, r0
     f32:	c0 01       	movw	r24, r0
    mul     A0, B1
     f34:	a3 9f       	mul	r26, r19
    rcall   1f
     f36:	01 d0       	rcall	.+2      	; 0xf3a <__umulhisi3+0xe>
    mul     A1, B0
     f38:	b2 9f       	mul	r27, r18
1:  add     C1, r0
     f3a:	70 0d       	add	r23, r0
    adc     C2, r1
     f3c:	81 1d       	adc	r24, r1
    clr     __zero_reg__
     f3e:	11 24       	eor	r1, r1
    adc     C3, __zero_reg__
     f40:	91 1d       	adc	r25, r1
    ret
     f42:	08 95       	ret

00000f44 <__divmodsi4>:
     f44:	97 fb       	bst	r25, 7
     f46:	09 2e       	mov	r0, r25
     f48:	05 26       	eor	r0, r21
     f4a:	0e d0       	rcall	.+28     	; 0xf68 <__divmodsi4_neg1>
     f4c:	57 fd       	sbrc	r21, 7
     f4e:	04 d0       	rcall	.+8      	; 0xf58 <__divmodsi4_neg2>
     f50:	4b d0       	rcall	.+150    	; 0xfe8 <__udivmodsi4>
     f52:	0a d0       	rcall	.+20     	; 0xf68 <__divmodsi4_neg1>
     f54:	00 1c       	adc	r0, r0
     f56:	38 f4       	brcc	.+14     	; 0xf66 <__divmodsi4_exit>

00000f58 <__divmodsi4_neg2>:
     f58:	50 95       	com	r21
     f5a:	40 95       	com	r20
     f5c:	30 95       	com	r19
     f5e:	21 95       	neg	r18
     f60:	3f 4f       	sbci	r19, 0xFF	; 255
     f62:	4f 4f       	sbci	r20, 0xFF	; 255
     f64:	5f 4f       	sbci	r21, 0xFF	; 255

00000f66 <__divmodsi4_exit>:
     f66:	08 95       	ret

00000f68 <__divmodsi4_neg1>:
     f68:	f6 f7       	brtc	.-4      	; 0xf66 <__divmodsi4_exit>
     f6a:	90 95       	com	r25
     f6c:	80 95       	com	r24
     f6e:	70 95       	com	r23
     f70:	61 95       	neg	r22
     f72:	7f 4f       	sbci	r23, 0xFF	; 255
     f74:	8f 4f       	sbci	r24, 0xFF	; 255
     f76:	9f 4f       	sbci	r25, 0xFF	; 255
     f78:	08 95       	ret

00000f7a <__prologue_saves__>:
     f7a:	2f 92       	push	r2
     f7c:	3f 92       	push	r3
     f7e:	4f 92       	push	r4
     f80:	5f 92       	push	r5
     f82:	6f 92       	push	r6
     f84:	7f 92       	push	r7
     f86:	8f 92       	push	r8
     f88:	9f 92       	push	r9
     f8a:	af 92       	push	r10
     f8c:	bf 92       	push	r11
     f8e:	cf 92       	push	r12
     f90:	df 92       	push	r13
     f92:	ef 92       	push	r14
     f94:	ff 92       	push	r15
     f96:	0f 93       	push	r16
     f98:	1f 93       	push	r17
     f9a:	cf 93       	push	r28
     f9c:	df 93       	push	r29
     f9e:	cd b7       	in	r28, 0x3d	; 61
     fa0:	de b7       	in	r29, 0x3e	; 62
     fa2:	ca 1b       	sub	r28, r26
     fa4:	db 0b       	sbc	r29, r27
     fa6:	0f b6       	in	r0, 0x3f	; 63
     fa8:	f8 94       	cli
     faa:	de bf       	out	0x3e, r29	; 62
     fac:	0f be       	out	0x3f, r0	; 63
     fae:	cd bf       	out	0x3d, r28	; 61
     fb0:	09 94       	ijmp

00000fb2 <__epilogue_restores__>:
     fb2:	2a 88       	ldd	r2, Y+18	; 0x12
     fb4:	39 88       	ldd	r3, Y+17	; 0x11
     fb6:	48 88       	ldd	r4, Y+16	; 0x10
     fb8:	5f 84       	ldd	r5, Y+15	; 0x0f
     fba:	6e 84       	ldd	r6, Y+14	; 0x0e
     fbc:	7d 84       	ldd	r7, Y+13	; 0x0d
     fbe:	8c 84       	ldd	r8, Y+12	; 0x0c
     fc0:	9b 84       	ldd	r9, Y+11	; 0x0b
     fc2:	aa 84       	ldd	r10, Y+10	; 0x0a
     fc4:	b9 84       	ldd	r11, Y+9	; 0x09
     fc6:	c8 84       	ldd	r12, Y+8	; 0x08
     fc8:	df 80       	ldd	r13, Y+7	; 0x07
     fca:	ee 80       	ldd	r14, Y+6	; 0x06
     fcc:	fd 80       	ldd	r15, Y+5	; 0x05
     fce:	0c 81       	ldd	r16, Y+4	; 0x04
     fd0:	1b 81       	ldd	r17, Y+3	; 0x03
     fd2:	aa 81       	ldd	r26, Y+2	; 0x02
     fd4:	b9 81       	ldd	r27, Y+1	; 0x01
     fd6:	ce 0f       	add	r28, r30
     fd8:	d1 1d       	adc	r29, r1
     fda:	0f b6       	in	r0, 0x3f	; 63
     fdc:	f8 94       	cli
     fde:	de bf       	out	0x3e, r29	; 62
     fe0:	0f be       	out	0x3f, r0	; 63
     fe2:	cd bf       	out	0x3d, r28	; 61
     fe4:	ed 01       	movw	r28, r26
     fe6:	08 95       	ret

00000fe8 <__udivmodsi4>:
     fe8:	a1 e2       	ldi	r26, 0x21	; 33
     fea:	1a 2e       	mov	r1, r26
     fec:	aa 1b       	sub	r26, r26
     fee:	bb 1b       	sub	r27, r27
     ff0:	fd 01       	movw	r30, r26
     ff2:	0d c0       	rjmp	.+26     	; 0x100e <__udivmodsi4_ep>

00000ff4 <__udivmodsi4_loop>:
     ff4:	aa 1f       	adc	r26, r26
     ff6:	bb 1f       	adc	r27, r27
     ff8:	ee 1f       	adc	r30, r30
     ffa:	ff 1f       	adc	r31, r31
     ffc:	a2 17       	cp	r26, r18
     ffe:	b3 07       	cpc	r27, r19
    1000:	e4 07       	cpc	r30, r20
    1002:	f5 07       	cpc	r31, r21
    1004:	20 f0       	brcs	.+8      	; 0x100e <__udivmodsi4_ep>
    1006:	a2 1b       	sub	r26, r18
    1008:	b3 0b       	sbc	r27, r19
    100a:	e4 0b       	sbc	r30, r20
    100c:	f5 0b       	sbc	r31, r21

0000100e <__udivmodsi4_ep>:
    100e:	66 1f       	adc	r22, r22
    1010:	77 1f       	adc	r23, r23
    1012:	88 1f       	adc	r24, r24
    1014:	99 1f       	adc	r25, r25
    1016:	1a 94       	dec	r1
    1018:	69 f7       	brne	.-38     	; 0xff4 <__udivmodsi4_loop>
    101a:	60 95       	com	r22
    101c:	70 95       	com	r23
    101e:	80 95       	com	r24
    1020:	90 95       	com	r25
    1022:	9b 01       	movw	r18, r22
    1024:	ac 01       	movw	r20, r24
    1026:	bd 01       	movw	r22, r26
    1028:	cf 01       	movw	r24, r30
    102a:	08 95       	ret

0000102c <__eerd_block_m8>:
    102c:	dc 01       	movw	r26, r24
    102e:	cb 01       	movw	r24, r22

00001030 <__eerd_blraw_m8>:
    1030:	fc 01       	movw	r30, r24
    1032:	e1 99       	sbic	0x1c, 1	; 28
    1034:	fe cf       	rjmp	.-4      	; 0x1032 <__eerd_blraw_m8+0x2>
    1036:	06 c0       	rjmp	.+12     	; 0x1044 <__eerd_blraw_m8+0x14>
    1038:	ff bb       	out	0x1f, r31	; 31
    103a:	ee bb       	out	0x1e, r30	; 30
    103c:	e0 9a       	sbi	0x1c, 0	; 28
    103e:	31 96       	adiw	r30, 0x01	; 1
    1040:	0d b2       	in	r0, 0x1d	; 29
    1042:	0d 92       	st	X+, r0
    1044:	41 50       	subi	r20, 0x01	; 1
    1046:	50 40       	sbci	r21, 0x00	; 0
    1048:	b8 f7       	brcc	.-18     	; 0x1038 <__eerd_blraw_m8+0x8>
    104a:	08 95       	ret

0000104c <__eeupd_block_m8>:
    104c:	dc 01       	movw	r26, r24
    104e:	a4 0f       	add	r26, r20
    1050:	b5 1f       	adc	r27, r21
    1052:	41 50       	subi	r20, 0x01	; 1
    1054:	50 40       	sbci	r21, 0x00	; 0
    1056:	40 f0       	brcs	.+16     	; 0x1068 <__eeupd_block_m8+0x1c>
    1058:	cb 01       	movw	r24, r22
    105a:	84 0f       	add	r24, r20
    105c:	95 1f       	adc	r25, r21
    105e:	2e 91       	ld	r18, -X
    1060:	05 d0       	rcall	.+10     	; 0x106c <__eeupd_r18_m8>
    1062:	41 50       	subi	r20, 0x01	; 1
    1064:	50 40       	sbci	r21, 0x00	; 0
    1066:	d8 f7       	brcc	.-10     	; 0x105e <__eeupd_block_m8+0x12>
    1068:	08 95       	ret

0000106a <__eeupd_byte_m8>:
    106a:	26 2f       	mov	r18, r22

0000106c <__eeupd_r18_m8>:
    106c:	e1 99       	sbic	0x1c, 1	; 28
    106e:	fe cf       	rjmp	.-4      	; 0x106c <__eeupd_r18_m8>
    1070:	9f bb       	out	0x1f, r25	; 31
    1072:	8e bb       	out	0x1e, r24	; 30
    1074:	e0 9a       	sbi	0x1c, 0	; 28
    1076:	01 97       	sbiw	r24, 0x01	; 1
    1078:	0d b2       	in	r0, 0x1d	; 29
    107a:	02 16       	cp	r0, r18
    107c:	31 f0       	breq	.+12     	; 0x108a <__eeupd_r18_m8+0x1e>
    107e:	2d bb       	out	0x1d, r18	; 29
    1080:	0f b6       	in	r0, 0x3f	; 63
    1082:	f8 94       	cli
    1084:	e2 9a       	sbi	0x1c, 2	; 28
    1086:	e1 9a       	sbi	0x1c, 1	; 28
    1088:	0f be       	out	0x3f, r0	; 63
    108a:	08 95       	ret

0000108c <_exit>:
    108c:	f8 94       	cli

0000108e <__stop_program>:
    108e:	ff cf       	rjmp	.-2      	; 0x108e <__stop_program>
