2013-09-30 18:09:58 +02:00
|
|
|
|
|
|
|
|
|
Test.elf: file format elf32-avr
|
|
|
|
|
|
|
|
|
|
Sections:
|
|
|
|
|
Idx Name Size VMA LMA File off Algn
|
2013-10-06 18:10:06 +02:00
|
|
|
|
0 .data 000000f2 00800100 000017f6 0000188a 2**0
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, ALLOC, LOAD, DATA
|
2013-10-06 18:10:06 +02:00
|
|
|
|
1 .text 000017f6 00000000 00000000 00000094 2**1
|
2013-10-05 00:36:29 +02:00
|
|
|
|
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
2013-10-06 18:10:06 +02:00
|
|
|
|
2 .bss 00000014 008001f2 008001f2 0000197c 2**0
|
|
|
|
|
ALLOC
|
|
|
|
|
3 .stab 00001254 00000000 00000000 0000197c 2**2
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, READONLY, DEBUGGING
|
2013-10-06 18:10:06 +02:00
|
|
|
|
4 .stabstr 0000032e 00000000 00000000 00002bd0 2**0
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, READONLY, DEBUGGING
|
2013-10-06 18:10:06 +02:00
|
|
|
|
5 .comment 0000002f 00000000 00000000 00002efe 2**0
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, READONLY
|
2013-10-06 18:10:06 +02:00
|
|
|
|
6 .debug_aranges 00000208 00000000 00000000 00002f2d 2**0
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, READONLY, DEBUGGING
|
2013-10-06 18:10:06 +02:00
|
|
|
|
7 .debug_info 000027cc 00000000 00000000 00003135 2**0
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, READONLY, DEBUGGING
|
2013-10-06 18:10:06 +02:00
|
|
|
|
8 .debug_abbrev 00000fcb 00000000 00000000 00005901 2**0
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, READONLY, DEBUGGING
|
2013-10-06 18:10:06 +02:00
|
|
|
|
9 .debug_line 000013d8 00000000 00000000 000068cc 2**0
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, READONLY, DEBUGGING
|
2013-10-06 18:10:06 +02:00
|
|
|
|
10 .debug_frame 000004f8 00000000 00000000 00007ca4 2**2
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, READONLY, DEBUGGING
|
2013-10-06 18:10:06 +02:00
|
|
|
|
11 .debug_str 000008f9 00000000 00000000 0000819c 2**0
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, READONLY, DEBUGGING
|
2013-10-06 18:10:06 +02:00
|
|
|
|
12 .debug_loc 0000202b 00000000 00000000 00008a95 2**0
|
|
|
|
|
CONTENTS, READONLY, DEBUGGING
|
|
|
|
|
13 .debug_ranges 00000150 00000000 00000000 0000aac0 2**0
|
2013-09-30 18:09:58 +02:00
|
|
|
|
CONTENTS, READONLY, DEBUGGING
|
|
|
|
|
|
|
|
|
|
Disassembly of section .text:
|
|
|
|
|
|
|
|
|
|
00000000 <__vectors>:
|
2013-10-06 18:10:06 +02:00
|
|
|
|
0: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__ctors_end>
|
|
|
|
|
4: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
8: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
10: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
14: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
18: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
1c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
20: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
24: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
28: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
2c: 0c 94 e1 03 jmp 0x7c2 ; 0x7c2 <__vector_11>
|
|
|
|
|
30: 0c 94 09 04 jmp 0x812 ; 0x812 <__vector_12>
|
|
|
|
|
34: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
38: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
3c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
40: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
44: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
48: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
4c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
50: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
54: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
58: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
5c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
60: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
64: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
68: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
6c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
|
|
|
|
70: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
|
2013-09-30 18:09:58 +02:00
|
|
|
|
|
2013-10-06 18:10:06 +02:00
|
|
|
|
00000074 <device_descriptor>:
|
|
|
|
|
74: 12 01 00 02 02 00 00 10 01 00 03 00 00 01 01 02 ................
|
|
|
|
|
84: 03 01 ..
|
2013-09-30 18:09:58 +02:00
|
|
|
|
|
2013-10-06 18:10:06 +02:00
|
|
|
|
00000086 <string0>:
|
|
|
|
|
86: 04 03 09 04 ....
|
2013-09-30 18:09:58 +02:00
|
|
|
|
|
2013-10-06 18:10:06 +02:00
|
|
|
|
0000008a <string1>:
|
|
|
|
|
8a: 14 03 42 00 6c 00 75 00 62 00 62 00 46 00 69 00 ..B.l.u.b.b.F.i.
|
|
|
|
|
9a: 73 00 68 00 00 00 s.h...
|
|
|
|
|
|
|
|
|
|
000000a0 <string2>:
|
|
|
|
|
a0: 20 03 48 00 61 00 63 00 6b 00 65 00 72 00 2d 00 .H.a.c.k.e.r.-.
|
|
|
|
|
b0: 4a 00 65 00 6f 00 70 00 61 00 72 00 64 00 79 00 J.e.o.p.a.r.d.y.
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
000000c2 <string3>:
|
|
|
|
|
c2: 0e 03 30 00 30 00 30 00 30 00 30 00 30 00 00 00 ..0.0.0.0.0.0...
|
|
|
|
|
|
|
|
|
|
000000d2 <__ctors_end>:
|
|
|
|
|
d2: 11 24 eor r1, r1
|
|
|
|
|
d4: 1f be out 0x3f, r1 ; 63
|
|
|
|
|
d6: cf ef ldi r28, 0xFF ; 255
|
|
|
|
|
d8: d4 e0 ldi r29, 0x04 ; 4
|
|
|
|
|
da: de bf out 0x3e, r29 ; 62
|
|
|
|
|
dc: cd bf out 0x3d, r28 ; 61
|
|
|
|
|
|
|
|
|
|
000000de <__do_copy_data>:
|
|
|
|
|
de: 11 e0 ldi r17, 0x01 ; 1
|
|
|
|
|
e0: a0 e0 ldi r26, 0x00 ; 0
|
|
|
|
|
e2: b1 e0 ldi r27, 0x01 ; 1
|
|
|
|
|
e4: e6 ef ldi r30, 0xF6 ; 246
|
|
|
|
|
e6: f7 e1 ldi r31, 0x17 ; 23
|
|
|
|
|
e8: 02 c0 rjmp .+4 ; 0xee <__do_copy_data+0x10>
|
|
|
|
|
ea: 05 90 lpm r0, Z+
|
|
|
|
|
ec: 0d 92 st X+, r0
|
|
|
|
|
ee: a2 3f cpi r26, 0xF2 ; 242
|
|
|
|
|
f0: b1 07 cpc r27, r17
|
|
|
|
|
f2: d9 f7 brne .-10 ; 0xea <__do_copy_data+0xc>
|
|
|
|
|
|
|
|
|
|
000000f4 <__do_clear_bss>:
|
|
|
|
|
f4: 22 e0 ldi r18, 0x02 ; 2
|
|
|
|
|
f6: a2 ef ldi r26, 0xF2 ; 242
|
|
|
|
|
f8: b1 e0 ldi r27, 0x01 ; 1
|
|
|
|
|
fa: 01 c0 rjmp .+2 ; 0xfe <.do_clear_bss_start>
|
|
|
|
|
|
|
|
|
|
000000fc <.do_clear_bss_loop>:
|
|
|
|
|
fc: 1d 92 st X+, r1
|
|
|
|
|
|
|
|
|
|
000000fe <.do_clear_bss_start>:
|
|
|
|
|
fe: a6 30 cpi r26, 0x06 ; 6
|
|
|
|
|
100: b2 07 cpc r27, r18
|
|
|
|
|
102: e1 f7 brne .-8 ; 0xfc <.do_clear_bss_loop>
|
|
|
|
|
104: 0e 94 44 02 call 0x488 ; 0x488 <main>
|
|
|
|
|
108: 0c 94 f9 0b jmp 0x17f2 ; 0x17f2 <_exit>
|
|
|
|
|
|
|
|
|
|
0000010c <__bad_interrupt>:
|
|
|
|
|
10c: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
|
|
|
|
|
|
|
|
|
|
00000110 <ledg>:
|
|
|
|
|
int rgb = 0;
|
|
|
|
|
rgb |= (mask & (1<<0)) ? (1<<0) : (0<<0);
|
|
|
|
|
rgb |= (mask & (1<<1)) ? (1<<1) : (0<<1);
|
|
|
|
|
rgb |= (mask & (1<<2)) ? (1<<2) : (0<<2);
|
|
|
|
|
|
|
|
|
|
PORTB &= ~((1<<PINB5) | (1<<PINB6) | (1<<PINB7));
|
|
|
|
|
110: 95 b1 in r25, 0x05 ; 5
|
|
|
|
|
112: 9f 71 andi r25, 0x1F ; 31
|
|
|
|
|
114: 95 b9 out 0x05, r25 ; 5
|
|
|
|
|
PORTB |= (rgb<<PINB5);
|
|
|
|
|
116: 95 b1 in r25, 0x05 ; 5
|
|
|
|
|
118: 82 95 swap r24
|
|
|
|
|
11a: 88 0f add r24, r24
|
|
|
|
|
11c: 80 7e andi r24, 0xE0 ; 224
|
|
|
|
|
11e: 98 2b or r25, r24
|
|
|
|
|
120: 95 b9 out 0x05, r25 ; 5
|
|
|
|
|
122: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00000124 <init_led>:
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void init_led()
|
2013-09-30 18:09:58 +02:00
|
|
|
|
{
|
2013-10-05 00:36:29 +02:00
|
|
|
|
DDRB |= (1<<PINB7) | (1<<PINB6) | (1<<PINB5);
|
2013-10-06 18:10:06 +02:00
|
|
|
|
124: 84 b1 in r24, 0x04 ; 4
|
|
|
|
|
126: 80 6e ori r24, 0xE0 ; 224
|
|
|
|
|
128: 84 b9 out 0x04, r24 ; 4
|
|
|
|
|
12a: 08 95 ret
|
|
|
|
|
|
|
|
|
|
0000012c <uart_putchar>:
|
|
|
|
|
#include "rs232.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int uart_putchar(char c, FILE *stream)
|
|
|
|
|
{
|
|
|
|
|
12c: cf 93 push r28
|
|
|
|
|
12e: c8 2f mov r28, r24
|
|
|
|
|
if (c == '\n') {
|
|
|
|
|
130: 8a 30 cpi r24, 0x0A ; 10
|
|
|
|
|
132: 19 f4 brne .+6 ; 0x13a <uart_putchar+0xe>
|
|
|
|
|
uart_putchar('\r', stream); //Warten solange bis Zeichen gesendet wurde
|
|
|
|
|
134: 8d e0 ldi r24, 0x0D ; 13
|
|
|
|
|
136: 0e 94 96 00 call 0x12c ; 0x12c <uart_putchar>
|
|
|
|
|
}
|
|
|
|
|
loop_until_bit_is_set(UCSR1A, UDRE1); //Ausgabe des Zeichens
|
|
|
|
|
13a: e8 ec ldi r30, 0xC8 ; 200
|
|
|
|
|
13c: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
13e: 90 81 ld r25, Z
|
|
|
|
|
140: 95 ff sbrs r25, 5
|
|
|
|
|
142: fd cf rjmp .-6 ; 0x13e <uart_putchar+0x12>
|
|
|
|
|
UDR1 = c;
|
|
|
|
|
144: c0 93 ce 00 sts 0x00CE, r28
|
|
|
|
|
return (0);
|
|
|
|
|
}
|
|
|
|
|
148: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
14a: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
14c: cf 91 pop r28
|
|
|
|
|
14e: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00000150 <init_rs232>:
|
|
|
|
|
|
|
|
|
|
void init_rs232()
|
|
|
|
|
{
|
|
|
|
|
UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1
|
|
|
|
|
150: 86 e0 ldi r24, 0x06 ; 6
|
|
|
|
|
152: 80 93 ca 00 sts 0x00CA, r24
|
|
|
|
|
UCSR1B |= /*(1<<RXEN1) | (1<<RXCIE1) | */ (1<<TXEN1); //Enable TXEN im Register UCR TX-Data Enable
|
|
|
|
|
156: e9 ec ldi r30, 0xC9 ; 201
|
|
|
|
|
158: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
15a: 80 81 ld r24, Z
|
|
|
|
|
15c: 88 60 ori r24, 0x08 ; 8
|
|
|
|
|
15e: 80 83 st Z, r24
|
|
|
|
|
UBRR1L = (F_CPU / (BAUD_RATE * 16L) - 1); //Teiler wird gesetzt
|
|
|
|
|
160: 87 e6 ldi r24, 0x67 ; 103
|
|
|
|
|
162: 80 93 cc 00 sts 0x00CC, r24
|
|
|
|
|
stdout = &rs232; //<2F>ffnet einen Kanal f<>r printf (STDOUT)
|
|
|
|
|
166: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
168: 91 e0 ldi r25, 0x01 ; 1
|
|
|
|
|
16a: 90 93 03 02 sts 0x0203, r25
|
|
|
|
|
16e: 80 93 02 02 sts 0x0202, r24
|
|
|
|
|
172: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00000174 <init>:
|
|
|
|
|
#include "usb_serial_config.h" // USB configuration
|
|
|
|
|
#include "usb_serial.h"
|
|
|
|
|
|
|
|
|
|
void init()
|
|
|
|
|
{
|
|
|
|
|
init_led();
|
|
|
|
|
174: 0e 94 92 00 call 0x124 ; 0x124 <init_led>
|
|
|
|
|
ledg(YELLOW);
|
|
|
|
|
178: 86 e0 ldi r24, 0x06 ; 6
|
|
|
|
|
17a: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
17c: 0e 94 88 00 call 0x110 ; 0x110 <ledg>
|
|
|
|
|
ledg(WHITE);
|
|
|
|
|
180: 87 e0 ldi r24, 0x07 ; 7
|
|
|
|
|
182: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
184: 0e 94 88 00 call 0x110 ; 0x110 <ledg>
|
|
|
|
|
init_rs232();
|
|
|
|
|
188: 0e 94 a8 00 call 0x150 ; 0x150 <init_rs232>
|
|
|
|
|
ledg(YELLOW);
|
|
|
|
|
18c: 86 e0 ldi r24, 0x06 ; 6
|
|
|
|
|
18e: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
190: 0e 94 88 00 call 0x110 ; 0x110 <ledg>
|
|
|
|
|
usb_init(); // initialize USB
|
|
|
|
|
194: 0e 94 9f 02 call 0x53e ; 0x53e <usb_init>
|
|
|
|
|
sei();
|
|
|
|
|
198: 78 94 sei
|
|
|
|
|
fprintf(&rs232, "Init....\n");
|
|
|
|
|
19a: 2e e0 ldi r18, 0x0E ; 14
|
|
|
|
|
19c: 31 e0 ldi r19, 0x01 ; 1
|
|
|
|
|
19e: 49 e0 ldi r20, 0x09 ; 9
|
|
|
|
|
1a0: 50 e0 ldi r21, 0x00 ; 0
|
|
|
|
|
1a2: 61 e0 ldi r22, 0x01 ; 1
|
|
|
|
|
1a4: 70 e0 ldi r23, 0x00 ; 0
|
|
|
|
|
1a6: 8f e6 ldi r24, 0x6F ; 111
|
|
|
|
|
1a8: 91 e0 ldi r25, 0x01 ; 1
|
|
|
|
|
1aa: 0e 94 a0 08 call 0x1140 ; 0x1140 <fwrite>
|
|
|
|
|
1ae: 08 95 ret
|
|
|
|
|
|
|
|
|
|
000001b0 <cdc_notify_getlinecoding>:
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// This routine is called, when baudrate and transmission parameters (see
|
|
|
|
|
// cdc_linecoding in usb_serial.h) are requested by the host.
|
|
|
|
|
// Parameters of this variable can be modified in this routine, before they
|
|
|
|
|
// will be sent to host.
|
|
|
|
|
{
|
|
|
|
|
1b0: 08 95 ret
|
|
|
|
|
|
|
|
|
|
000001b2 <cdc_notify_setlinecoding>:
|
|
|
|
|
void cdc_notify_setlinecoding(void)
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// This routine is called, when baudrate and transmission parameters (see
|
|
|
|
|
// cdc_linecoding in usb_serial.h) are set by the host.
|
|
|
|
|
// New settings are available in this variable, when this routine is called.
|
|
|
|
|
{
|
|
|
|
|
1b2: 08 95 ret
|
|
|
|
|
|
|
|
|
|
000001b4 <cdc_notify_setcontrollinestate>:
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// This routine is called, when host is changing handshake output lines RTS and
|
|
|
|
|
// DTR.
|
|
|
|
|
// New settings are available in the global variable cdc_rtsdtr (see
|
|
|
|
|
// usb_serial.h).
|
|
|
|
|
{
|
|
|
|
|
1b4: 08 95 ret
|
|
|
|
|
|
|
|
|
|
000001b6 <usb_ep>:
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
void usb_ep(uint8_t endpoint, uint16_t datasize)
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// handle of endpoint interrupt for incoming data
|
|
|
|
|
// "datasize" contains the number od bytes in the USB FIFO buffer
|
|
|
|
|
{
|
|
|
|
|
1b6: 0f 93 push r16
|
|
|
|
|
1b8: 1f 93 push r17
|
|
|
|
|
1ba: cf 93 push r28
|
|
|
|
|
1bc: df 93 push r29
|
|
|
|
|
1be: cd b7 in r28, 0x3d ; 61
|
|
|
|
|
1c0: de b7 in r29, 0x3e ; 62
|
|
|
|
|
1c2: c8 54 subi r28, 0x48 ; 72
|
|
|
|
|
1c4: d1 09 sbc r29, r1
|
|
|
|
|
1c6: 0f b6 in r0, 0x3f ; 63
|
|
|
|
|
1c8: f8 94 cli
|
|
|
|
|
1ca: de bf out 0x3e, r29 ; 62
|
|
|
|
|
1cc: 0f be out 0x3f, r0 ; 63
|
|
|
|
|
1ce: cd bf out 0x3d, r28 ; 61
|
|
|
|
|
char r[32]; // use endpoint buffer size (= maximum length of one transfered string)
|
|
|
|
|
char t[32];
|
|
|
|
|
char s[8];
|
|
|
|
|
uint8_t n;
|
|
|
|
|
|
|
|
|
|
if (endpoint==CDC_RX_ENDPOINT) {
|
|
|
|
|
1d0: 83 30 cpi r24, 0x03 ; 3
|
|
|
|
|
1d2: 09 f0 breq .+2 ; 0x1d6 <usb_ep+0x20>
|
|
|
|
|
1d4: 4d c1 rjmp .+666 ; 0x470 <usb_ep+0x2ba>
|
|
|
|
|
// serial data received
|
|
|
|
|
n=usb_rxdata(endpoint,(unsigned char *)r,sizeof(r)); // read data into buffer
|
|
|
|
|
1d6: 40 e2 ldi r20, 0x20 ; 32
|
|
|
|
|
1d8: be 01 movw r22, r28
|
|
|
|
|
1da: 6f 5f subi r22, 0xFF ; 255
|
|
|
|
|
1dc: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
1de: 0e 94 9c 03 call 0x738 ; 0x738 <usb_rxdata>
|
|
|
|
|
// parse command and prepare response
|
|
|
|
|
t[0]=0; // clear response string buffer
|
|
|
|
|
1e2: 19 a2 std Y+33, r1 ; 0x21
|
|
|
|
|
switch (r[0]) { // 1st byte is command
|
|
|
|
|
1e4: 89 81 ldd r24, Y+1 ; 0x01
|
|
|
|
|
1e6: 88 36 cpi r24, 0x68 ; 104
|
|
|
|
|
1e8: 69 f0 breq .+26 ; 0x204 <usb_ep+0x4e>
|
|
|
|
|
1ea: 30 f4 brcc .+12 ; 0x1f8 <usb_ep+0x42>
|
|
|
|
|
1ec: 8f 33 cpi r24, 0x3F ; 63
|
|
|
|
|
1ee: 51 f0 breq .+20 ; 0x204 <usb_ep+0x4e>
|
|
|
|
|
1f0: 83 36 cpi r24, 0x63 ; 99
|
|
|
|
|
1f2: 09 f0 breq .+2 ; 0x1f6 <usb_ep+0x40>
|
|
|
|
|
1f4: 1b c1 rjmp .+566 ; 0x42c <usb_ep+0x276>
|
|
|
|
|
1f6: 1a c0 rjmp .+52 ; 0x22c <usb_ep+0x76>
|
|
|
|
|
1f8: 89 36 cpi r24, 0x69 ; 105
|
|
|
|
|
1fa: 71 f0 breq .+28 ; 0x218 <usb_ep+0x62>
|
|
|
|
|
1fc: 80 37 cpi r24, 0x70 ; 112
|
|
|
|
|
1fe: 09 f0 breq .+2 ; 0x202 <usb_ep+0x4c>
|
|
|
|
|
200: 15 c1 rjmp .+554 ; 0x42c <usb_ep+0x276>
|
|
|
|
|
202: 1e c0 rjmp .+60 ; 0x240 <usb_ep+0x8a>
|
|
|
|
|
case '?': // help command
|
|
|
|
|
case 'h':
|
|
|
|
|
strcpy(t,"Valid commands: ? h i c p");
|
|
|
|
|
204: 8a e1 ldi r24, 0x1A ; 26
|
|
|
|
|
206: e9 e7 ldi r30, 0x79 ; 121
|
|
|
|
|
208: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
20a: de 01 movw r26, r28
|
|
|
|
|
20c: 91 96 adiw r26, 0x21 ; 33
|
|
|
|
|
20e: 01 90 ld r0, Z+
|
|
|
|
|
210: 0d 92 st X+, r0
|
|
|
|
|
212: 8a 95 dec r24
|
|
|
|
|
214: e1 f7 brne .-8 ; 0x20e <usb_ep+0x58>
|
|
|
|
|
break;
|
|
|
|
|
216: 13 c1 rjmp .+550 ; 0x43e <usb_ep+0x288>
|
|
|
|
|
case 'i': // info command
|
|
|
|
|
strcpy(t,"UxDIL CDC Demo V1.0");
|
|
|
|
|
218: 84 e1 ldi r24, 0x14 ; 20
|
|
|
|
|
21a: e3 e9 ldi r30, 0x93 ; 147
|
|
|
|
|
21c: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
21e: de 01 movw r26, r28
|
|
|
|
|
220: 91 96 adiw r26, 0x21 ; 33
|
|
|
|
|
222: 01 90 ld r0, Z+
|
|
|
|
|
224: 0d 92 st X+, r0
|
|
|
|
|
226: 8a 95 dec r24
|
|
|
|
|
228: e1 f7 brne .-8 ; 0x222 <usb_ep+0x6c>
|
|
|
|
|
break;
|
|
|
|
|
22a: 09 c1 rjmp .+530 ; 0x43e <usb_ep+0x288>
|
|
|
|
|
case 'c': // copyright command
|
|
|
|
|
strcpy(t,"(c) 2011 Reusch Elektronik");
|
|
|
|
|
22c: 8b e1 ldi r24, 0x1B ; 27
|
|
|
|
|
22e: e7 ea ldi r30, 0xA7 ; 167
|
|
|
|
|
230: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
232: de 01 movw r26, r28
|
|
|
|
|
234: 91 96 adiw r26, 0x21 ; 33
|
|
|
|
|
236: 01 90 ld r0, Z+
|
|
|
|
|
238: 0d 92 st X+, r0
|
|
|
|
|
23a: 8a 95 dec r24
|
|
|
|
|
23c: e1 f7 brne .-8 ; 0x236 <usb_ep+0x80>
|
|
|
|
|
break;
|
|
|
|
|
23e: ff c0 rjmp .+510 ; 0x43e <usb_ep+0x288>
|
|
|
|
|
case 'p': // parameter settings command
|
|
|
|
|
strcpy(t,"ppp");
|
|
|
|
|
240: 8e 01 movw r16, r28
|
|
|
|
|
242: 0f 5d subi r16, 0xDF ; 223
|
|
|
|
|
244: 1f 4f sbci r17, 0xFF ; 255
|
|
|
|
|
246: 80 e7 ldi r24, 0x70 ; 112
|
|
|
|
|
248: 90 e7 ldi r25, 0x70 ; 112
|
|
|
|
|
24a: a0 e7 ldi r26, 0x70 ; 112
|
|
|
|
|
24c: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
24e: 89 a3 std Y+33, r24 ; 0x21
|
|
|
|
|
250: 9a a3 std Y+34, r25 ; 0x22
|
|
|
|
|
252: ab a3 std Y+35, r26 ; 0x23
|
|
|
|
|
254: bc a3 std Y+36, r27 ; 0x24
|
|
|
|
|
ltoa(cdc_linecoding.dwDTERate,t,10);
|
|
|
|
|
256: 60 91 f5 01 lds r22, 0x01F5
|
|
|
|
|
25a: 70 91 f6 01 lds r23, 0x01F6
|
|
|
|
|
25e: 80 91 f7 01 lds r24, 0x01F7
|
|
|
|
|
262: 90 91 f8 01 lds r25, 0x01F8
|
|
|
|
|
266: 2a e0 ldi r18, 0x0A ; 10
|
|
|
|
|
268: 30 e0 ldi r19, 0x00 ; 0
|
|
|
|
|
26a: a8 01 movw r20, r16
|
|
|
|
|
26c: 0e 94 5a 08 call 0x10b4 ; 0x10b4 <ltoa>
|
|
|
|
|
strcat(t,":");
|
|
|
|
|
270: f8 01 movw r30, r16
|
|
|
|
|
272: 01 90 ld r0, Z+
|
|
|
|
|
274: 00 20 and r0, r0
|
|
|
|
|
276: e9 f7 brne .-6 ; 0x272 <usb_ep+0xbc>
|
|
|
|
|
278: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
27a: 8a e3 ldi r24, 0x3A ; 58
|
|
|
|
|
27c: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
27e: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
280: 80 83 st Z, r24
|
|
|
|
|
itoa(cdc_linecoding.bDataBits,s,10);
|
|
|
|
|
282: 4a e0 ldi r20, 0x0A ; 10
|
|
|
|
|
284: 50 e0 ldi r21, 0x00 ; 0
|
|
|
|
|
286: be 01 movw r22, r28
|
|
|
|
|
288: 6f 5b subi r22, 0xBF ; 191
|
|
|
|
|
28a: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
28c: 80 91 fb 01 lds r24, 0x01FB
|
|
|
|
|
290: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
292: 0e 94 39 08 call 0x1072 ; 0x1072 <itoa>
|
|
|
|
|
strcat(t,s);
|
|
|
|
|
296: be 01 movw r22, r28
|
|
|
|
|
298: 6f 5b subi r22, 0xBF ; 191
|
|
|
|
|
29a: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
29c: c8 01 movw r24, r16
|
|
|
|
|
29e: 0e 94 2e 08 call 0x105c ; 0x105c <strcat>
|
|
|
|
|
switch (cdc_linecoding.bParityType) {
|
|
|
|
|
2a2: 80 91 fa 01 lds r24, 0x01FA
|
|
|
|
|
2a6: 82 30 cpi r24, 0x02 ; 2
|
|
|
|
|
2a8: 09 f1 breq .+66 ; 0x2ec <usb_ep+0x136>
|
|
|
|
|
2aa: 28 f4 brcc .+10 ; 0x2b6 <usb_ep+0x100>
|
|
|
|
|
2ac: 88 23 and r24, r24
|
|
|
|
|
2ae: 41 f0 breq .+16 ; 0x2c0 <usb_ep+0x10a>
|
|
|
|
|
2b0: 81 30 cpi r24, 0x01 ; 1
|
|
|
|
|
2b2: e9 f5 brne .+122 ; 0x32e <usb_ep+0x178>
|
|
|
|
|
2b4: 10 c0 rjmp .+32 ; 0x2d6 <usb_ep+0x120>
|
|
|
|
|
2b6: 83 30 cpi r24, 0x03 ; 3
|
|
|
|
|
2b8: 21 f1 breq .+72 ; 0x302 <usb_ep+0x14c>
|
|
|
|
|
2ba: 84 30 cpi r24, 0x04 ; 4
|
|
|
|
|
2bc: c1 f5 brne .+112 ; 0x32e <usb_ep+0x178>
|
|
|
|
|
2be: 2c c0 rjmp .+88 ; 0x318 <usb_ep+0x162>
|
|
|
|
|
case 0: strcat(t,"N");
|
|
|
|
|
2c0: fe 01 movw r30, r28
|
|
|
|
|
2c2: b1 96 adiw r30, 0x21 ; 33
|
|
|
|
|
2c4: 01 90 ld r0, Z+
|
|
|
|
|
2c6: 00 20 and r0, r0
|
|
|
|
|
2c8: e9 f7 brne .-6 ; 0x2c4 <usb_ep+0x10e>
|
|
|
|
|
2ca: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
2cc: 8e e4 ldi r24, 0x4E ; 78
|
|
|
|
|
2ce: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
2d0: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
2d2: 80 83 st Z, r24
|
|
|
|
|
break;
|
|
|
|
|
2d4: 36 c0 rjmp .+108 ; 0x342 <usb_ep+0x18c>
|
|
|
|
|
case 1: strcat(t,"O");
|
|
|
|
|
2d6: fe 01 movw r30, r28
|
|
|
|
|
2d8: b1 96 adiw r30, 0x21 ; 33
|
|
|
|
|
2da: 01 90 ld r0, Z+
|
|
|
|
|
2dc: 00 20 and r0, r0
|
|
|
|
|
2de: e9 f7 brne .-6 ; 0x2da <usb_ep+0x124>
|
|
|
|
|
2e0: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
2e2: 8f e4 ldi r24, 0x4F ; 79
|
|
|
|
|
2e4: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
2e6: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
2e8: 80 83 st Z, r24
|
|
|
|
|
break;
|
|
|
|
|
2ea: 2b c0 rjmp .+86 ; 0x342 <usb_ep+0x18c>
|
|
|
|
|
case 2: strcat(t,"E");
|
|
|
|
|
2ec: fe 01 movw r30, r28
|
|
|
|
|
2ee: b1 96 adiw r30, 0x21 ; 33
|
|
|
|
|
2f0: 01 90 ld r0, Z+
|
|
|
|
|
2f2: 00 20 and r0, r0
|
|
|
|
|
2f4: e9 f7 brne .-6 ; 0x2f0 <usb_ep+0x13a>
|
|
|
|
|
2f6: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
2f8: 85 e4 ldi r24, 0x45 ; 69
|
|
|
|
|
2fa: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
2fc: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
2fe: 80 83 st Z, r24
|
|
|
|
|
break;
|
|
|
|
|
300: 20 c0 rjmp .+64 ; 0x342 <usb_ep+0x18c>
|
|
|
|
|
case 3: strcat(t,"M");
|
|
|
|
|
302: fe 01 movw r30, r28
|
|
|
|
|
304: b1 96 adiw r30, 0x21 ; 33
|
|
|
|
|
306: 01 90 ld r0, Z+
|
|
|
|
|
308: 00 20 and r0, r0
|
|
|
|
|
30a: e9 f7 brne .-6 ; 0x306 <usb_ep+0x150>
|
|
|
|
|
30c: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
30e: 8d e4 ldi r24, 0x4D ; 77
|
|
|
|
|
310: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
312: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
314: 80 83 st Z, r24
|
|
|
|
|
break;
|
|
|
|
|
316: 15 c0 rjmp .+42 ; 0x342 <usb_ep+0x18c>
|
|
|
|
|
case 4: strcat(t,"S");
|
|
|
|
|
318: fe 01 movw r30, r28
|
|
|
|
|
31a: b1 96 adiw r30, 0x21 ; 33
|
|
|
|
|
31c: 01 90 ld r0, Z+
|
|
|
|
|
31e: 00 20 and r0, r0
|
|
|
|
|
320: e9 f7 brne .-6 ; 0x31c <usb_ep+0x166>
|
|
|
|
|
322: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
324: 83 e5 ldi r24, 0x53 ; 83
|
|
|
|
|
326: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
328: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
32a: 80 83 st Z, r24
|
|
|
|
|
break;
|
|
|
|
|
32c: 0a c0 rjmp .+20 ; 0x342 <usb_ep+0x18c>
|
|
|
|
|
default: strcat(t,"?");
|
|
|
|
|
32e: fe 01 movw r30, r28
|
|
|
|
|
330: b1 96 adiw r30, 0x21 ; 33
|
|
|
|
|
332: 01 90 ld r0, Z+
|
|
|
|
|
334: 00 20 and r0, r0
|
|
|
|
|
336: e9 f7 brne .-6 ; 0x332 <usb_ep+0x17c>
|
|
|
|
|
338: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
33a: 8f e3 ldi r24, 0x3F ; 63
|
|
|
|
|
33c: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
33e: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
340: 80 83 st Z, r24
|
|
|
|
|
};
|
|
|
|
|
switch (cdc_linecoding.bCharFormat) {
|
|
|
|
|
342: 80 91 f9 01 lds r24, 0x01F9
|
|
|
|
|
346: 81 30 cpi r24, 0x01 ; 1
|
|
|
|
|
348: 79 f0 breq .+30 ; 0x368 <usb_ep+0x1b2>
|
|
|
|
|
34a: 18 f0 brcs .+6 ; 0x352 <usb_ep+0x19c>
|
|
|
|
|
34c: 82 30 cpi r24, 0x02 ; 2
|
|
|
|
|
34e: 31 f5 brne .+76 ; 0x39c <usb_ep+0x1e6>
|
|
|
|
|
350: 1a c0 rjmp .+52 ; 0x386 <usb_ep+0x1d0>
|
|
|
|
|
case 0: strcat(t,"1");
|
|
|
|
|
352: fe 01 movw r30, r28
|
|
|
|
|
354: b1 96 adiw r30, 0x21 ; 33
|
|
|
|
|
356: 01 90 ld r0, Z+
|
|
|
|
|
358: 00 20 and r0, r0
|
|
|
|
|
35a: e9 f7 brne .-6 ; 0x356 <usb_ep+0x1a0>
|
|
|
|
|
35c: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
35e: 81 e3 ldi r24, 0x31 ; 49
|
|
|
|
|
360: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
362: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
364: 80 83 st Z, r24
|
|
|
|
|
break;
|
|
|
|
|
366: 24 c0 rjmp .+72 ; 0x3b0 <usb_ep+0x1fa>
|
|
|
|
|
case 1: strcat(t,"1.5");
|
|
|
|
|
368: fe 01 movw r30, r28
|
|
|
|
|
36a: b1 96 adiw r30, 0x21 ; 33
|
|
|
|
|
36c: 01 90 ld r0, Z+
|
|
|
|
|
36e: 00 20 and r0, r0
|
|
|
|
|
370: e9 f7 brne .-6 ; 0x36c <usb_ep+0x1b6>
|
|
|
|
|
372: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
374: 81 e3 ldi r24, 0x31 ; 49
|
|
|
|
|
376: 9e e2 ldi r25, 0x2E ; 46
|
|
|
|
|
378: a5 e3 ldi r26, 0x35 ; 53
|
|
|
|
|
37a: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
37c: 80 83 st Z, r24
|
|
|
|
|
37e: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
380: a2 83 std Z+2, r26 ; 0x02
|
|
|
|
|
382: b3 83 std Z+3, r27 ; 0x03
|
|
|
|
|
break;
|
|
|
|
|
384: 15 c0 rjmp .+42 ; 0x3b0 <usb_ep+0x1fa>
|
|
|
|
|
case 2: strcat(t,"2");
|
|
|
|
|
386: fe 01 movw r30, r28
|
|
|
|
|
388: b1 96 adiw r30, 0x21 ; 33
|
|
|
|
|
38a: 01 90 ld r0, Z+
|
|
|
|
|
38c: 00 20 and r0, r0
|
|
|
|
|
38e: e9 f7 brne .-6 ; 0x38a <usb_ep+0x1d4>
|
|
|
|
|
390: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
392: 82 e3 ldi r24, 0x32 ; 50
|
|
|
|
|
394: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
396: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
398: 80 83 st Z, r24
|
|
|
|
|
break;
|
|
|
|
|
39a: 0a c0 rjmp .+20 ; 0x3b0 <usb_ep+0x1fa>
|
|
|
|
|
default: strcat(t,"?");
|
|
|
|
|
39c: fe 01 movw r30, r28
|
|
|
|
|
39e: b1 96 adiw r30, 0x21 ; 33
|
|
|
|
|
3a0: 01 90 ld r0, Z+
|
|
|
|
|
3a2: 00 20 and r0, r0
|
|
|
|
|
3a4: e9 f7 brne .-6 ; 0x3a0 <usb_ep+0x1ea>
|
|
|
|
|
3a6: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
3a8: 8f e3 ldi r24, 0x3F ; 63
|
|
|
|
|
3aa: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
3ac: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
3ae: 80 83 st Z, r24
|
|
|
|
|
};
|
|
|
|
|
strcat(t," RTS=");
|
|
|
|
|
3b0: 8e 01 movw r16, r28
|
|
|
|
|
3b2: 0f 5d subi r16, 0xDF ; 223
|
|
|
|
|
3b4: 1f 4f sbci r17, 0xFF ; 255
|
|
|
|
|
3b6: d8 01 movw r26, r16
|
|
|
|
|
3b8: 0d 90 ld r0, X+
|
|
|
|
|
3ba: 00 20 and r0, r0
|
|
|
|
|
3bc: e9 f7 brne .-6 ; 0x3b8 <usb_ep+0x202>
|
|
|
|
|
3be: 11 97 sbiw r26, 0x01 ; 1
|
|
|
|
|
3c0: 86 e0 ldi r24, 0x06 ; 6
|
|
|
|
|
3c2: e2 ec ldi r30, 0xC2 ; 194
|
|
|
|
|
3c4: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
3c6: 01 90 ld r0, Z+
|
|
|
|
|
3c8: 0d 92 st X+, r0
|
|
|
|
|
3ca: 8a 95 dec r24
|
|
|
|
|
3cc: e1 f7 brne .-8 ; 0x3c6 <usb_ep+0x210>
|
|
|
|
|
itoa(cdc_rtsdtr>>1,s,10);
|
|
|
|
|
3ce: 80 91 f4 01 lds r24, 0x01F4
|
|
|
|
|
3d2: 4a e0 ldi r20, 0x0A ; 10
|
|
|
|
|
3d4: 50 e0 ldi r21, 0x00 ; 0
|
|
|
|
|
3d6: be 01 movw r22, r28
|
|
|
|
|
3d8: 6f 5b subi r22, 0xBF ; 191
|
|
|
|
|
3da: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
3dc: 86 95 lsr r24
|
|
|
|
|
3de: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
3e0: 0e 94 39 08 call 0x1072 ; 0x1072 <itoa>
|
|
|
|
|
strcat(t,s);
|
|
|
|
|
3e4: be 01 movw r22, r28
|
|
|
|
|
3e6: 6f 5b subi r22, 0xBF ; 191
|
|
|
|
|
3e8: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
3ea: c8 01 movw r24, r16
|
|
|
|
|
3ec: 0e 94 2e 08 call 0x105c ; 0x105c <strcat>
|
|
|
|
|
strcat(t," DTR=");
|
|
|
|
|
3f0: d8 01 movw r26, r16
|
|
|
|
|
3f2: 0d 90 ld r0, X+
|
|
|
|
|
3f4: 00 20 and r0, r0
|
|
|
|
|
3f6: e9 f7 brne .-6 ; 0x3f2 <usb_ep+0x23c>
|
|
|
|
|
3f8: 11 97 sbiw r26, 0x01 ; 1
|
|
|
|
|
3fa: 86 e0 ldi r24, 0x06 ; 6
|
|
|
|
|
3fc: e8 ec ldi r30, 0xC8 ; 200
|
|
|
|
|
3fe: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
400: 01 90 ld r0, Z+
|
|
|
|
|
402: 0d 92 st X+, r0
|
|
|
|
|
404: 8a 95 dec r24
|
|
|
|
|
406: e1 f7 brne .-8 ; 0x400 <usb_ep+0x24a>
|
|
|
|
|
itoa(cdc_rtsdtr&0x01,s,10);
|
|
|
|
|
408: 80 91 f4 01 lds r24, 0x01F4
|
|
|
|
|
40c: 4a e0 ldi r20, 0x0A ; 10
|
|
|
|
|
40e: 50 e0 ldi r21, 0x00 ; 0
|
|
|
|
|
410: be 01 movw r22, r28
|
|
|
|
|
412: 6f 5b subi r22, 0xBF ; 191
|
|
|
|
|
414: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
416: 81 70 andi r24, 0x01 ; 1
|
|
|
|
|
418: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
41a: 0e 94 39 08 call 0x1072 ; 0x1072 <itoa>
|
|
|
|
|
strcat(t,s);
|
|
|
|
|
41e: be 01 movw r22, r28
|
|
|
|
|
420: 6f 5b subi r22, 0xBF ; 191
|
|
|
|
|
422: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
424: c8 01 movw r24, r16
|
|
|
|
|
426: 0e 94 2e 08 call 0x105c ; 0x105c <strcat>
|
|
|
|
|
break;
|
|
|
|
|
42a: 09 c0 rjmp .+18 ; 0x43e <usb_ep+0x288>
|
|
|
|
|
default: strcpy(t,"invalid command");
|
|
|
|
|
42c: 80 e1 ldi r24, 0x10 ; 16
|
|
|
|
|
42e: ee ec ldi r30, 0xCE ; 206
|
|
|
|
|
430: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
432: de 01 movw r26, r28
|
|
|
|
|
434: 91 96 adiw r26, 0x21 ; 33
|
|
|
|
|
436: 01 90 ld r0, Z+
|
|
|
|
|
438: 0d 92 st X+, r0
|
|
|
|
|
43a: 8a 95 dec r24
|
|
|
|
|
43c: e1 f7 brne .-8 ; 0x436 <usb_ep+0x280>
|
|
|
|
|
}
|
|
|
|
|
strcat(t,"\r\n");
|
|
|
|
|
43e: be 01 movw r22, r28
|
|
|
|
|
440: 6f 5d subi r22, 0xDF ; 223
|
|
|
|
|
442: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
444: fb 01 movw r30, r22
|
|
|
|
|
446: 01 90 ld r0, Z+
|
|
|
|
|
448: 00 20 and r0, r0
|
|
|
|
|
44a: e9 f7 brne .-6 ; 0x446 <usb_ep+0x290>
|
|
|
|
|
44c: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
44e: 8d e0 ldi r24, 0x0D ; 13
|
|
|
|
|
450: 9a e0 ldi r25, 0x0A ; 10
|
|
|
|
|
452: a0 e0 ldi r26, 0x00 ; 0
|
|
|
|
|
454: 80 83 st Z, r24
|
|
|
|
|
456: 91 83 std Z+1, r25 ; 0x01
|
|
|
|
|
458: a2 83 std Z+2, r26 ; 0x02
|
|
|
|
|
// response
|
|
|
|
|
usb_txdata(CDC_TX_ENDPOINT,(unsigned char *)t,strlen(t)); // return answer to host
|
|
|
|
|
45a: fb 01 movw r30, r22
|
|
|
|
|
45c: 01 90 ld r0, Z+
|
|
|
|
|
45e: 00 20 and r0, r0
|
|
|
|
|
460: e9 f7 brne .-6 ; 0x45c <usb_ep+0x2a6>
|
|
|
|
|
462: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
464: af 01 movw r20, r30
|
|
|
|
|
466: 46 1b sub r20, r22
|
|
|
|
|
468: 57 0b sbc r21, r23
|
|
|
|
|
46a: 84 e0 ldi r24, 0x04 ; 4
|
|
|
|
|
46c: 0e 94 b2 03 call 0x764 ; 0x764 <usb_txdata>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
470: c8 5b subi r28, 0xB8 ; 184
|
|
|
|
|
472: df 4f sbci r29, 0xFF ; 255
|
|
|
|
|
474: 0f b6 in r0, 0x3f ; 63
|
|
|
|
|
476: f8 94 cli
|
|
|
|
|
478: de bf out 0x3e, r29 ; 62
|
|
|
|
|
47a: 0f be out 0x3f, r0 ; 63
|
|
|
|
|
47c: cd bf out 0x3d, r28 ; 61
|
|
|
|
|
47e: df 91 pop r29
|
|
|
|
|
480: cf 91 pop r28
|
|
|
|
|
482: 1f 91 pop r17
|
|
|
|
|
484: 0f 91 pop r16
|
|
|
|
|
486: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00000488 <main>:
|
|
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
|
{
|
|
|
|
|
488: cf 93 push r28
|
|
|
|
|
48a: df 93 push r29
|
|
|
|
|
48c: cd b7 in r28, 0x3d ; 61
|
|
|
|
|
48e: de b7 in r29, 0x3e ; 62
|
|
|
|
|
490: a0 97 sbiw r28, 0x20 ; 32
|
|
|
|
|
492: 0f b6 in r0, 0x3f ; 63
|
|
|
|
|
494: f8 94 cli
|
|
|
|
|
496: de bf out 0x3e, r29 ; 62
|
|
|
|
|
498: 0f be out 0x3f, r0 ; 63
|
|
|
|
|
49a: cd bf out 0x3d, r28 ; 61
|
|
|
|
|
init();
|
|
|
|
|
49c: 0e 94 ba 00 call 0x174 ; 0x174 <init>
|
|
|
|
|
ledg(GREEN);
|
|
|
|
|
4a0: 82 e0 ldi r24, 0x02 ; 2
|
|
|
|
|
4a2: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
4a4: 0e 94 88 00 call 0x110 ; 0x110 <ledg>
|
|
|
|
|
char t[32];
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
4a8: 91 2c mov r9, r1
|
|
|
|
|
while(1)
|
2013-09-30 18:09:58 +02:00
|
|
|
|
{
|
2013-10-06 18:10:06 +02:00
|
|
|
|
ledg(YELLOW);
|
|
|
|
|
fprintf(&rs232, "test %d\n",++i);
|
|
|
|
|
4aa: 0f 2e mov r0, r31
|
|
|
|
|
4ac: fe ed ldi r31, 0xDE ; 222
|
|
|
|
|
4ae: af 2e mov r10, r31
|
|
|
|
|
4b0: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
4b2: bf 2e mov r11, r31
|
|
|
|
|
4b4: f0 2d mov r31, r0
|
|
|
|
|
4b6: 0f 2e mov r0, r31
|
|
|
|
|
4b8: fe e0 ldi r31, 0x0E ; 14
|
|
|
|
|
4ba: cf 2e mov r12, r31
|
|
|
|
|
4bc: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
4be: df 2e mov r13, r31
|
|
|
|
|
4c0: f0 2d mov r31, r0
|
|
|
|
|
t[0]=0; // clear response string buffer
|
|
|
|
|
sprintf(t, "test %d\r\n",i);
|
|
|
|
|
4c2: 0f 2e mov r0, r31
|
|
|
|
|
4c4: f7 ee ldi r31, 0xE7 ; 231
|
|
|
|
|
4c6: ef 2e mov r14, r31
|
|
|
|
|
4c8: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
4ca: ff 2e mov r15, r31
|
|
|
|
|
4cc: f0 2d mov r31, r0
|
|
|
|
|
4ce: 8e 01 movw r16, r28
|
|
|
|
|
4d0: 0f 5f subi r16, 0xFF ; 255
|
|
|
|
|
4d2: 1f 4f sbci r17, 0xFF ; 255
|
|
|
|
|
ledg(GREEN);
|
|
|
|
|
char t[32];
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
ledg(YELLOW);
|
|
|
|
|
4d4: 86 e0 ldi r24, 0x06 ; 6
|
|
|
|
|
4d6: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
4d8: 0e 94 88 00 call 0x110 ; 0x110 <ledg>
|
|
|
|
|
fprintf(&rs232, "test %d\n",++i);
|
|
|
|
|
4dc: 93 94 inc r9
|
|
|
|
|
4de: 1f 92 push r1
|
|
|
|
|
4e0: 9f 92 push r9
|
|
|
|
|
4e2: bf 92 push r11
|
|
|
|
|
4e4: af 92 push r10
|
|
|
|
|
4e6: df 92 push r13
|
|
|
|
|
4e8: cf 92 push r12
|
|
|
|
|
4ea: 0e 94 8e 08 call 0x111c ; 0x111c <fprintf>
|
|
|
|
|
t[0]=0; // clear response string buffer
|
|
|
|
|
4ee: 19 82 std Y+1, r1 ; 0x01
|
|
|
|
|
sprintf(t, "test %d\r\n",i);
|
|
|
|
|
4f0: 1f 92 push r1
|
|
|
|
|
4f2: 9f 92 push r9
|
|
|
|
|
4f4: ff 92 push r15
|
|
|
|
|
4f6: ef 92 push r14
|
|
|
|
|
4f8: 1f 93 push r17
|
|
|
|
|
4fa: 0f 93 push r16
|
|
|
|
|
4fc: 0e 94 d1 08 call 0x11a2 ; 0x11a2 <sprintf>
|
|
|
|
|
usb_txdata(CDC_TX_ENDPOINT,(unsigned char *)t,strlen(t));
|
|
|
|
|
500: f8 01 movw r30, r16
|
|
|
|
|
502: 01 90 ld r0, Z+
|
|
|
|
|
504: 00 20 and r0, r0
|
|
|
|
|
506: e9 f7 brne .-6 ; 0x502 <__stack+0x3>
|
|
|
|
|
508: 31 97 sbiw r30, 0x01 ; 1
|
|
|
|
|
50a: af 01 movw r20, r30
|
|
|
|
|
50c: 40 1b sub r20, r16
|
|
|
|
|
50e: 51 0b sbc r21, r17
|
|
|
|
|
510: b8 01 movw r22, r16
|
|
|
|
|
512: 84 e0 ldi r24, 0x04 ; 4
|
|
|
|
|
514: 0e 94 b2 03 call 0x764 ; 0x764 <usb_txdata>
|
|
|
|
|
ledg(GREEN);
|
|
|
|
|
518: 82 e0 ldi r24, 0x02 ; 2
|
|
|
|
|
51a: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
51c: 0e 94 88 00 call 0x110 ; 0x110 <ledg>
|
|
|
|
|
#else
|
|
|
|
|
//round up by default
|
|
|
|
|
__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
__builtin_avr_delay_cycles(__ticks_dc);
|
|
|
|
|
520: 2f ef ldi r18, 0xFF ; 255
|
|
|
|
|
522: 81 ee ldi r24, 0xE1 ; 225
|
|
|
|
|
524: 94 e0 ldi r25, 0x04 ; 4
|
|
|
|
|
526: 21 50 subi r18, 0x01 ; 1
|
|
|
|
|
528: 80 40 sbci r24, 0x00 ; 0
|
|
|
|
|
52a: 90 40 sbci r25, 0x00 ; 0
|
|
|
|
|
52c: e1 f7 brne .-8 ; 0x526 <__stack+0x27>
|
|
|
|
|
52e: 00 c0 rjmp .+0 ; 0x530 <__stack+0x31>
|
|
|
|
|
530: 00 00 nop
|
|
|
|
|
532: 0f b6 in r0, 0x3f ; 63
|
|
|
|
|
534: f8 94 cli
|
|
|
|
|
536: de bf out 0x3e, r29 ; 62
|
|
|
|
|
538: 0f be out 0x3f, r0 ; 63
|
|
|
|
|
53a: cd bf out 0x3d, r28 ; 61
|
|
|
|
|
53c: cb cf rjmp .-106 ; 0x4d4 <main+0x4c>
|
|
|
|
|
|
|
|
|
|
0000053e <usb_init>:
|
|
|
|
|
UHWCON = _BV(UVREGE); // enable PAD regulator
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef MEGA6
|
|
|
|
|
UHWCON = _BV(UIMOD)|_BV(UVREGE); // set device mode, enable PAD regulator
|
|
|
|
|
#endif
|
|
|
|
|
USBCON = _BV(USBE) | _BV(FRZCLK); // enable USB
|
|
|
|
|
53e: 80 ea ldi r24, 0xA0 ; 160
|
|
|
|
|
540: 80 93 d8 00 sts 0x00D8, r24
|
|
|
|
|
#if (F_CPU==16000000)
|
|
|
|
|
// 16MHz
|
|
|
|
|
#ifdef MEGA2
|
|
|
|
|
PLLCSR = _BV(PLLE) | _BV(PLLP0); // config PLL, 16 MHz xtal
|
|
|
|
|
544: 86 e0 ldi r24, 0x06 ; 6
|
|
|
|
|
546: 89 bd out 0x29, r24 ; 41
|
|
|
|
|
PLLCSR = _BV(PLLE); // config PLL, 8 MHz xtal
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
while (!(PLLCSR & _BV(PLOCK))) ; // wait for PLL lock
|
|
|
|
|
548: 09 b4 in r0, 0x29 ; 41
|
|
|
|
|
54a: 00 fe sbrs r0, 0
|
|
|
|
|
54c: fd cf rjmp .-6 ; 0x548 <usb_init+0xa>
|
|
|
|
|
#ifdef MEGA4_6
|
|
|
|
|
USBCON = _BV(USBE)|_BV(OTGPADE); // start USB clock
|
|
|
|
|
#else
|
|
|
|
|
USBCON = _BV(USBE); // start USB clock
|
|
|
|
|
54e: 80 e8 ldi r24, 0x80 ; 128
|
|
|
|
|
550: 80 93 d8 00 sts 0x00D8, r24
|
|
|
|
|
#endif
|
|
|
|
|
UDCON = 0; // enable attach resistor
|
|
|
|
|
554: 10 92 e0 00 sts 0x00E0, r1
|
|
|
|
|
usb_conf = 0;
|
|
|
|
|
558: 10 92 f2 01 sts 0x01F2, r1
|
|
|
|
|
#if (NUMINTERFACES>1)
|
|
|
|
|
usb_if = 0xFF;
|
|
|
|
|
55c: 8f ef ldi r24, 0xFF ; 255
|
|
|
|
|
55e: 80 93 25 01 sts 0x0125, r24
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef MEGA2
|
|
|
|
|
// port for VBUS detection
|
|
|
|
|
VBUSDIR &= ~_BV(VBUSPIN); // port as input
|
|
|
|
|
562: 3c 98 cbi 0x07, 4 ; 7
|
|
|
|
|
#endif
|
|
|
|
|
UDIEN = _BV(EORSTE); // enable "end of reset" interrupt
|
|
|
|
|
564: 88 e0 ldi r24, 0x08 ; 8
|
|
|
|
|
566: 80 93 e2 00 sts 0x00E2, r24
|
|
|
|
|
56a: 08 95 ret
|
|
|
|
|
|
|
|
|
|
0000056c <usb_endpoints>:
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
#ifdef STATICENDPOINTS // physical endpoint configuration for all interfaces, may differ from descriptor defintions
|
|
|
|
|
|
|
|
|
|
void usb_endpoints(void)
|
|
|
|
|
{
|
|
|
|
|
56c: 2f 92 push r2
|
|
|
|
|
56e: 3f 92 push r3
|
|
|
|
|
570: 4f 92 push r4
|
|
|
|
|
572: 5f 92 push r5
|
|
|
|
|
574: 7f 92 push r7
|
|
|
|
|
576: 8f 92 push r8
|
|
|
|
|
578: 9f 92 push r9
|
|
|
|
|
57a: af 92 push r10
|
|
|
|
|
57c: cf 92 push r12
|
|
|
|
|
57e: df 92 push r13
|
|
|
|
|
580: ef 92 push r14
|
|
|
|
|
582: ff 92 push r15
|
|
|
|
|
584: 0f 93 push r16
|
|
|
|
|
586: 1f 93 push r17
|
|
|
|
|
588: cf 93 push r28
|
|
|
|
|
58a: df 93 push r29
|
|
|
|
|
58c: ec e2 ldi r30, 0x2C ; 44
|
|
|
|
|
58e: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
590: 8e e2 ldi r24, 0x2E ; 46
|
|
|
|
|
592: 91 e0 ldi r25, 0x01 ; 1
|
|
|
|
|
594: 41 e0 ldi r20, 0x01 ; 1
|
|
|
|
|
|
|
|
|
|
uint8_t i;
|
|
|
|
|
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) {
|
|
|
|
|
if (EPC.ep_type!=EP_TYPE_DISABLED) {
|
|
|
|
|
UENUM = i+1; // select endpoint
|
|
|
|
|
596: 0f 2e mov r0, r31
|
|
|
|
|
598: f9 ee ldi r31, 0xE9 ; 233
|
|
|
|
|
59a: cf 2e mov r12, r31
|
|
|
|
|
59c: d1 2c mov r13, r1
|
|
|
|
|
59e: f0 2d mov r31, r0
|
|
|
|
|
UECONX = _BV(EPEN); // enable endpoint
|
|
|
|
|
5a0: 0f 2e mov r0, r31
|
|
|
|
|
5a2: fb ee ldi r31, 0xEB ; 235
|
|
|
|
|
5a4: ef 2e mov r14, r31
|
|
|
|
|
5a6: f1 2c mov r15, r1
|
|
|
|
|
5a8: f0 2d mov r31, r0
|
|
|
|
|
5aa: aa 24 eor r10, r10
|
|
|
|
|
5ac: a3 94 inc r10
|
|
|
|
|
UECFG0X = EPC.ep_type; // transfer type and direction
|
|
|
|
|
5ae: 0c ee ldi r16, 0xEC ; 236
|
|
|
|
|
5b0: 10 e0 ldi r17, 0x00 ; 0
|
|
|
|
|
UECFG1X = EP_SIZE(EPC.ep_size)|
|
|
|
|
|
5b2: 6d ee ldi r22, 0xED ; 237
|
|
|
|
|
5b4: 70 e0 ldi r23, 0x00 ; 0
|
|
|
|
|
(EPC.ep_buffer); // buffer size and bank
|
|
|
|
|
if (IN_TRANSFER) UEIENX = 0; // no interrupts handling for IN endpoints
|
|
|
|
|
else UEIENX = _BV(RXOUTE); // interrupt handling for incoming data (OUT endpoint)
|
|
|
|
|
5b6: 0f 2e mov r0, r31
|
|
|
|
|
5b8: f0 ef ldi r31, 0xF0 ; 240
|
|
|
|
|
5ba: 4f 2e mov r4, r31
|
|
|
|
|
5bc: 51 2c mov r5, r1
|
|
|
|
|
5be: f0 2d mov r31, r0
|
|
|
|
|
5c0: 68 94 set
|
|
|
|
|
5c2: 99 24 eor r9, r9
|
|
|
|
|
5c4: 92 f8 bld r9, 2
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) {
|
|
|
|
|
if (EPC.ep_type!=EP_TYPE_DISABLED) {
|
|
|
|
|
UENUM = i+1; // select endpoint
|
|
|
|
|
UECONX = _BV(EPEN); // enable endpoint
|
|
|
|
|
UECFG0X = EPC.ep_type; // transfer type and direction
|
|
|
|
|
UECFG1X = EP_SIZE(EPC.ep_size)|
|
|
|
|
|
5c6: 81 2c mov r8, r1
|
|
|
|
|
5c8: 68 94 set
|
|
|
|
|
5ca: 77 24 eor r7, r7
|
|
|
|
|
5cc: 74 f8 bld r7, 4
|
|
|
|
|
// Initializing Endpoints
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
#ifdef STATICENDPOINTS // physical endpoint configuration for all interfaces, may differ from descriptor defintions
|
|
|
|
|
|
|
|
|
|
void usb_endpoints(void)
|
|
|
|
|
5ce: df 01 movw r26, r30
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
uint8_t i;
|
|
|
|
|
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) {
|
|
|
|
|
if (EPC.ep_type!=EP_TYPE_DISABLED) {
|
|
|
|
|
5d0: 20 81 ld r18, Z
|
|
|
|
|
5d2: 2f 3f cpi r18, 0xFF ; 255
|
|
|
|
|
5d4: 59 f1 breq .+86 ; 0x62c <usb_endpoints+0xc0>
|
|
|
|
|
UENUM = i+1; // select endpoint
|
|
|
|
|
5d6: e6 01 movw r28, r12
|
|
|
|
|
5d8: 48 83 st Y, r20
|
|
|
|
|
UECONX = _BV(EPEN); // enable endpoint
|
|
|
|
|
5da: e7 01 movw r28, r14
|
|
|
|
|
5dc: a8 82 st Y, r10
|
|
|
|
|
UECFG0X = EPC.ep_type; // transfer type and direction
|
|
|
|
|
5de: 20 81 ld r18, Z
|
|
|
|
|
5e0: e8 01 movw r28, r16
|
|
|
|
|
5e2: 28 83 st Y, r18
|
|
|
|
|
// Initializing Endpoints
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
#ifdef STATICENDPOINTS // physical endpoint configuration for all interfaces, may differ from descriptor defintions
|
|
|
|
|
|
|
|
|
|
void usb_endpoints(void)
|
|
|
|
|
5e4: 1c 01 movw r2, r24
|
|
|
|
|
5e6: 9c 01 movw r18, r24
|
|
|
|
|
5e8: 21 50 subi r18, 0x01 ; 1
|
|
|
|
|
5ea: 31 09 sbc r19, r1
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) {
|
|
|
|
|
if (EPC.ep_type!=EP_TYPE_DISABLED) {
|
|
|
|
|
UENUM = i+1; // select endpoint
|
|
|
|
|
UECONX = _BV(EPEN); // enable endpoint
|
|
|
|
|
UECFG0X = EPC.ep_type; // transfer type and direction
|
|
|
|
|
UECFG1X = EP_SIZE(EPC.ep_size)|
|
|
|
|
|
5ec: e9 01 movw r28, r18
|
|
|
|
|
5ee: 28 81 ld r18, Y
|
|
|
|
|
5f0: 20 38 cpi r18, 0x80 ; 128
|
|
|
|
|
5f2: 41 f0 breq .+16 ; 0x604 <usb_endpoints+0x98>
|
|
|
|
|
5f4: 20 34 cpi r18, 0x40 ; 64
|
|
|
|
|
5f6: 41 f0 breq .+16 ; 0x608 <usb_endpoints+0x9c>
|
|
|
|
|
5f8: 20 32 cpi r18, 0x20 ; 32
|
|
|
|
|
5fa: 41 f0 breq .+16 ; 0x60c <usb_endpoints+0xa0>
|
|
|
|
|
5fc: 20 31 cpi r18, 0x10 ; 16
|
|
|
|
|
5fe: 41 f4 brne .+16 ; 0x610 <usb_endpoints+0xa4>
|
|
|
|
|
600: 37 2d mov r19, r7
|
|
|
|
|
602: 07 c0 rjmp .+14 ; 0x612 <usb_endpoints+0xa6>
|
|
|
|
|
604: 30 e4 ldi r19, 0x40 ; 64
|
|
|
|
|
606: 05 c0 rjmp .+10 ; 0x612 <usb_endpoints+0xa6>
|
|
|
|
|
608: 30 e3 ldi r19, 0x30 ; 48
|
|
|
|
|
60a: 03 c0 rjmp .+6 ; 0x612 <usb_endpoints+0xa6>
|
|
|
|
|
60c: 30 e2 ldi r19, 0x20 ; 32
|
|
|
|
|
60e: 01 c0 rjmp .+2 ; 0x612 <usb_endpoints+0xa6>
|
|
|
|
|
610: 38 2d mov r19, r8
|
|
|
|
|
612: e1 01 movw r28, r2
|
|
|
|
|
614: 28 81 ld r18, Y
|
|
|
|
|
616: 23 2b or r18, r19
|
|
|
|
|
618: eb 01 movw r28, r22
|
|
|
|
|
61a: 28 83 st Y, r18
|
|
|
|
|
(EPC.ep_buffer); // buffer size and bank
|
|
|
|
|
if (IN_TRANSFER) UEIENX = 0; // no interrupts handling for IN endpoints
|
|
|
|
|
61c: 2c 91 ld r18, X
|
|
|
|
|
61e: 20 ff sbrs r18, 0
|
|
|
|
|
620: 03 c0 rjmp .+6 ; 0x628 <usb_endpoints+0xbc>
|
|
|
|
|
622: d2 01 movw r26, r4
|
|
|
|
|
624: 1c 92 st X, r1
|
|
|
|
|
626: 02 c0 rjmp .+4 ; 0x62c <usb_endpoints+0xc0>
|
|
|
|
|
else UEIENX = _BV(RXOUTE); // interrupt handling for incoming data (OUT endpoint)
|
|
|
|
|
628: e2 01 movw r28, r4
|
|
|
|
|
62a: 98 82 st Y, r9
|
|
|
|
|
62c: 4f 5f subi r20, 0xFF ; 255
|
|
|
|
|
62e: 34 96 adiw r30, 0x04 ; 4
|
|
|
|
|
630: 04 96 adiw r24, 0x04 ; 4
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
uint8_t i;
|
|
|
|
|
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) {
|
|
|
|
|
632: 45 30 cpi r20, 0x05 ; 5
|
|
|
|
|
634: 61 f6 brne .-104 ; 0x5ce <usb_endpoints+0x62>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#ifdef MEGA4_6
|
|
|
|
|
UERST = 0x7E; // endpoint FIFO reset for endpoint 1, 2, 3, 4, 5 and 6
|
|
|
|
|
#else
|
|
|
|
|
UERST = 0x1E; // endpoint FIFO reset for endpoint 1, 2, 3 and 4
|
|
|
|
|
636: ea ee ldi r30, 0xEA ; 234
|
|
|
|
|
638: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
63a: 8e e1 ldi r24, 0x1E ; 30
|
|
|
|
|
63c: 80 83 st Z, r24
|
|
|
|
|
#endif
|
|
|
|
|
UERST = 0;
|
|
|
|
|
63e: 10 82 st Z, r1
|
|
|
|
|
}
|
|
|
|
|
640: df 91 pop r29
|
|
|
|
|
642: cf 91 pop r28
|
|
|
|
|
644: 1f 91 pop r17
|
|
|
|
|
646: 0f 91 pop r16
|
|
|
|
|
648: ff 90 pop r15
|
|
|
|
|
64a: ef 90 pop r14
|
|
|
|
|
64c: df 90 pop r13
|
|
|
|
|
64e: cf 90 pop r12
|
|
|
|
|
650: af 90 pop r10
|
|
|
|
|
652: 9f 90 pop r9
|
|
|
|
|
654: 8f 90 pop r8
|
|
|
|
|
656: 7f 90 pop r7
|
|
|
|
|
658: 5f 90 pop r5
|
|
|
|
|
65a: 4f 90 pop r4
|
|
|
|
|
65c: 3f 90 pop r3
|
|
|
|
|
65e: 2f 90 pop r2
|
|
|
|
|
660: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00000662 <usb_wait_in>:
|
|
|
|
|
void usb_wait_in(void)
|
|
|
|
|
// wait for host, until it's ready to receive IN package
|
|
|
|
|
{
|
|
|
|
|
uint8_t i;
|
|
|
|
|
do {
|
|
|
|
|
i = UEINTX;
|
|
|
|
|
662: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
664: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
666: 80 81 ld r24, Z
|
|
|
|
|
} while (!(i & (_BV(TXINI)|_BV(RXOUTI))));
|
|
|
|
|
668: 85 70 andi r24, 0x05 ; 5
|
|
|
|
|
66a: e9 f3 breq .-6 ; 0x666 <usb_wait_in+0x4>
|
|
|
|
|
}
|
|
|
|
|
66c: 08 95 ret
|
|
|
|
|
|
|
|
|
|
0000066e <usb_wait_receive_out>:
|
|
|
|
|
|
|
|
|
|
void usb_wait_receive_out(void)
|
|
|
|
|
{
|
|
|
|
|
while (!(UEINTX & _BV(RXOUTI))) ;
|
|
|
|
|
66e: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
670: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
672: 80 81 ld r24, Z
|
|
|
|
|
674: 82 ff sbrs r24, 2
|
|
|
|
|
676: fd cf rjmp .-6 ; 0x672 <usb_wait_receive_out+0x4>
|
|
|
|
|
}
|
|
|
|
|
678: 08 95 ret
|
|
|
|
|
|
|
|
|
|
0000067a <usb_desc_out>:
|
|
|
|
|
|
|
|
|
|
void usb_desc_out(bool isRAM, const uint8_t *pgmaddr, uint8_t size, uint16_t maxsize)
|
|
|
|
|
// return descriptor over endpoint 0 to host from flash memory or RAM
|
|
|
|
|
{
|
|
|
|
|
67a: 8f 92 push r8
|
|
|
|
|
67c: 9f 92 push r9
|
|
|
|
|
67e: af 92 push r10
|
|
|
|
|
680: bf 92 push r11
|
|
|
|
|
682: cf 92 push r12
|
|
|
|
|
684: df 92 push r13
|
|
|
|
|
686: ef 92 push r14
|
|
|
|
|
688: ff 92 push r15
|
|
|
|
|
68a: 0f 93 push r16
|
|
|
|
|
68c: 1f 93 push r17
|
|
|
|
|
68e: cf 93 push r28
|
|
|
|
|
690: df 93 push r29
|
|
|
|
|
692: d8 2e mov r13, r24
|
|
|
|
|
uint8_t i, len, n;
|
|
|
|
|
const uint8_t *addr;
|
|
|
|
|
|
|
|
|
|
addr=pgmaddr;
|
|
|
|
|
len=size;
|
|
|
|
|
if (len>maxsize) len=maxsize;
|
|
|
|
|
694: e4 2f mov r30, r20
|
|
|
|
|
696: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
698: 2e 17 cp r18, r30
|
|
|
|
|
69a: 3f 07 cpc r19, r31
|
|
|
|
|
69c: 10 f4 brcc .+4 ; 0x6a2 <usb_desc_out+0x28>
|
|
|
|
|
69e: c2 2e mov r12, r18
|
|
|
|
|
6a0: 01 c0 rjmp .+2 ; 0x6a4 <usb_desc_out+0x2a>
|
|
|
|
|
{
|
|
|
|
|
uint8_t i, len, n;
|
|
|
|
|
const uint8_t *addr;
|
|
|
|
|
|
|
|
|
|
addr=pgmaddr;
|
|
|
|
|
len=size;
|
|
|
|
|
6a2: c4 2e mov r12, r20
|
|
|
|
|
6a4: 06 2f mov r16, r22
|
|
|
|
|
6a6: 17 2f mov r17, r23
|
|
|
|
|
if (len>maxsize) len=maxsize;
|
|
|
|
|
do {
|
|
|
|
|
usb_wait_in();
|
|
|
|
|
if (i & _BV(RXOUTI)) return; // cancel
|
|
|
|
|
// send IN package
|
|
|
|
|
n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE;
|
|
|
|
|
6a8: 68 94 set
|
|
|
|
|
6aa: 99 24 eor r9, r9
|
|
|
|
|
6ac: 94 f8 bld r9, 4
|
|
|
|
|
for (i = n; i; i--)
|
|
|
|
|
UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++);
|
|
|
|
|
len -= n;
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
6ae: 0f 2e mov r0, r31
|
|
|
|
|
6b0: f8 ee ldi r31, 0xE8 ; 232
|
|
|
|
|
6b2: ef 2e mov r14, r31
|
|
|
|
|
6b4: f1 2c mov r15, r1
|
|
|
|
|
6b6: f0 2d mov r31, r0
|
|
|
|
|
6b8: 0f 2e mov r0, r31
|
|
|
|
|
6ba: fe ef ldi r31, 0xFE ; 254
|
|
|
|
|
6bc: bf 2e mov r11, r31
|
|
|
|
|
6be: f0 2d mov r31, r0
|
|
|
|
|
usb_wait_in();
|
|
|
|
|
if (i & _BV(RXOUTI)) return; // cancel
|
|
|
|
|
// send IN package
|
|
|
|
|
n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE;
|
|
|
|
|
for (i = n; i; i--)
|
|
|
|
|
UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++);
|
|
|
|
|
6c0: c1 ef ldi r28, 0xF1 ; 241
|
|
|
|
|
6c2: d0 e0 ldi r29, 0x00 ; 0
|
|
|
|
|
6c4: a1 2c mov r10, r1
|
|
|
|
|
6c6: 01 c0 rjmp .+2 ; 0x6ca <usb_desc_out+0x50>
|
|
|
|
|
6c8: 8a 2c mov r8, r10
|
|
|
|
|
|
|
|
|
|
addr=pgmaddr;
|
|
|
|
|
len=size;
|
|
|
|
|
if (len>maxsize) len=maxsize;
|
|
|
|
|
do {
|
|
|
|
|
usb_wait_in();
|
|
|
|
|
6ca: 0e 94 31 03 call 0x662 ; 0x662 <usb_wait_in>
|
|
|
|
|
if (i & _BV(RXOUTI)) return; // cancel
|
|
|
|
|
6ce: 82 fc sbrc r8, 2
|
|
|
|
|
6d0: 26 c0 rjmp .+76 ; 0x71e <usb_desc_out+0xa4>
|
|
|
|
|
// send IN package
|
|
|
|
|
n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE;
|
|
|
|
|
6d2: 2c 2d mov r18, r12
|
|
|
|
|
6d4: 80 e1 ldi r24, 0x10 ; 16
|
|
|
|
|
6d6: 8c 15 cp r24, r12
|
|
|
|
|
6d8: 08 f4 brcc .+2 ; 0x6dc <usb_desc_out+0x62>
|
|
|
|
|
6da: 29 2d mov r18, r9
|
|
|
|
|
for (i = n; i; i--)
|
|
|
|
|
6dc: 22 23 and r18, r18
|
|
|
|
|
6de: d9 f0 breq .+54 ; 0x716 <usb_desc_out+0x9c>
|
|
|
|
|
6e0: f8 01 movw r30, r16
|
|
|
|
|
6e2: 92 2f mov r25, r18
|
|
|
|
|
UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++);
|
|
|
|
|
6e4: dd 20 and r13, r13
|
|
|
|
|
6e6: 11 f0 breq .+4 ; 0x6ec <usb_desc_out+0x72>
|
|
|
|
|
6e8: 80 81 ld r24, Z
|
|
|
|
|
6ea: 01 c0 rjmp .+2 ; 0x6ee <usb_desc_out+0x74>
|
|
|
|
|
6ec: 84 91 lpm r24, Z
|
|
|
|
|
6ee: 88 83 st Y, r24
|
|
|
|
|
do {
|
|
|
|
|
usb_wait_in();
|
|
|
|
|
if (i & _BV(RXOUTI)) return; // cancel
|
|
|
|
|
// send IN package
|
|
|
|
|
n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE;
|
|
|
|
|
for (i = n; i; i--)
|
|
|
|
|
6f0: 91 50 subi r25, 0x01 ; 1
|
|
|
|
|
6f2: 31 96 adiw r30, 0x01 ; 1
|
|
|
|
|
6f4: 91 11 cpse r25, r1
|
|
|
|
|
6f6: f6 cf rjmp .-20 ; 0x6e4 <usb_desc_out+0x6a>
|
|
|
|
|
void usb_wait_receive_out(void)
|
|
|
|
|
{
|
|
|
|
|
while (!(UEINTX & _BV(RXOUTI))) ;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void usb_desc_out(bool isRAM, const uint8_t *pgmaddr, uint8_t size, uint16_t maxsize)
|
|
|
|
|
6f8: 62 2f mov r22, r18
|
|
|
|
|
6fa: 61 50 subi r22, 0x01 ; 1
|
|
|
|
|
6fc: 70 e0 ldi r23, 0x00 ; 0
|
|
|
|
|
6fe: 6f 5f subi r22, 0xFF ; 255
|
|
|
|
|
700: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
702: 06 0f add r16, r22
|
|
|
|
|
704: 17 1f adc r17, r23
|
|
|
|
|
if (i & _BV(RXOUTI)) return; // cancel
|
|
|
|
|
// send IN package
|
|
|
|
|
n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE;
|
|
|
|
|
for (i = n; i; i--)
|
|
|
|
|
UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++);
|
|
|
|
|
len -= n;
|
|
|
|
|
706: c2 1a sub r12, r18
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
708: f7 01 movw r30, r14
|
|
|
|
|
70a: b0 82 st Z, r11
|
|
|
|
|
} while (len || n == ENDPOINT0_SIZE);
|
|
|
|
|
70c: c1 10 cpse r12, r1
|
|
|
|
|
70e: dc cf rjmp .-72 ; 0x6c8 <usb_desc_out+0x4e>
|
|
|
|
|
710: 20 31 cpi r18, 0x10 ; 16
|
|
|
|
|
712: d1 f2 breq .-76 ; 0x6c8 <usb_desc_out+0x4e>
|
|
|
|
|
714: 04 c0 rjmp .+8 ; 0x71e <usb_desc_out+0xa4>
|
|
|
|
|
// send IN package
|
|
|
|
|
n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE;
|
|
|
|
|
for (i = n; i; i--)
|
|
|
|
|
UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++);
|
|
|
|
|
len -= n;
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
716: f7 01 movw r30, r14
|
|
|
|
|
718: b0 82 st Z, r11
|
|
|
|
|
} while (len || n == ENDPOINT0_SIZE);
|
|
|
|
|
71a: c1 10 cpse r12, r1
|
|
|
|
|
71c: d5 cf rjmp .-86 ; 0x6c8 <usb_desc_out+0x4e>
|
|
|
|
|
}
|
|
|
|
|
71e: df 91 pop r29
|
|
|
|
|
720: cf 91 pop r28
|
|
|
|
|
722: 1f 91 pop r17
|
|
|
|
|
724: 0f 91 pop r16
|
|
|
|
|
726: ff 90 pop r15
|
|
|
|
|
728: ef 90 pop r14
|
|
|
|
|
72a: df 90 pop r13
|
|
|
|
|
72c: cf 90 pop r12
|
|
|
|
|
72e: bf 90 pop r11
|
|
|
|
|
730: af 90 pop r10
|
|
|
|
|
732: 9f 90 pop r9
|
|
|
|
|
734: 8f 90 pop r8
|
|
|
|
|
736: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00000738 <usb_rxdata>:
|
|
|
|
|
uint16_t r, i;
|
|
|
|
|
#else
|
|
|
|
|
uint8_t r, i;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
UENUM = endpoint; // select endpoint
|
|
|
|
|
738: 80 93 e9 00 sts 0x00E9, r24
|
|
|
|
|
#ifdef MEGA4_6
|
|
|
|
|
r = ((uint16_t)(UEBCHX)<<8)+UEBCLX;
|
|
|
|
|
#else
|
|
|
|
|
r = UEBCLX;
|
|
|
|
|
73c: 90 91 f2 00 lds r25, 0x00F2
|
|
|
|
|
740: 84 2f mov r24, r20
|
|
|
|
|
742: 94 17 cp r25, r20
|
|
|
|
|
744: 08 f4 brcc .+2 ; 0x748 <usb_rxdata+0x10>
|
|
|
|
|
746: 89 2f mov r24, r25
|
|
|
|
|
#endif
|
|
|
|
|
if (r>maxdatasize) r = maxdatasize;
|
|
|
|
|
if (r) { // data available in input endpoint
|
|
|
|
|
748: 88 23 and r24, r24
|
|
|
|
|
74a: 59 f0 breq .+22 ; 0x762 <usb_rxdata+0x2a>
|
|
|
|
|
74c: 26 2f mov r18, r22
|
|
|
|
|
74e: e6 2f mov r30, r22
|
|
|
|
|
750: f7 2f mov r31, r23
|
|
|
|
|
for (i=0; i<r; i++) buffer[i]=UEDATX;
|
|
|
|
|
752: a1 ef ldi r26, 0xF1 ; 241
|
|
|
|
|
754: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
756: 9c 91 ld r25, X
|
|
|
|
|
758: 91 93 st Z+, r25
|
|
|
|
|
75a: 9e 2f mov r25, r30
|
|
|
|
|
75c: 92 1b sub r25, r18
|
|
|
|
|
75e: 98 17 cp r25, r24
|
|
|
|
|
760: d0 f3 brcs .-12 ; 0x756 <usb_rxdata+0x1e>
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
****/
|
|
|
|
|
}
|
|
|
|
|
return r;
|
|
|
|
|
}
|
|
|
|
|
762: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00000764 <usb_txdata>:
|
|
|
|
|
#ifdef MEGA4_6
|
|
|
|
|
bool usb_txdata(uint8_t endpoint, uint8_t *buffer, uint16_t datasize)
|
|
|
|
|
#else
|
|
|
|
|
bool usb_txdata(uint8_t endpoint, uint8_t *buffer, uint8_t datasize)
|
|
|
|
|
#endif
|
|
|
|
|
{
|
|
|
|
|
764: cf 93 push r28
|
|
|
|
|
766: df 93 push r29
|
|
|
|
|
uint16_t i;
|
|
|
|
|
#else
|
|
|
|
|
uint8_t i;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (datasize) {
|
|
|
|
|
768: 44 23 and r20, r20
|
|
|
|
|
76a: 29 f1 breq .+74 ; 0x7b6 <usb_txdata+0x52>
|
|
|
|
|
UENUM = endpoint;
|
|
|
|
|
76c: 80 93 e9 00 sts 0x00E9, r24
|
|
|
|
|
|
|
|
|
|
#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN)
|
|
|
|
|
|
|
|
|
|
static inline void usb_wait_in_ready(void)
|
|
|
|
|
{
|
|
|
|
|
while (!(UEINTX & _BV(TXINI)));
|
|
|
|
|
770: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
772: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
774: 80 81 ld r24, Z
|
|
|
|
|
776: 80 ff sbrs r24, 0
|
|
|
|
|
778: fd cf rjmp .-6 ; 0x774 <usb_txdata+0x10>
|
|
|
|
|
UENUM = endpoint;
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
#ifdef MEGA4_6
|
|
|
|
|
if ((((uint16_t)(UEBCHX)<<8)+UEBCLX)==0) { // buffer is empty
|
|
|
|
|
#else
|
|
|
|
|
if (UEBCLX==0) { // buffer is empty
|
|
|
|
|
77a: 80 91 f2 00 lds r24, 0x00F2
|
|
|
|
|
77e: 81 11 cpse r24, r1
|
|
|
|
|
780: 1c c0 rjmp .+56 ; 0x7ba <usb_txdata+0x56>
|
|
|
|
|
782: 96 2f mov r25, r22
|
|
|
|
|
784: e6 2f mov r30, r22
|
|
|
|
|
786: f7 2f mov r31, r23
|
|
|
|
|
#endif
|
|
|
|
|
for (i=0; i<datasize; i++)
|
|
|
|
|
if (UEINTX & _BV(RWAL)) UEDATX = buffer[i];
|
|
|
|
|
788: a8 ee ldi r26, 0xE8 ; 232
|
|
|
|
|
78a: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
78c: c1 ef ldi r28, 0xF1 ; 241
|
|
|
|
|
78e: d0 e0 ldi r29, 0x00 ; 0
|
|
|
|
|
790: 8c 91 ld r24, X
|
|
|
|
|
792: 85 ff sbrs r24, 5
|
|
|
|
|
794: 02 c0 rjmp .+4 ; 0x79a <usb_txdata+0x36>
|
|
|
|
|
796: 80 81 ld r24, Z
|
|
|
|
|
798: 88 83 st Y, r24
|
|
|
|
|
79a: 31 96 adiw r30, 0x01 ; 1
|
|
|
|
|
#ifdef MEGA4_6
|
|
|
|
|
if ((((uint16_t)(UEBCHX)<<8)+UEBCLX)==0) { // buffer is empty
|
|
|
|
|
#else
|
|
|
|
|
if (UEBCLX==0) { // buffer is empty
|
|
|
|
|
#endif
|
|
|
|
|
for (i=0; i<datasize; i++)
|
|
|
|
|
79c: 8e 2f mov r24, r30
|
|
|
|
|
79e: 89 1b sub r24, r25
|
|
|
|
|
7a0: 84 17 cp r24, r20
|
|
|
|
|
7a2: b0 f3 brcs .-20 ; 0x790 <usb_txdata+0x2c>
|
|
|
|
|
if (UEINTX & _BV(RWAL)) UEDATX = buffer[i];
|
|
|
|
|
UEINTX&=~_BV(TXINI); // necessary (in this order) (changed V1.1.1)
|
|
|
|
|
7a4: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
7a6: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
7a8: 80 81 ld r24, Z
|
|
|
|
|
7aa: 8e 7f andi r24, 0xFE ; 254
|
|
|
|
|
7ac: 80 83 st Z, r24
|
|
|
|
|
UEINTX=0x7F; // (uint8_t)~_BV(FIFOCON);
|
|
|
|
|
7ae: 8f e7 ldi r24, 0x7F ; 127
|
|
|
|
|
7b0: 80 83 st Z, r24
|
|
|
|
|
return true;
|
|
|
|
|
7b2: 81 e0 ldi r24, 0x01 ; 1
|
|
|
|
|
7b4: 03 c0 rjmp .+6 ; 0x7bc <usb_txdata+0x58>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
7b6: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
7b8: 01 c0 rjmp .+2 ; 0x7bc <usb_txdata+0x58>
|
|
|
|
|
7ba: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
}
|
|
|
|
|
7bc: df 91 pop r29
|
|
|
|
|
7be: cf 91 pop r28
|
|
|
|
|
7c0: 08 95 ret
|
|
|
|
|
|
|
|
|
|
000007c2 <__vector_11>:
|
|
|
|
|
// USB Device Interrupt
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Hardware interrupts of the USB controller
|
|
|
|
|
|
|
|
|
|
ISR(USB_GEN_vect)
|
|
|
|
|
{
|
|
|
|
|
7c2: 1f 92 push r1
|
|
|
|
|
7c4: 0f 92 push r0
|
|
|
|
|
7c6: 0f b6 in r0, 0x3f ; 63
|
|
|
|
|
7c8: 0f 92 push r0
|
|
|
|
|
7ca: 11 24 eor r1, r1
|
|
|
|
|
7cc: 8f 93 push r24
|
|
|
|
|
7ce: ef 93 push r30
|
|
|
|
|
7d0: ff 93 push r31
|
|
|
|
|
uint8_t intbits;
|
|
|
|
|
|
|
|
|
|
intbits = UDINT; // save flags
|
|
|
|
|
7d2: e1 ee ldi r30, 0xE1 ; 225
|
|
|
|
|
7d4: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
7d6: 80 81 ld r24, Z
|
|
|
|
|
UDINT = 0; // reset flags
|
|
|
|
|
7d8: 10 82 st Z, r1
|
|
|
|
|
if (intbits & _BV(EORSTI)) { // End Of Reset Interrupt Flag
|
|
|
|
|
7da: 83 ff sbrs r24, 3
|
|
|
|
|
7dc: 12 c0 rjmp .+36 ; 0x802 <__vector_11+0x40>
|
|
|
|
|
// initialize endpoint 0 for control transfers
|
|
|
|
|
UENUM = 0;
|
|
|
|
|
7de: 10 92 e9 00 sts 0x00E9, r1
|
|
|
|
|
UECONX = _BV(EPEN);
|
|
|
|
|
7e2: 81 e0 ldi r24, 0x01 ; 1
|
|
|
|
|
7e4: 80 93 eb 00 sts 0x00EB, r24
|
|
|
|
|
UECFG0X = EP_TYPE_CONTROL;
|
|
|
|
|
7e8: 10 92 ec 00 sts 0x00EC, r1
|
|
|
|
|
UECFG1X = EP_SIZE(ENDPOINT0_SIZE) | EP_SINGLE_BUFFER;
|
|
|
|
|
7ec: 82 e1 ldi r24, 0x12 ; 18
|
|
|
|
|
7ee: 80 93 ed 00 sts 0x00ED, r24
|
|
|
|
|
UEIENX = _BV(RXSTPE); // enable interrupt for incoming data
|
|
|
|
|
7f2: 88 e0 ldi r24, 0x08 ; 8
|
|
|
|
|
7f4: 80 93 f0 00 sts 0x00F0, r24
|
|
|
|
|
usb_conf = 0;
|
|
|
|
|
7f8: 10 92 f2 01 sts 0x01F2, r1
|
|
|
|
|
#if (NUMINTERFACES>1)
|
|
|
|
|
usb_if = 0xFF;
|
|
|
|
|
7fc: 8f ef ldi r24, 0xFF ; 255
|
|
|
|
|
7fe: 80 93 25 01 sts 0x0125, r24
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
802: ff 91 pop r31
|
|
|
|
|
804: ef 91 pop r30
|
|
|
|
|
806: 8f 91 pop r24
|
|
|
|
|
808: 0f 90 pop r0
|
|
|
|
|
80a: 0f be out 0x3f, r0 ; 63
|
|
|
|
|
80c: 0f 90 pop r0
|
|
|
|
|
80e: 1f 90 pop r1
|
|
|
|
|
810: 18 95 reti
|
|
|
|
|
|
|
|
|
|
00000812 <__vector_12>:
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
{
|
|
|
|
|
812: 1f 92 push r1
|
|
|
|
|
814: 0f 92 push r0
|
|
|
|
|
816: 0f b6 in r0, 0x3f ; 63
|
|
|
|
|
818: 0f 92 push r0
|
|
|
|
|
81a: 11 24 eor r1, r1
|
|
|
|
|
81c: 2f 92 push r2
|
|
|
|
|
81e: 3f 92 push r3
|
|
|
|
|
820: 4f 92 push r4
|
|
|
|
|
822: 5f 92 push r5
|
|
|
|
|
824: 6f 92 push r6
|
|
|
|
|
826: 7f 92 push r7
|
|
|
|
|
828: 8f 92 push r8
|
|
|
|
|
82a: 9f 92 push r9
|
|
|
|
|
82c: af 92 push r10
|
|
|
|
|
82e: bf 92 push r11
|
|
|
|
|
830: cf 92 push r12
|
|
|
|
|
832: df 92 push r13
|
|
|
|
|
834: ef 92 push r14
|
|
|
|
|
836: ff 92 push r15
|
|
|
|
|
838: 0f 93 push r16
|
|
|
|
|
83a: 1f 93 push r17
|
|
|
|
|
83c: 2f 93 push r18
|
|
|
|
|
83e: 3f 93 push r19
|
|
|
|
|
840: 4f 93 push r20
|
|
|
|
|
842: 5f 93 push r21
|
|
|
|
|
844: 6f 93 push r22
|
|
|
|
|
846: 7f 93 push r23
|
|
|
|
|
848: 8f 93 push r24
|
|
|
|
|
84a: 9f 93 push r25
|
|
|
|
|
84c: af 93 push r26
|
|
|
|
|
84e: bf 93 push r27
|
|
|
|
|
850: ef 93 push r30
|
|
|
|
|
852: ff 93 push r31
|
|
|
|
|
854: cf 93 push r28
|
|
|
|
|
856: df 93 push r29
|
|
|
|
|
858: cd b7 in r28, 0x3d ; 61
|
|
|
|
|
85a: de b7 in r29, 0x3e ; 62
|
|
|
|
|
85c: 29 97 sbiw r28, 0x09 ; 9
|
|
|
|
|
85e: de bf out 0x3e, r29 ; 62
|
|
|
|
|
860: cd bf out 0x3d, r28 ; 61
|
|
|
|
|
#if (USESN==2) // serial number in RAM
|
|
|
|
|
struct usb_string_descriptor_ram buf;
|
|
|
|
|
#endif
|
|
|
|
|
struct usb_control_request ucr;
|
|
|
|
|
|
|
|
|
|
if (UEINT & 0x01) {
|
|
|
|
|
862: 80 91 f4 00 lds r24, 0x00F4
|
|
|
|
|
866: 80 ff sbrs r24, 0
|
|
|
|
|
868: 8f c2 rjmp .+1310 ; 0xd88 <__vector_12+0x576>
|
|
|
|
|
// handle interrupts of endpoint 0 (control transfers)
|
|
|
|
|
UENUM = 0;
|
|
|
|
|
86a: 10 92 e9 00 sts 0x00E9, r1
|
|
|
|
|
intbits = UEINTX; // save interrupt flags of the endpoint
|
|
|
|
|
86e: 80 91 e8 00 lds r24, 0x00E8
|
|
|
|
|
if (intbits & _BV(RXSTPI)) { // control transfer, setup
|
|
|
|
|
872: 83 ff sbrs r24, 3
|
|
|
|
|
874: 58 c2 rjmp .+1200 ; 0xd26 <__vector_12+0x514>
|
|
|
|
|
ucr.bmRequestType = UEDATX;
|
|
|
|
|
876: e1 ef ldi r30, 0xF1 ; 241
|
|
|
|
|
878: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
87a: 50 81 ld r21, Z
|
|
|
|
|
ucr.bRequest = UEDATX;
|
|
|
|
|
87c: 40 81 ld r20, Z
|
|
|
|
|
ucr.wValue = UEDATX;
|
|
|
|
|
87e: 20 81 ld r18, Z
|
|
|
|
|
ucr.wValue |= (UEDATX << 8);
|
|
|
|
|
880: 30 81 ld r19, Z
|
|
|
|
|
882: 93 2f mov r25, r19
|
|
|
|
|
884: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
886: 82 2b or r24, r18
|
|
|
|
|
ucr.wIndex = UEDATX;
|
|
|
|
|
888: 60 81 ld r22, Z
|
|
|
|
|
ucr.wIndex |= (UEDATX << 8);
|
|
|
|
|
88a: 70 81 ld r23, Z
|
|
|
|
|
ucr.wLength = UEDATX;
|
|
|
|
|
88c: 30 81 ld r19, Z
|
|
|
|
|
ucr.wLength |= (UEDATX << 8);
|
|
|
|
|
88e: e0 81 ld r30, Z
|
|
|
|
|
UEINTX = ~(_BV(RXSTPI) | _BV(RXOUTI) | _BV(TXINI));
|
|
|
|
|
890: 22 ef ldi r18, 0xF2 ; 242
|
|
|
|
|
892: 20 93 e8 00 sts 0x00E8, r18
|
|
|
|
|
if (ucr.bRequest == GET_DESCRIPTOR) {
|
|
|
|
|
896: 46 30 cpi r20, 0x06 ; 6
|
|
|
|
|
898: 09 f0 breq .+2 ; 0x89c <__vector_12+0x8a>
|
|
|
|
|
89a: 5a c1 rjmp .+692 ; 0xb50 <__vector_12+0x33e>
|
|
|
|
|
ucr.wValue = UEDATX;
|
|
|
|
|
ucr.wValue |= (UEDATX << 8);
|
|
|
|
|
ucr.wIndex = UEDATX;
|
|
|
|
|
ucr.wIndex |= (UEDATX << 8);
|
|
|
|
|
ucr.wLength = UEDATX;
|
|
|
|
|
ucr.wLength |= (UEDATX << 8);
|
|
|
|
|
89c: 1e 2f mov r17, r30
|
|
|
|
|
89e: 00 e0 ldi r16, 0x00 ; 0
|
|
|
|
|
8a0: 03 2b or r16, r19
|
|
|
|
|
UEINTX = ~(_BV(RXSTPI) | _BV(RXOUTI) | _BV(TXINI));
|
|
|
|
|
if (ucr.bRequest == GET_DESCRIPTOR) {
|
|
|
|
|
switch (ucr.wValue) {
|
|
|
|
|
8a2: 81 15 cp r24, r1
|
|
|
|
|
8a4: 23 e0 ldi r18, 0x03 ; 3
|
|
|
|
|
8a6: 92 07 cpc r25, r18
|
|
|
|
|
8a8: 09 f4 brne .+2 ; 0x8ac <__vector_12+0x9a>
|
|
|
|
|
8aa: 2a c1 rjmp .+596 ; 0xb00 <__vector_12+0x2ee>
|
|
|
|
|
8ac: 48 f4 brcc .+18 ; 0x8c0 <__vector_12+0xae>
|
|
|
|
|
8ae: 81 15 cp r24, r1
|
|
|
|
|
8b0: 41 e0 ldi r20, 0x01 ; 1
|
|
|
|
|
8b2: 94 07 cpc r25, r20
|
|
|
|
|
8b4: f9 f0 breq .+62 ; 0x8f4 <__vector_12+0xe2>
|
|
|
|
|
8b6: 81 15 cp r24, r1
|
|
|
|
|
8b8: 92 40 sbci r25, 0x02 ; 2
|
|
|
|
|
8ba: 09 f0 breq .+2 ; 0x8be <__vector_12+0xac>
|
|
|
|
|
8bc: 45 c1 rjmp .+650 ; 0xb48 <__vector_12+0x336>
|
|
|
|
|
8be: 0c c0 rjmp .+24 ; 0x8d8 <__vector_12+0xc6>
|
|
|
|
|
8c0: 82 30 cpi r24, 0x02 ; 2
|
|
|
|
|
8c2: a3 e0 ldi r26, 0x03 ; 3
|
|
|
|
|
8c4: 9a 07 cpc r25, r26
|
|
|
|
|
8c6: 09 f4 brne .+2 ; 0x8ca <__vector_12+0xb8>
|
|
|
|
|
8c8: 2d c1 rjmp .+602 ; 0xb24 <__vector_12+0x312>
|
|
|
|
|
8ca: 08 f4 brcc .+2 ; 0x8ce <__vector_12+0xbc>
|
|
|
|
|
8cc: 22 c1 rjmp .+580 ; 0xb12 <__vector_12+0x300>
|
|
|
|
|
8ce: 83 30 cpi r24, 0x03 ; 3
|
|
|
|
|
8d0: 93 40 sbci r25, 0x03 ; 3
|
|
|
|
|
8d2: 09 f0 breq .+2 ; 0x8d6 <__vector_12+0xc4>
|
|
|
|
|
8d4: 39 c1 rjmp .+626 ; 0xb48 <__vector_12+0x336>
|
|
|
|
|
8d6: 2f c1 rjmp .+606 ; 0xb36 <__vector_12+0x324>
|
|
|
|
|
8d8: 2c e3 ldi r18, 0x3C ; 60
|
|
|
|
|
8da: 31 e0 ldi r19, 0x01 ; 1
|
|
|
|
|
8dc: 3d 83 std Y+5, r19 ; 0x05
|
|
|
|
|
8de: 2c 83 std Y+4, r18 ; 0x04
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
8e0: 6c e5 ldi r22, 0x5C ; 92
|
|
|
|
|
8e2: 71 e0 ldi r23, 0x01 ; 1
|
|
|
|
|
8e4: a0 e0 ldi r26, 0x00 ; 0
|
|
|
|
|
{
|
|
|
|
|
8e6: 40 e0 ldi r20, 0x00 ; 0
|
|
|
|
|
8e8: 50 e0 ldi r21, 0x00 ; 0
|
|
|
|
|
case 0x0200: // configuration descriptor
|
|
|
|
|
// get number of activated endpoints
|
|
|
|
|
n=0;
|
|
|
|
|
#if (NUMINTERFACES>1)
|
|
|
|
|
for (j=0; j<NUMINTERFACES; j++)
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) n+=(EP_CONFIG[j][i].ep_type!=EP_TYPE_DISABLED);
|
|
|
|
|
8ea: ff 24 eor r15, r15
|
|
|
|
|
8ec: f3 94 inc r15
|
|
|
|
|
8ee: e1 2c mov r14, r1
|
|
|
|
|
8f0: 69 01 movw r12, r18
|
|
|
|
|
8f2: 1b c0 rjmp .+54 ; 0x92a <__vector_12+0x118>
|
|
|
|
|
ucr.wLength |= (UEDATX << 8);
|
|
|
|
|
UEINTX = ~(_BV(RXSTPI) | _BV(RXOUTI) | _BV(TXINI));
|
|
|
|
|
if (ucr.bRequest == GET_DESCRIPTOR) {
|
|
|
|
|
switch (ucr.wValue) {
|
|
|
|
|
case 0x0100: // device descriptor
|
|
|
|
|
usb_desc_out(false,&device_descriptor[0],pgm_read_byte(&device_descriptor[0]),ucr.wLength);
|
|
|
|
|
8f4: e4 e7 ldi r30, 0x74 ; 116
|
|
|
|
|
8f6: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
8f8: 44 91 lpm r20, Z
|
|
|
|
|
8fa: 98 01 movw r18, r16
|
|
|
|
|
8fc: bf 01 movw r22, r30
|
|
|
|
|
8fe: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
900: 0e 94 3d 03 call 0x67a ; 0x67a <usb_desc_out>
|
|
|
|
|
break;
|
|
|
|
|
904: 4a c2 rjmp .+1172 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
906: f9 01 movw r30, r18
|
|
|
|
|
908: e8 0f add r30, r24
|
|
|
|
|
90a: f9 1f adc r31, r25
|
|
|
|
|
case 0x0200: // configuration descriptor
|
|
|
|
|
// get number of activated endpoints
|
|
|
|
|
n=0;
|
|
|
|
|
#if (NUMINTERFACES>1)
|
|
|
|
|
for (j=0; j<NUMINTERFACES; j++)
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) n+=(EP_CONFIG[j][i].ep_type!=EP_TYPE_DISABLED);
|
|
|
|
|
90c: bf 2d mov r27, r15
|
|
|
|
|
90e: e0 81 ld r30, Z
|
|
|
|
|
910: ef 3f cpi r30, 0xFF ; 255
|
|
|
|
|
912: 09 f4 brne .+2 ; 0x916 <__vector_12+0x104>
|
|
|
|
|
914: be 2d mov r27, r14
|
|
|
|
|
916: ab 0f add r26, r27
|
|
|
|
|
918: 04 96 adiw r24, 0x04 ; 4
|
|
|
|
|
91a: 80 31 cpi r24, 0x10 ; 16
|
|
|
|
|
91c: 91 05 cpc r25, r1
|
|
|
|
|
91e: 99 f7 brne .-26 ; 0x906 <__vector_12+0xf4>
|
|
|
|
|
920: 20 5f subi r18, 0xF0 ; 240
|
|
|
|
|
922: 3f 4f sbci r19, 0xFF ; 255
|
|
|
|
|
break;
|
|
|
|
|
case 0x0200: // configuration descriptor
|
|
|
|
|
// get number of activated endpoints
|
|
|
|
|
n=0;
|
|
|
|
|
#if (NUMINTERFACES>1)
|
|
|
|
|
for (j=0; j<NUMINTERFACES; j++)
|
|
|
|
|
924: 26 17 cp r18, r22
|
|
|
|
|
926: 37 07 cpc r19, r23
|
|
|
|
|
928: 11 f0 breq .+4 ; 0x92e <__vector_12+0x11c>
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
{
|
|
|
|
|
92a: ca 01 movw r24, r20
|
|
|
|
|
92c: ec cf rjmp .-40 ; 0x906 <__vector_12+0xf4>
|
|
|
|
|
92e: dd 82 std Y+5, r13 ; 0x05
|
|
|
|
|
930: cc 82 std Y+4, r12 ; 0x04
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) n+=(EP_CONFIG[j][i].ep_type!=EP_TYPE_DISABLED);
|
|
|
|
|
#else
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) n+=(EP_CONFIG[i].ep_type!=EP_TYPE_DISABLED);
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef CDC
|
|
|
|
|
s = sizeof(cfg_desc)+NUMINTERFACES*sizeof(if_desc)+sizeof(cdc_desc)+n*sizeof(ep_desc);
|
|
|
|
|
932: 8a 2f mov r24, r26
|
|
|
|
|
934: 88 0f add r24, r24
|
|
|
|
|
936: 88 0f add r24, r24
|
|
|
|
|
938: 88 0f add r24, r24
|
|
|
|
|
93a: 8a 1b sub r24, r26
|
|
|
|
|
93c: 82 5d subi r24, 0xD2 ; 210
|
|
|
|
|
93e: 89 83 std Y+1, r24 ; 0x01
|
|
|
|
|
#else
|
|
|
|
|
s = sizeof(cfg_desc)+NUMINTERFACES*sizeof(if_desc)+n*sizeof(ep_desc);
|
|
|
|
|
#endif
|
|
|
|
|
cfg = malloc(s); // allocate memory
|
|
|
|
|
940: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
942: 0e 94 f6 06 call 0xdec ; 0xdec <malloc>
|
|
|
|
|
946: e8 2e mov r14, r24
|
|
|
|
|
948: f9 2e mov r15, r25
|
|
|
|
|
// initialize configuration descriptor
|
|
|
|
|
cfg->bLength = sizeof(cfg_desc);
|
|
|
|
|
94a: 89 e0 ldi r24, 0x09 ; 9
|
|
|
|
|
94c: d7 01 movw r26, r14
|
|
|
|
|
94e: 8c 93 st X, r24
|
|
|
|
|
cfg->bDescriptorType = 2;
|
|
|
|
|
950: 82 e0 ldi r24, 0x02 ; 2
|
|
|
|
|
952: 11 96 adiw r26, 0x01 ; 1
|
|
|
|
|
954: 8c 93 st X, r24
|
|
|
|
|
956: 11 97 sbiw r26, 0x01 ; 1
|
|
|
|
|
cfg->wTotalLength = s;
|
|
|
|
|
958: e9 81 ldd r30, Y+1 ; 0x01
|
|
|
|
|
95a: 12 96 adiw r26, 0x02 ; 2
|
|
|
|
|
95c: ec 93 st X, r30
|
|
|
|
|
95e: 12 97 sbiw r26, 0x02 ; 2
|
|
|
|
|
960: 13 96 adiw r26, 0x03 ; 3
|
|
|
|
|
962: 1c 92 st X, r1
|
|
|
|
|
964: 13 97 sbiw r26, 0x03 ; 3
|
|
|
|
|
cfg->bNumInterfaces = NUMINTERFACES;
|
|
|
|
|
966: 14 96 adiw r26, 0x04 ; 4
|
|
|
|
|
968: 8c 93 st X, r24
|
|
|
|
|
96a: 14 97 sbiw r26, 0x04 ; 4
|
|
|
|
|
cfg->bConfigurationValue = 1;
|
|
|
|
|
96c: 81 e0 ldi r24, 0x01 ; 1
|
|
|
|
|
96e: 15 96 adiw r26, 0x05 ; 5
|
|
|
|
|
970: 8c 93 st X, r24
|
|
|
|
|
972: 15 97 sbiw r26, 0x05 ; 5
|
|
|
|
|
cfg->iConfiguration = 0;
|
|
|
|
|
974: 16 96 adiw r26, 0x06 ; 6
|
|
|
|
|
976: 1c 92 st X, r1
|
|
|
|
|
978: 16 97 sbiw r26, 0x06 ; 6
|
|
|
|
|
cfg->bmAttributes = POWERING;
|
|
|
|
|
97a: 80 e8 ldi r24, 0x80 ; 128
|
|
|
|
|
97c: 17 96 adiw r26, 0x07 ; 7
|
|
|
|
|
97e: 8c 93 st X, r24
|
|
|
|
|
980: 17 97 sbiw r26, 0x07 ; 7
|
|
|
|
|
cfg->bMaxPower = MAXPOWER>>1;
|
|
|
|
|
982: 8a ef ldi r24, 0xFA ; 250
|
|
|
|
|
984: 18 96 adiw r26, 0x08 ; 8
|
|
|
|
|
986: 8c 93 st X, r24
|
|
|
|
|
988: 18 97 sbiw r26, 0x08 ; 8
|
|
|
|
|
// initialize interface descriptor
|
|
|
|
|
ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc));
|
|
|
|
|
98a: 19 96 adiw r26, 0x09 ; 9
|
|
|
|
|
98c: 0f 2e mov r0, r31
|
|
|
|
|
98e: f2 e2 ldi r31, 0x22 ; 34
|
|
|
|
|
990: af 2e mov r10, r31
|
|
|
|
|
992: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
994: bf 2e mov r11, r31
|
|
|
|
|
996: f0 2d mov r31, r0
|
|
|
|
|
998: 0f 2e mov r0, r31
|
|
|
|
|
99a: ff e1 ldi r31, 0x1F ; 31
|
|
|
|
|
99c: 8f 2e mov r8, r31
|
|
|
|
|
99e: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
9a0: 9f 2e mov r9, r31
|
|
|
|
|
9a2: f0 2d mov r31, r0
|
|
|
|
|
9a4: 0f 2e mov r0, r31
|
|
|
|
|
9a6: fc e1 ldi r31, 0x1C ; 28
|
|
|
|
|
9a8: 6f 2e mov r6, r31
|
|
|
|
|
9aa: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
9ac: 7f 2e mov r7, r31
|
|
|
|
|
9ae: f0 2d mov r31, r0
|
|
|
|
|
9b0: 40 e0 ldi r20, 0x00 ; 0
|
|
|
|
|
9b2: 50 e0 ldi r21, 0x00 ; 0
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
9b4: 41 2c mov r4, r1
|
|
|
|
|
9b6: 51 2c mov r5, r1
|
|
|
|
|
9b8: 31 2c mov r3, r1
|
|
|
|
|
// initialize interface descriptor
|
|
|
|
|
ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc));
|
|
|
|
|
#if (NUMINTERFACES>1)
|
|
|
|
|
for (j=0; j<NUMINTERFACES; j++) {
|
|
|
|
|
n = 0;
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) n+=(EP_CONFIG[j][i].ep_type!=EP_TYPE_DISABLED); // number of endpoints for one interface
|
|
|
|
|
9ba: dd 24 eor r13, r13
|
|
|
|
|
9bc: d3 94 inc r13
|
|
|
|
|
9be: 23 2c mov r2, r3
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
9c0: 8f e6 ldi r24, 0x6F ; 111
|
|
|
|
|
9c2: 91 e0 ldi r25, 0x01 ; 1
|
|
|
|
|
9c4: 1b 83 std Y+3, r17 ; 0x03
|
|
|
|
|
9c6: 0a 83 std Y+2, r16 ; 0x02
|
|
|
|
|
9c8: fd 01 movw r30, r26
|
|
|
|
|
9ca: 88 c0 rjmp .+272 ; 0xadc <__vector_12+0x2ca>
|
|
|
|
|
9cc: d8 01 movw r26, r16
|
|
|
|
|
9ce: a2 0f add r26, r18
|
|
|
|
|
9d0: b3 1f adc r27, r19
|
|
|
|
|
// initialize interface descriptor
|
|
|
|
|
ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc));
|
|
|
|
|
#if (NUMINTERFACES>1)
|
|
|
|
|
for (j=0; j<NUMINTERFACES; j++) {
|
|
|
|
|
n = 0;
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) n+=(EP_CONFIG[j][i].ep_type!=EP_TYPE_DISABLED); // number of endpoints for one interface
|
|
|
|
|
9d2: 6d 2d mov r22, r13
|
|
|
|
|
9d4: ac 91 ld r26, X
|
|
|
|
|
9d6: af 3f cpi r26, 0xFF ; 255
|
|
|
|
|
9d8: 09 f4 brne .+2 ; 0x9dc <__vector_12+0x1ca>
|
|
|
|
|
9da: 62 2d mov r22, r2
|
|
|
|
|
9dc: c6 0e add r12, r22
|
|
|
|
|
9de: 2c 5f subi r18, 0xFC ; 252
|
|
|
|
|
9e0: 3f 4f sbci r19, 0xFF ; 255
|
|
|
|
|
9e2: 20 31 cpi r18, 0x10 ; 16
|
|
|
|
|
9e4: 31 05 cpc r19, r1
|
|
|
|
|
9e6: 91 f7 brne .-28 ; 0x9cc <__vector_12+0x1ba>
|
|
|
|
|
9e8: 1d 83 std Y+5, r17 ; 0x05
|
|
|
|
|
9ea: 0c 83 std Y+4, r16 ; 0x04
|
|
|
|
|
#else
|
|
|
|
|
j = 0;
|
|
|
|
|
#endif
|
|
|
|
|
ifp->bLength = sizeof(if_desc);
|
|
|
|
|
9ec: 19 e0 ldi r17, 0x09 ; 9
|
|
|
|
|
9ee: 10 83 st Z, r17
|
|
|
|
|
ifp->bDescriptorType = 4;
|
|
|
|
|
9f0: 24 e0 ldi r18, 0x04 ; 4
|
|
|
|
|
9f2: 21 83 std Z+1, r18 ; 0x01
|
|
|
|
|
ifp->bInterfaceNumber = j;
|
|
|
|
|
9f4: 72 83 std Z+2, r23 ; 0x02
|
|
|
|
|
ifp->bAlternateSetting = 0;
|
|
|
|
|
9f6: 13 82 std Z+3, r1 ; 0x03
|
|
|
|
|
ifp->bNumEndpoints = n;
|
|
|
|
|
9f8: c4 82 std Z+4, r12 ; 0x04
|
|
|
|
|
ifp->bInterfaceClass = InterfaceClasses[j];
|
|
|
|
|
9fa: 9a 01 movw r18, r20
|
|
|
|
|
9fc: d5 01 movw r26, r10
|
|
|
|
|
9fe: 6d 91 ld r22, X+
|
|
|
|
|
a00: 5d 01 movw r10, r26
|
|
|
|
|
a02: 65 83 std Z+5, r22 ; 0x05
|
|
|
|
|
ifp->bInterfaceSubClass = InterfaceSubClasses[j];
|
|
|
|
|
a04: d4 01 movw r26, r8
|
|
|
|
|
a06: 6d 91 ld r22, X+
|
|
|
|
|
a08: 4d 01 movw r8, r26
|
|
|
|
|
a0a: 66 83 std Z+6, r22 ; 0x06
|
|
|
|
|
ifp->bInterfaceProtocol = InterfaceProtocols[j];
|
|
|
|
|
a0c: d3 01 movw r26, r6
|
|
|
|
|
a0e: 6d 91 ld r22, X+
|
|
|
|
|
a10: 3d 01 movw r6, r26
|
|
|
|
|
a12: 67 83 std Z+7, r22 ; 0x07
|
|
|
|
|
ifp->iInterface = 0;
|
|
|
|
|
a14: 10 86 std Z+8, r1 ; 0x08
|
|
|
|
|
#ifdef CDC
|
|
|
|
|
if (j==0) {
|
|
|
|
|
a16: 71 11 cpse r23, r1
|
|
|
|
|
a18: 0c c0 rjmp .+24 ; 0xa32 <__vector_12+0x220>
|
|
|
|
|
cdc = (cdc_desc *)((uint16_t)(ifp)+sizeof(if_desc));
|
|
|
|
|
a1a: bf 01 movw r22, r30
|
|
|
|
|
a1c: 39 96 adiw r30, 0x09 ; 9
|
|
|
|
|
a1e: ac e5 ldi r26, 0x5C ; 92
|
|
|
|
|
a20: b1 e0 ldi r27, 0x01 ; 1
|
|
|
|
|
for (i=0; i<CDC_DESCRIPTORSIZE; i++) *(cdc[0]+i)=CDCDescriptorData[i];
|
|
|
|
|
a22: 1d 91 ld r17, X+
|
|
|
|
|
a24: 11 93 st Z+, r17
|
|
|
|
|
a26: a8 17 cp r26, r24
|
|
|
|
|
a28: b9 07 cpc r27, r25
|
|
|
|
|
a2a: d9 f7 brne .-10 ; 0xa22 <__vector_12+0x210>
|
|
|
|
|
epp = (ep_desc *)((uint16_t)(cdc)+sizeof(cdc_desc));
|
|
|
|
|
a2c: fb 01 movw r30, r22
|
|
|
|
|
a2e: 7c 96 adiw r30, 0x1c ; 28
|
|
|
|
|
a30: 01 c0 rjmp .+2 ; 0xa34 <__vector_12+0x222>
|
|
|
|
|
} else epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc));
|
|
|
|
|
a32: 39 96 adiw r30, 0x09 ; 9
|
|
|
|
|
#else
|
|
|
|
|
epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc));
|
|
|
|
|
#endif
|
|
|
|
|
if (n) { // endpoints
|
|
|
|
|
a34: cc 20 and r12, r12
|
|
|
|
|
a36: 09 f4 brne .+2 ; 0xa3a <__vector_12+0x228>
|
|
|
|
|
a38: 46 c0 rjmp .+140 ; 0xac6 <__vector_12+0x2b4>
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
a3a: 22 95 swap r18
|
|
|
|
|
a3c: 32 95 swap r19
|
|
|
|
|
a3e: 30 7f andi r19, 0xF0 ; 240
|
|
|
|
|
a40: 32 27 eor r19, r18
|
|
|
|
|
a42: 20 7f andi r18, 0xF0 ; 240
|
|
|
|
|
a44: 32 27 eor r19, r18
|
|
|
|
|
a46: 21 5c subi r18, 0xC1 ; 193
|
|
|
|
|
a48: 3e 4f sbci r19, 0xFE ; 254
|
|
|
|
|
a4a: 11 e0 ldi r17, 0x01 ; 1
|
|
|
|
|
a4c: 59 87 std Y+9, r21 ; 0x09
|
|
|
|
|
a4e: 48 87 std Y+8, r20 ; 0x08
|
|
|
|
|
a50: 6c 81 ldd r22, Y+4 ; 0x04
|
|
|
|
|
a52: 7d 81 ldd r23, Y+5 ; 0x05
|
|
|
|
|
a54: 3f 83 std Y+7, r19 ; 0x07
|
|
|
|
|
a56: 2e 83 std Y+6, r18 ; 0x06
|
|
|
|
|
a58: a9 01 movw r20, r18
|
|
|
|
|
a5a: 43 50 subi r20, 0x03 ; 3
|
|
|
|
|
a5c: 51 09 sbc r21, r1
|
|
|
|
|
#else
|
|
|
|
|
epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc));
|
|
|
|
|
#endif
|
|
|
|
|
if (n) { // endpoints
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) {
|
|
|
|
|
if (EPCO.ep_type!=EP_TYPE_DISABLED) {
|
|
|
|
|
a5e: da 01 movw r26, r20
|
|
|
|
|
a60: 0c 91 ld r16, X
|
|
|
|
|
a62: 0f 3f cpi r16, 0xFF ; 255
|
|
|
|
|
a64: 39 f1 breq .+78 ; 0xab4 <__vector_12+0x2a2>
|
|
|
|
|
epp->bLength = sizeof(ep_desc);
|
|
|
|
|
a66: b7 e0 ldi r27, 0x07 ; 7
|
|
|
|
|
a68: b0 83 st Z, r27
|
|
|
|
|
epp->bDescriptorType = 5;
|
|
|
|
|
a6a: 45 e0 ldi r20, 0x05 ; 5
|
|
|
|
|
a6c: 41 83 std Z+1, r20 ; 0x01
|
|
|
|
|
epp->bEndpointAddress = (i+1)|(EPCO.ep_type<<7);
|
|
|
|
|
a6e: 40 2f mov r20, r16
|
|
|
|
|
a70: 47 95 ror r20
|
|
|
|
|
a72: 44 27 eor r20, r20
|
|
|
|
|
a74: 47 95 ror r20
|
|
|
|
|
a76: 41 2b or r20, r17
|
|
|
|
|
a78: 42 83 std Z+2, r20 ; 0x02
|
|
|
|
|
epp->bmAttributes = EP_TRANSFER(EPCO.ep_type);
|
|
|
|
|
a7a: 01 34 cpi r16, 0x41 ; 65
|
|
|
|
|
a7c: 41 f0 breq .+16 ; 0xa8e <__vector_12+0x27c>
|
|
|
|
|
a7e: 00 34 cpi r16, 0x40 ; 64
|
|
|
|
|
a80: 41 f0 breq .+16 ; 0xa92 <__vector_12+0x280>
|
|
|
|
|
a82: 01 38 cpi r16, 0x81 ; 129
|
|
|
|
|
a84: 41 f0 breq .+16 ; 0xa96 <__vector_12+0x284>
|
|
|
|
|
a86: 00 38 cpi r16, 0x80 ; 128
|
|
|
|
|
a88: 41 f4 brne .+16 ; 0xa9a <__vector_12+0x288>
|
|
|
|
|
a8a: 42 e0 ldi r20, 0x02 ; 2
|
|
|
|
|
a8c: 07 c0 rjmp .+14 ; 0xa9c <__vector_12+0x28a>
|
|
|
|
|
a8e: 4d 2d mov r20, r13
|
|
|
|
|
a90: 05 c0 rjmp .+10 ; 0xa9c <__vector_12+0x28a>
|
|
|
|
|
a92: 4d 2d mov r20, r13
|
|
|
|
|
a94: 03 c0 rjmp .+6 ; 0xa9c <__vector_12+0x28a>
|
|
|
|
|
a96: 42 e0 ldi r20, 0x02 ; 2
|
|
|
|
|
a98: 01 c0 rjmp .+2 ; 0xa9c <__vector_12+0x28a>
|
|
|
|
|
a9a: 43 e0 ldi r20, 0x03 ; 3
|
|
|
|
|
a9c: 43 83 std Z+3, r20 ; 0x03
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
a9e: ae 81 ldd r26, Y+6 ; 0x06
|
|
|
|
|
aa0: bf 81 ldd r27, Y+7 ; 0x07
|
|
|
|
|
aa2: 12 97 sbiw r26, 0x02 ; 2
|
|
|
|
|
if (EPCO.ep_type!=EP_TYPE_DISABLED) {
|
|
|
|
|
epp->bLength = sizeof(ep_desc);
|
|
|
|
|
epp->bDescriptorType = 5;
|
|
|
|
|
epp->bEndpointAddress = (i+1)|(EPCO.ep_type<<7);
|
|
|
|
|
epp->bmAttributes = EP_TRANSFER(EPCO.ep_type);
|
|
|
|
|
epp->wMaxPacketSize = EPCO.ep_size;
|
|
|
|
|
aa4: 4c 91 ld r20, X
|
|
|
|
|
aa6: 44 83 std Z+4, r20 ; 0x04
|
|
|
|
|
aa8: 15 82 std Z+5, r1 ; 0x05
|
|
|
|
|
epp->bInterval = EPCO.ep_interval;
|
|
|
|
|
aaa: ae 81 ldd r26, Y+6 ; 0x06
|
|
|
|
|
aac: bf 81 ldd r27, Y+7 ; 0x07
|
|
|
|
|
aae: 4c 91 ld r20, X
|
|
|
|
|
ab0: 46 83 std Z+6, r20 ; 0x06
|
|
|
|
|
epp = (ep_desc *)((uint16_t)(epp)+sizeof(ep_desc));
|
|
|
|
|
ab2: 37 96 adiw r30, 0x07 ; 7
|
|
|
|
|
ab4: 1f 5f subi r17, 0xFF ; 255
|
|
|
|
|
ab6: 2c 5f subi r18, 0xFC ; 252
|
|
|
|
|
ab8: 3f 4f sbci r19, 0xFF ; 255
|
|
|
|
|
} else epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc));
|
|
|
|
|
#else
|
|
|
|
|
epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc));
|
|
|
|
|
#endif
|
|
|
|
|
if (n) { // endpoints
|
|
|
|
|
for (i=0; i<MAX_ENDPOINT; i++) {
|
|
|
|
|
aba: 15 30 cpi r17, 0x05 ; 5
|
|
|
|
|
abc: 59 f6 brne .-106 ; 0xa54 <__vector_12+0x242>
|
|
|
|
|
abe: 48 85 ldd r20, Y+8 ; 0x08
|
|
|
|
|
ac0: 59 85 ldd r21, Y+9 ; 0x09
|
|
|
|
|
ac2: 7d 83 std Y+5, r23 ; 0x05
|
|
|
|
|
ac4: 6c 83 std Y+4, r22 ; 0x04
|
|
|
|
|
ac6: 4f 5f subi r20, 0xFF ; 255
|
|
|
|
|
ac8: 5f 4f sbci r21, 0xFF ; 255
|
|
|
|
|
aca: 0c 81 ldd r16, Y+4 ; 0x04
|
|
|
|
|
acc: 1d 81 ldd r17, Y+5 ; 0x05
|
|
|
|
|
ace: 00 5f subi r16, 0xF0 ; 240
|
|
|
|
|
ad0: 1f 4f sbci r17, 0xFF ; 255
|
|
|
|
|
ad2: 1d 83 std Y+5, r17 ; 0x05
|
|
|
|
|
ad4: 0c 83 std Y+4, r16 ; 0x04
|
|
|
|
|
cfg->bmAttributes = POWERING;
|
|
|
|
|
cfg->bMaxPower = MAXPOWER>>1;
|
|
|
|
|
// initialize interface descriptor
|
|
|
|
|
ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc));
|
|
|
|
|
#if (NUMINTERFACES>1)
|
|
|
|
|
for (j=0; j<NUMINTERFACES; j++) {
|
|
|
|
|
ad6: 42 30 cpi r20, 0x02 ; 2
|
|
|
|
|
ad8: 51 05 cpc r21, r1
|
|
|
|
|
ada: 31 f0 breq .+12 ; 0xae8 <__vector_12+0x2d6>
|
|
|
|
|
adc: 74 2f mov r23, r20
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
ade: 92 01 movw r18, r4
|
|
|
|
|
ae0: c3 2c mov r12, r3
|
|
|
|
|
ae2: 0c 81 ldd r16, Y+4 ; 0x04
|
|
|
|
|
ae4: 1d 81 ldd r17, Y+5 ; 0x05
|
|
|
|
|
ae6: 72 cf rjmp .-284 ; 0x9cc <__vector_12+0x1ba>
|
|
|
|
|
ae8: 0a 81 ldd r16, Y+2 ; 0x02
|
|
|
|
|
aea: 1b 81 ldd r17, Y+3 ; 0x03
|
|
|
|
|
#if (NUMINTERFACES>1)
|
|
|
|
|
ifp = (if_desc *)epp;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
// finally
|
|
|
|
|
usb_desc_out(true,(uint8_t *)cfg,s,ucr.wLength);
|
|
|
|
|
aec: 98 01 movw r18, r16
|
|
|
|
|
aee: 49 81 ldd r20, Y+1 ; 0x01
|
|
|
|
|
af0: b7 01 movw r22, r14
|
|
|
|
|
af2: 81 e0 ldi r24, 0x01 ; 1
|
|
|
|
|
af4: 0e 94 3d 03 call 0x67a ; 0x67a <usb_desc_out>
|
|
|
|
|
free(cfg);
|
|
|
|
|
af8: c7 01 movw r24, r14
|
|
|
|
|
afa: 0e 94 91 07 call 0xf22 ; 0xf22 <free>
|
|
|
|
|
break;
|
|
|
|
|
afe: 4d c1 rjmp .+666 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
case 0x0300: // String 0
|
|
|
|
|
usb_desc_out(false,(uint8_t *)&string0.bLength,pgm_read_byte(&string0.bLength),ucr.wLength);
|
|
|
|
|
b00: e6 e8 ldi r30, 0x86 ; 134
|
|
|
|
|
b02: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
b04: 44 91 lpm r20, Z
|
|
|
|
|
b06: 98 01 movw r18, r16
|
|
|
|
|
b08: bf 01 movw r22, r30
|
|
|
|
|
b0a: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
b0c: 0e 94 3d 03 call 0x67a ; 0x67a <usb_desc_out>
|
|
|
|
|
break;
|
|
|
|
|
b10: 44 c1 rjmp .+648 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
case 0x0301: // String 1
|
|
|
|
|
usb_desc_out(false,(uint8_t *)&string1.bLength,pgm_read_byte(&string1.bLength),ucr.wLength);
|
|
|
|
|
b12: ea e8 ldi r30, 0x8A ; 138
|
|
|
|
|
b14: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
b16: 44 91 lpm r20, Z
|
|
|
|
|
b18: 98 01 movw r18, r16
|
|
|
|
|
b1a: bf 01 movw r22, r30
|
|
|
|
|
b1c: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
b1e: 0e 94 3d 03 call 0x67a ; 0x67a <usb_desc_out>
|
|
|
|
|
break;
|
|
|
|
|
b22: 3b c1 rjmp .+630 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
case 0x0302: // String 2
|
|
|
|
|
usb_desc_out(false,(uint8_t *)&string2.bLength,pgm_read_byte(&string2.bLength),ucr.wLength);
|
|
|
|
|
b24: e0 ea ldi r30, 0xA0 ; 160
|
|
|
|
|
b26: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
b28: 44 91 lpm r20, Z
|
|
|
|
|
b2a: 98 01 movw r18, r16
|
|
|
|
|
b2c: bf 01 movw r22, r30
|
|
|
|
|
b2e: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
b30: 0e 94 3d 03 call 0x67a ; 0x67a <usb_desc_out>
|
|
|
|
|
break;
|
|
|
|
|
b34: 32 c1 rjmp .+612 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
#if (USESN>0)
|
|
|
|
|
case 0x0303: // String 3, serial number
|
|
|
|
|
#if (USESN==1) // serial number in the flash
|
|
|
|
|
usb_desc_out(false,(uint8_t *)&string3.bLength,pgm_read_byte(&string3.bLength),ucr.wLength);
|
|
|
|
|
b36: e2 ec ldi r30, 0xC2 ; 194
|
|
|
|
|
b38: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
b3a: 44 91 lpm r20, Z
|
|
|
|
|
b3c: 98 01 movw r18, r16
|
|
|
|
|
b3e: bf 01 movw r22, r30
|
|
|
|
|
b40: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
b42: 0e 94 3d 03 call 0x67a ; 0x67a <usb_desc_out>
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
buf.bLength=2*i+2; // total length of the data set
|
|
|
|
|
usb_desc_out(true,(uint8_t *)&buf,buf.bLength,ucr.wLength);
|
|
|
|
|
#endif
|
|
|
|
|
break;
|
|
|
|
|
b46: 29 c1 rjmp .+594 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
#endif
|
|
|
|
|
default:
|
|
|
|
|
STALL; // stall
|
|
|
|
|
b48: 81 e2 ldi r24, 0x21 ; 33
|
|
|
|
|
b4a: 80 93 eb 00 sts 0x00EB, r24
|
|
|
|
|
b4e: 25 c1 rjmp .+586 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == SET_ADDRESS) {
|
|
|
|
|
b50: 45 30 cpi r20, 0x05 ; 5
|
|
|
|
|
b52: 61 f4 brne .+24 ; 0xb6c <__vector_12+0x35a>
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
b54: 2e ef ldi r18, 0xFE ; 254
|
|
|
|
|
b56: 20 93 e8 00 sts 0x00E8, r18
|
|
|
|
|
|
|
|
|
|
#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN)
|
|
|
|
|
|
|
|
|
|
static inline void usb_wait_in_ready(void)
|
|
|
|
|
{
|
|
|
|
|
while (!(UEINTX & _BV(TXINI)));
|
|
|
|
|
b5a: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
b5c: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
b5e: 20 81 ld r18, Z
|
|
|
|
|
b60: 20 ff sbrs r18, 0
|
|
|
|
|
b62: fd cf rjmp .-6 ; 0xb5e <__vector_12+0x34c>
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == SET_ADDRESS) {
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
UDADDR = ucr.wValue | _BV(ADDEN);
|
|
|
|
|
b64: 80 68 ori r24, 0x80 ; 128
|
|
|
|
|
b66: 80 93 e3 00 sts 0x00E3, r24
|
|
|
|
|
b6a: 17 c1 rjmp .+558 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
ucr.bmRequestType = UEDATX;
|
|
|
|
|
ucr.bRequest = UEDATX;
|
|
|
|
|
ucr.wValue = UEDATX;
|
|
|
|
|
ucr.wValue |= (UEDATX << 8);
|
|
|
|
|
ucr.wIndex = UEDATX;
|
|
|
|
|
ucr.wIndex |= (UEDATX << 8);
|
|
|
|
|
b6c: 37 2f mov r19, r23
|
|
|
|
|
b6e: 20 e0 ldi r18, 0x00 ; 0
|
|
|
|
|
b70: 26 2b or r18, r22
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
UDADDR = ucr.wValue | _BV(ADDEN);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == SET_CONFIGURATION && ucr.bmRequestType == 0) { // another configuration will be chosen
|
|
|
|
|
b72: 49 30 cpi r20, 0x09 ; 9
|
|
|
|
|
b74: 99 f4 brne .+38 ; 0xb9c <__vector_12+0x38a>
|
|
|
|
|
b76: 51 11 cpse r21, r1
|
|
|
|
|
b78: 3e c0 rjmp .+124 ; 0xbf6 <__vector_12+0x3e4>
|
|
|
|
|
if (ucr.wValue==1) { // configuration 1 will be chosen
|
|
|
|
|
b7a: 01 97 sbiw r24, 0x01 ; 1
|
|
|
|
|
b7c: 59 f4 brne .+22 ; 0xb94 <__vector_12+0x382>
|
|
|
|
|
usb_conf = ucr.wValue;
|
|
|
|
|
b7e: 81 e0 ldi r24, 0x01 ; 1
|
|
|
|
|
b80: 80 93 f2 01 sts 0x01F2, r24
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
b84: 8e ef ldi r24, 0xFE ; 254
|
|
|
|
|
b86: 80 93 e8 00 sts 0x00E8, r24
|
|
|
|
|
#ifdef STATICENDPOINTS
|
|
|
|
|
usb_if = 0; // select interface 0
|
|
|
|
|
b8a: 10 92 25 01 sts 0x0125, r1
|
|
|
|
|
usb_endpoints(); // initialize endpoints
|
|
|
|
|
b8e: 0e 94 b6 02 call 0x56c ; 0x56c <usb_endpoints>
|
|
|
|
|
b92: 03 c1 rjmp .+518 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
usb_if = 0; // select interface 0
|
|
|
|
|
usb_endpoints(usb_if); // initialize endpoints
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
} else { // other configurations are not supported in this version
|
|
|
|
|
STALL; // stall
|
|
|
|
|
b94: 81 e2 ldi r24, 0x21 ; 33
|
|
|
|
|
b96: 80 93 eb 00 sts 0x00EB, r24
|
|
|
|
|
b9a: ff c0 rjmp .+510 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == GET_CONFIGURATION && ucr.bmRequestType == 0x80) {
|
|
|
|
|
b9c: 48 30 cpi r20, 0x08 ; 8
|
|
|
|
|
b9e: 81 f4 brne .+32 ; 0xbc0 <__vector_12+0x3ae>
|
|
|
|
|
ba0: 50 38 cpi r21, 0x80 ; 128
|
|
|
|
|
ba2: 09 f0 breq .+2 ; 0xba6 <__vector_12+0x394>
|
|
|
|
|
ba4: 43 c0 rjmp .+134 ; 0xc2c <__vector_12+0x41a>
|
|
|
|
|
|
|
|
|
|
#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN)
|
|
|
|
|
|
|
|
|
|
static inline void usb_wait_in_ready(void)
|
|
|
|
|
{
|
|
|
|
|
while (!(UEINTX & _BV(TXINI)));
|
|
|
|
|
ba6: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
ba8: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
baa: 80 81 ld r24, Z
|
|
|
|
|
bac: 80 ff sbrs r24, 0
|
|
|
|
|
bae: fd cf rjmp .-6 ; 0xbaa <__vector_12+0x398>
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == GET_CONFIGURATION && ucr.bmRequestType == 0x80) {
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
UEDATX = usb_conf;
|
|
|
|
|
bb0: 80 91 f2 01 lds r24, 0x01F2
|
|
|
|
|
bb4: 80 93 f1 00 sts 0x00F1, r24
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
bb8: 8e ef ldi r24, 0xFE ; 254
|
|
|
|
|
bba: 80 93 e8 00 sts 0x00E8, r24
|
|
|
|
|
bbe: ed c0 rjmp .+474 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == CDC_GET_LINE_CODING && ucr.bmRequestType == 0xA1) {
|
|
|
|
|
bc0: 41 32 cpi r20, 0x21 ; 33
|
|
|
|
|
bc2: c9 f4 brne .+50 ; 0xbf6 <__vector_12+0x3e4>
|
|
|
|
|
bc4: 51 3a cpi r21, 0xA1 ; 161
|
|
|
|
|
bc6: 09 f0 breq .+2 ; 0xbca <__vector_12+0x3b8>
|
|
|
|
|
bc8: 43 c0 rjmp .+134 ; 0xc50 <__vector_12+0x43e>
|
|
|
|
|
|
|
|
|
|
#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN)
|
|
|
|
|
|
|
|
|
|
static inline void usb_wait_in_ready(void)
|
|
|
|
|
{
|
|
|
|
|
while (!(UEINTX & _BV(TXINI)));
|
|
|
|
|
bca: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
bcc: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
bce: 80 81 ld r24, Z
|
|
|
|
|
bd0: 80 ff sbrs r24, 0
|
|
|
|
|
bd2: fd cf rjmp .-6 ; 0xbce <__vector_12+0x3bc>
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == CDC_GET_LINE_CODING && ucr.bmRequestType == 0xA1) {
|
|
|
|
|
// request baudrate and transmission format
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
cdc_notify_getlinecoding();
|
|
|
|
|
bd4: 0e 94 d8 00 call 0x1b0 ; 0x1b0 <cdc_notify_getlinecoding>
|
|
|
|
|
bd8: e5 ef ldi r30, 0xF5 ; 245
|
|
|
|
|
bda: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
bdc: 8c ef ldi r24, 0xFC ; 252
|
|
|
|
|
bde: 91 e0 ldi r25, 0x01 ; 1
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == CDC_GET_LINE_CODING && ucr.bmRequestType == 0xA1) {
|
|
|
|
|
// request baudrate and transmission format
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
cdc_notify_getlinecoding();
|
|
|
|
|
for (i=0; i<7; i++) UEDATX = cdc_linecoding.data[i];
|
|
|
|
|
be0: a1 ef ldi r26, 0xF1 ; 241
|
|
|
|
|
be2: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
be4: 21 91 ld r18, Z+
|
|
|
|
|
be6: 2c 93 st X, r18
|
|
|
|
|
be8: e8 17 cp r30, r24
|
|
|
|
|
bea: f9 07 cpc r31, r25
|
|
|
|
|
bec: d9 f7 brne .-10 ; 0xbe4 <__vector_12+0x3d2>
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
bee: 8e ef ldi r24, 0xFE ; 254
|
|
|
|
|
bf0: 80 93 e8 00 sts 0x00E8, r24
|
|
|
|
|
bf4: d2 c0 rjmp .+420 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == CDC_SET_LINE_CODING && ucr.bmRequestType == 0x21) {
|
|
|
|
|
bf6: 40 32 cpi r20, 0x20 ; 32
|
|
|
|
|
bf8: c9 f4 brne .+50 ; 0xc2c <__vector_12+0x41a>
|
|
|
|
|
bfa: 51 32 cpi r21, 0x21 ; 33
|
|
|
|
|
bfc: 09 f0 breq .+2 ; 0xc00 <__vector_12+0x3ee>
|
|
|
|
|
bfe: 59 c0 rjmp .+178 ; 0xcb2 <__vector_12+0x4a0>
|
|
|
|
|
// set baudrate and transmission format
|
|
|
|
|
usb_wait_receive_out();
|
|
|
|
|
c00: 0e 94 37 03 call 0x66e ; 0x66e <usb_wait_receive_out>
|
|
|
|
|
c04: e5 ef ldi r30, 0xF5 ; 245
|
|
|
|
|
c06: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Endpoint Interrupts
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Interrupts, triggered by incoming data in an endpoint, are handled here.
|
|
|
|
|
|
|
|
|
|
ISR(USB_COM_vect)
|
|
|
|
|
c08: 8c ef ldi r24, 0xFC ; 252
|
|
|
|
|
c0a: 91 e0 ldi r25, 0x01 ; 1
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == CDC_SET_LINE_CODING && ucr.bmRequestType == 0x21) {
|
|
|
|
|
// set baudrate and transmission format
|
|
|
|
|
usb_wait_receive_out();
|
|
|
|
|
for (i=0; i<7; i++) cdc_linecoding.data[i] = UEDATX;
|
|
|
|
|
c0c: a1 ef ldi r26, 0xF1 ; 241
|
|
|
|
|
c0e: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
c10: 2c 91 ld r18, X
|
|
|
|
|
c12: 21 93 st Z+, r18
|
|
|
|
|
c14: e8 17 cp r30, r24
|
|
|
|
|
c16: f9 07 cpc r31, r25
|
|
|
|
|
c18: d9 f7 brne .-10 ; 0xc10 <__vector_12+0x3fe>
|
|
|
|
|
USB_ACK;
|
|
|
|
|
c1a: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
c1c: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
c1e: 8b ef ldi r24, 0xFB ; 251
|
|
|
|
|
c20: 80 83 st Z, r24
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
c22: 8e ef ldi r24, 0xFE ; 254
|
|
|
|
|
c24: 80 83 st Z, r24
|
|
|
|
|
cdc_notify_setlinecoding();
|
|
|
|
|
c26: 0e 94 d9 00 call 0x1b2 ; 0x1b2 <cdc_notify_setlinecoding>
|
|
|
|
|
c2a: b7 c0 rjmp .+366 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == CDC_SET_CONTROL_LINE_STATE && ucr.bmRequestType == 0x21) {
|
|
|
|
|
c2c: 42 32 cpi r20, 0x22 ; 34
|
|
|
|
|
c2e: 81 f4 brne .+32 ; 0xc50 <__vector_12+0x43e>
|
|
|
|
|
c30: 51 32 cpi r21, 0x21 ; 33
|
|
|
|
|
c32: 09 f0 breq .+2 ; 0xc36 <__vector_12+0x424>
|
|
|
|
|
c34: 4f c0 rjmp .+158 ; 0xcd4 <__vector_12+0x4c2>
|
|
|
|
|
// set handshake outputs RTS and DTR
|
|
|
|
|
cdc_rtsdtr = (uint8_t)ucr.wValue;
|
|
|
|
|
c36: 80 93 f4 01 sts 0x01F4, r24
|
|
|
|
|
|
|
|
|
|
#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN)
|
|
|
|
|
|
|
|
|
|
static inline void usb_wait_in_ready(void)
|
|
|
|
|
{
|
|
|
|
|
while (!(UEINTX & _BV(TXINI)));
|
|
|
|
|
c3a: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
c3c: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
c3e: 80 81 ld r24, Z
|
|
|
|
|
c40: 80 ff sbrs r24, 0
|
|
|
|
|
c42: fd cf rjmp .-6 ; 0xc3e <__vector_12+0x42c>
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == CDC_SET_CONTROL_LINE_STATE && ucr.bmRequestType == 0x21) {
|
|
|
|
|
// set handshake outputs RTS and DTR
|
|
|
|
|
cdc_rtsdtr = (uint8_t)ucr.wValue;
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
c44: 8e ef ldi r24, 0xFE ; 254
|
|
|
|
|
c46: 80 93 e8 00 sts 0x00E8, r24
|
|
|
|
|
cdc_notify_setcontrollinestate();
|
|
|
|
|
c4a: 0e 94 da 00 call 0x1b4 ; 0x1b4 <cdc_notify_setcontrollinestate>
|
|
|
|
|
c4e: a5 c0 rjmp .+330 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == GET_STATUS) {
|
|
|
|
|
c50: 41 11 cpse r20, r1
|
|
|
|
|
c52: 1a c0 rjmp .+52 ; 0xc88 <__vector_12+0x476>
|
|
|
|
|
|
|
|
|
|
#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN)
|
|
|
|
|
|
|
|
|
|
static inline void usb_wait_in_ready(void)
|
|
|
|
|
{
|
|
|
|
|
while (!(UEINTX & _BV(TXINI)));
|
|
|
|
|
c54: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
c56: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
c58: 80 81 ld r24, Z
|
|
|
|
|
c5a: 80 ff sbrs r24, 0
|
|
|
|
|
c5c: fd cf rjmp .-6 ; 0xc58 <__vector_12+0x446>
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == GET_STATUS) {
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
i = 0;
|
|
|
|
|
#ifdef SUPPORT_ENDPOINT_HALT
|
|
|
|
|
if (ucr.bmRequestType == 0x82) {
|
|
|
|
|
c5e: 52 38 cpi r21, 0x82 ; 130
|
|
|
|
|
c60: 51 f4 brne .+20 ; 0xc76 <__vector_12+0x464>
|
|
|
|
|
UENUM = ucr.wIndex;
|
|
|
|
|
c62: e9 ee ldi r30, 0xE9 ; 233
|
|
|
|
|
c64: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
c66: 20 83 st Z, r18
|
|
|
|
|
if (UECONX & _BV(STALLRQ)) i = 1;
|
|
|
|
|
c68: 80 91 eb 00 lds r24, 0x00EB
|
|
|
|
|
c6c: 85 fb bst r24, 5
|
|
|
|
|
c6e: 88 27 eor r24, r24
|
|
|
|
|
c70: 80 f9 bld r24, 0
|
|
|
|
|
UENUM = 0;
|
|
|
|
|
c72: 10 82 st Z, r1
|
|
|
|
|
c74: 01 c0 rjmp .+2 ; 0xc78 <__vector_12+0x466>
|
|
|
|
|
cdc_notify_setcontrollinestate();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == GET_STATUS) {
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
i = 0;
|
|
|
|
|
c76: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
UENUM = ucr.wIndex;
|
|
|
|
|
if (UECONX & _BV(STALLRQ)) i = 1;
|
|
|
|
|
UENUM = 0;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
UEDATX = i;
|
|
|
|
|
c78: e1 ef ldi r30, 0xF1 ; 241
|
|
|
|
|
c7a: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
c7c: 80 83 st Z, r24
|
|
|
|
|
UEDATX = 0;
|
|
|
|
|
c7e: 10 82 st Z, r1
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
c80: 8e ef ldi r24, 0xFE ; 254
|
|
|
|
|
c82: 80 93 e8 00 sts 0x00E8, r24
|
|
|
|
|
c86: 89 c0 rjmp .+274 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
#if (NUMINTERFACES>1)
|
|
|
|
|
if (ucr.bRequest == SET_INTERFACE && (ucr.bmRequestType == 0x20 || ucr.bmRequestType == 0)) { // another interface will be chosen
|
|
|
|
|
c88: 4b 30 cpi r20, 0x0B ; 11
|
|
|
|
|
c8a: 99 f4 brne .+38 ; 0xcb2 <__vector_12+0x4a0>
|
|
|
|
|
c8c: 50 32 cpi r21, 0x20 ; 32
|
|
|
|
|
c8e: 11 f0 breq .+4 ; 0xc94 <__vector_12+0x482>
|
|
|
|
|
c90: 51 11 cpse r21, r1
|
|
|
|
|
c92: 49 c0 rjmp .+146 ; 0xd26 <__vector_12+0x514>
|
|
|
|
|
if (ucr.wIndex<NUMINTERFACES) { // defined interface will be chosen
|
|
|
|
|
c94: 22 30 cpi r18, 0x02 ; 2
|
|
|
|
|
c96: 31 05 cpc r19, r1
|
|
|
|
|
c98: 40 f4 brcc .+16 ; 0xcaa <__vector_12+0x498>
|
|
|
|
|
usb_if = ucr.wIndex;
|
|
|
|
|
c9a: 20 93 25 01 sts 0x0125, r18
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
c9e: 8e ef ldi r24, 0xFE ; 254
|
|
|
|
|
ca0: 80 93 e8 00 sts 0x00E8, r24
|
|
|
|
|
#ifdef STATICENDPOINTS
|
|
|
|
|
usb_endpoints(); // initialize endpoints
|
|
|
|
|
ca4: 0e 94 b6 02 call 0x56c ; 0x56c <usb_endpoints>
|
|
|
|
|
ca8: 78 c0 rjmp .+240 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
#else
|
|
|
|
|
usb_endpoints(usb_if); // initialize endpoints
|
|
|
|
|
#endif
|
|
|
|
|
} else { // other configurations are not supported in this version
|
|
|
|
|
STALL; // stall
|
|
|
|
|
caa: 81 e2 ldi r24, 0x21 ; 33
|
|
|
|
|
cac: 80 93 eb 00 sts 0x00EB, r24
|
|
|
|
|
cb0: 74 c0 rjmp .+232 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == GET_INTERFACE && ucr.bmRequestType == 0x80) {
|
|
|
|
|
cb2: 4a 30 cpi r20, 0x0A ; 10
|
|
|
|
|
cb4: 79 f4 brne .+30 ; 0xcd4 <__vector_12+0x4c2>
|
|
|
|
|
cb6: 50 38 cpi r21, 0x80 ; 128
|
|
|
|
|
cb8: b1 f5 brne .+108 ; 0xd26 <__vector_12+0x514>
|
|
|
|
|
|
|
|
|
|
#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN)
|
|
|
|
|
|
|
|
|
|
static inline void usb_wait_in_ready(void)
|
|
|
|
|
{
|
|
|
|
|
while (!(UEINTX & _BV(TXINI)));
|
|
|
|
|
cba: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
cbc: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
cbe: 80 81 ld r24, Z
|
|
|
|
|
cc0: 80 ff sbrs r24, 0
|
|
|
|
|
cc2: fd cf rjmp .-6 ; 0xcbe <__vector_12+0x4ac>
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == GET_INTERFACE && ucr.bmRequestType == 0x80) {
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
UEDATX = usb_if;
|
|
|
|
|
cc4: 80 91 25 01 lds r24, 0x0125
|
|
|
|
|
cc8: 80 93 f1 00 sts 0x00F1, r24
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
ccc: 8e ef ldi r24, 0xFE ; 254
|
|
|
|
|
cce: 80 93 e8 00 sts 0x00E8, r24
|
|
|
|
|
cd2: 63 c0 rjmp .+198 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef SUPPORT_ENDPOINT_HALT
|
|
|
|
|
if ((ucr.bRequest == CLEAR_FEATURE || ucr.bRequest == SET_FEATURE)
|
|
|
|
|
cd4: 41 30 cpi r20, 0x01 ; 1
|
|
|
|
|
cd6: 11 f0 breq .+4 ; 0xcdc <__vector_12+0x4ca>
|
|
|
|
|
cd8: 43 30 cpi r20, 0x03 ; 3
|
|
|
|
|
cda: 29 f5 brne .+74 ; 0xd26 <__vector_12+0x514>
|
|
|
|
|
&& ucr.bmRequestType == 0x02 && ucr.wValue == 0) {
|
|
|
|
|
cdc: 52 30 cpi r21, 0x02 ; 2
|
|
|
|
|
cde: 19 f5 brne .+70 ; 0xd26 <__vector_12+0x514>
|
|
|
|
|
ce0: 89 2b or r24, r25
|
|
|
|
|
ce2: 09 f5 brne .+66 ; 0xd26 <__vector_12+0x514>
|
|
|
|
|
i = ucr.wIndex & 0x7F;
|
|
|
|
|
ce4: 2f 77 andi r18, 0x7F ; 127
|
|
|
|
|
ce6: 33 27 eor r19, r19
|
|
|
|
|
if (i >= 1 && i <= MAX_ENDPOINT) {
|
|
|
|
|
ce8: 92 2f mov r25, r18
|
|
|
|
|
cea: 91 50 subi r25, 0x01 ; 1
|
|
|
|
|
cec: 94 30 cpi r25, 0x04 ; 4
|
|
|
|
|
cee: d8 f4 brcc .+54 ; 0xd26 <__vector_12+0x514>
|
|
|
|
|
USB_SEND_IN;
|
|
|
|
|
cf0: 9e ef ldi r25, 0xFE ; 254
|
|
|
|
|
cf2: 90 93 e8 00 sts 0x00E8, r25
|
|
|
|
|
UENUM = i;
|
|
|
|
|
cf6: 20 93 e9 00 sts 0x00E9, r18
|
|
|
|
|
if (ucr.bRequest == SET_FEATURE) {
|
|
|
|
|
cfa: 43 30 cpi r20, 0x03 ; 3
|
|
|
|
|
cfc: 21 f4 brne .+8 ; 0xd06 <__vector_12+0x4f4>
|
|
|
|
|
UECONX = _BV(STALLRQ)|_BV(EPEN);
|
|
|
|
|
cfe: 81 e2 ldi r24, 0x21 ; 33
|
|
|
|
|
d00: 80 93 eb 00 sts 0x00EB, r24
|
|
|
|
|
d04: 4a c0 rjmp .+148 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
} else {
|
|
|
|
|
UECONX = _BV(STALLRQC)|_BV(RSTDT)|_BV(EPEN);
|
|
|
|
|
d06: 89 e1 ldi r24, 0x19 ; 25
|
|
|
|
|
d08: 80 93 eb 00 sts 0x00EB, r24
|
|
|
|
|
UERST = _BV(i);
|
|
|
|
|
d0c: 81 e0 ldi r24, 0x01 ; 1
|
|
|
|
|
d0e: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
d10: ac 01 movw r20, r24
|
|
|
|
|
d12: 02 c0 rjmp .+4 ; 0xd18 <__vector_12+0x506>
|
|
|
|
|
d14: 44 0f add r20, r20
|
|
|
|
|
d16: 55 1f adc r21, r21
|
|
|
|
|
d18: 2a 95 dec r18
|
|
|
|
|
d1a: e2 f7 brpl .-8 ; 0xd14 <__vector_12+0x502>
|
|
|
|
|
d1c: ea ee ldi r30, 0xEA ; 234
|
|
|
|
|
d1e: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
d20: 40 83 st Z, r20
|
|
|
|
|
UERST = 0;
|
|
|
|
|
d22: 10 82 st Z, r1
|
|
|
|
|
d24: 3a c0 rjmp .+116 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
if (!usb_controlrequest(&ucr))
|
|
|
|
|
UECONX = _BV(STALLRQ) | _BV(EPEN); // stall
|
|
|
|
|
return;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
UECONX = _BV(STALLRQ) | _BV(EPEN); // stall
|
|
|
|
|
d26: 81 e2 ldi r24, 0x21 ; 33
|
|
|
|
|
d28: 80 93 eb 00 sts 0x00EB, r24
|
|
|
|
|
d2c: 2d c0 rjmp .+90 ; 0xd88 <__vector_12+0x576>
|
|
|
|
|
d2e: 12 2f mov r17, r18
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// handle pending interrupts for other endpoints
|
|
|
|
|
for (i=1; i<=MAX_ENDPOINT; i++) {
|
|
|
|
|
if (UEINT & _BV(i)) {
|
|
|
|
|
d30: 80 81 ld r24, Z
|
|
|
|
|
d32: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
d34: 02 2e mov r0, r18
|
|
|
|
|
d36: 02 c0 rjmp .+4 ; 0xd3c <__vector_12+0x52a>
|
|
|
|
|
d38: 95 95 asr r25
|
|
|
|
|
d3a: 87 95 ror r24
|
|
|
|
|
d3c: 0a 94 dec r0
|
|
|
|
|
d3e: e2 f7 brpl .-8 ; 0xd38 <__vector_12+0x526>
|
|
|
|
|
d40: 80 ff sbrs r24, 0
|
|
|
|
|
d42: 19 c0 rjmp .+50 ; 0xd76 <__vector_12+0x564>
|
|
|
|
|
UENUM=i; // select endpoint
|
|
|
|
|
d44: da 01 movw r26, r20
|
|
|
|
|
d46: 2c 93 st X, r18
|
|
|
|
|
intbits = UEINTX; // save interrupt bits of the endpoint
|
|
|
|
|
d48: db 01 movw r26, r22
|
|
|
|
|
d4a: 8c 91 ld r24, X
|
|
|
|
|
if (intbits & _BV(RXOUTI)) { // interrupt occured by incoming data
|
|
|
|
|
d4c: 82 ff sbrs r24, 2
|
|
|
|
|
d4e: 13 c0 rjmp .+38 ; 0xd76 <__vector_12+0x564>
|
|
|
|
|
#ifdef MEGA4_6
|
|
|
|
|
if (((uint16_t)(UEBCHX)<<8)+UEBCLX) { // data available in input endpoint
|
|
|
|
|
usb_ep(i,((uint16_t)(UEBCHX)<<8)+UEBCLX);
|
|
|
|
|
#else
|
|
|
|
|
if (UEBCLX) { // data available in input endpoint
|
|
|
|
|
d50: 80 91 f2 00 lds r24, 0x00F2
|
|
|
|
|
d54: 88 23 and r24, r24
|
|
|
|
|
d56: 41 f0 breq .+16 ; 0xd68 <__vector_12+0x556>
|
|
|
|
|
usb_ep(i,UEBCLX);
|
|
|
|
|
d58: 60 91 f2 00 lds r22, 0x00F2
|
|
|
|
|
d5c: 70 e0 ldi r23, 0x00 ; 0
|
|
|
|
|
d5e: 82 2f mov r24, r18
|
|
|
|
|
d60: 0e 94 db 00 call 0x1b6 ; 0x1b6 <usb_ep>
|
|
|
|
|
#endif
|
|
|
|
|
UENUM=i; // reselect endpoint (if changed by handling routine)
|
|
|
|
|
d64: 10 93 e9 00 sts 0x00E9, r17
|
|
|
|
|
}
|
|
|
|
|
UEINTX = ~(_BV(RXOUTI)|_BV(STALLEDI)); // clear interrupt flags
|
|
|
|
|
d68: e8 ee ldi r30, 0xE8 ; 232
|
|
|
|
|
d6a: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
d6c: 89 ef ldi r24, 0xF9 ; 249
|
|
|
|
|
d6e: 80 83 st Z, r24
|
|
|
|
|
UEINTX = 0x7F; // free bank (FIFOCON), has to be executed after RXOUTI!
|
|
|
|
|
d70: 8f e7 ldi r24, 0x7F ; 127
|
|
|
|
|
d72: 80 83 st Z, r24
|
|
|
|
|
d74: 12 c0 rjmp .+36 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
d76: 2f 5f subi r18, 0xFF ; 255
|
|
|
|
|
d78: 3f 4f sbci r19, 0xFF ; 255
|
|
|
|
|
}
|
|
|
|
|
UECONX = _BV(STALLRQ) | _BV(EPEN); // stall
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// handle pending interrupts for other endpoints
|
|
|
|
|
for (i=1; i<=MAX_ENDPOINT; i++) {
|
|
|
|
|
d7a: 25 30 cpi r18, 0x05 ; 5
|
|
|
|
|
d7c: 31 05 cpc r19, r1
|
|
|
|
|
d7e: b9 f6 brne .-82 ; 0xd2e <__vector_12+0x51c>
|
|
|
|
|
UEINTX = 0x7F; // free bank (FIFOCON), has to be executed after RXOUTI!
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
STALL; // stall
|
|
|
|
|
d80: 81 e2 ldi r24, 0x21 ; 33
|
|
|
|
|
d82: 80 93 eb 00 sts 0x00EB, r24
|
|
|
|
|
d86: 09 c0 rjmp .+18 ; 0xd9a <__vector_12+0x588>
|
|
|
|
|
cdc_notify_setcontrollinestate();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ucr.bRequest == GET_STATUS) {
|
|
|
|
|
usb_wait_in_ready();
|
|
|
|
|
i = 0;
|
|
|
|
|
d88: 21 e0 ldi r18, 0x01 ; 1
|
|
|
|
|
d8a: 30 e0 ldi r19, 0x00 ; 0
|
|
|
|
|
UECONX = _BV(STALLRQ) | _BV(EPEN); // stall
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// handle pending interrupts for other endpoints
|
|
|
|
|
for (i=1; i<=MAX_ENDPOINT; i++) {
|
|
|
|
|
if (UEINT & _BV(i)) {
|
|
|
|
|
d8c: e4 ef ldi r30, 0xF4 ; 244
|
|
|
|
|
d8e: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
UENUM=i; // select endpoint
|
|
|
|
|
d90: 49 ee ldi r20, 0xE9 ; 233
|
|
|
|
|
d92: 50 e0 ldi r21, 0x00 ; 0
|
|
|
|
|
intbits = UEINTX; // save interrupt bits of the endpoint
|
|
|
|
|
d94: 68 ee ldi r22, 0xE8 ; 232
|
|
|
|
|
d96: 70 e0 ldi r23, 0x00 ; 0
|
|
|
|
|
d98: ca cf rjmp .-108 ; 0xd2e <__vector_12+0x51c>
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
STALL; // stall
|
|
|
|
|
}
|
|
|
|
|
d9a: 29 96 adiw r28, 0x09 ; 9
|
|
|
|
|
d9c: 0f b6 in r0, 0x3f ; 63
|
|
|
|
|
d9e: f8 94 cli
|
|
|
|
|
da0: de bf out 0x3e, r29 ; 62
|
|
|
|
|
da2: 0f be out 0x3f, r0 ; 63
|
|
|
|
|
da4: cd bf out 0x3d, r28 ; 61
|
|
|
|
|
da6: df 91 pop r29
|
|
|
|
|
da8: cf 91 pop r28
|
|
|
|
|
daa: ff 91 pop r31
|
|
|
|
|
dac: ef 91 pop r30
|
|
|
|
|
dae: bf 91 pop r27
|
|
|
|
|
db0: af 91 pop r26
|
|
|
|
|
db2: 9f 91 pop r25
|
|
|
|
|
db4: 8f 91 pop r24
|
|
|
|
|
db6: 7f 91 pop r23
|
|
|
|
|
db8: 6f 91 pop r22
|
|
|
|
|
dba: 5f 91 pop r21
|
|
|
|
|
dbc: 4f 91 pop r20
|
|
|
|
|
dbe: 3f 91 pop r19
|
|
|
|
|
dc0: 2f 91 pop r18
|
|
|
|
|
dc2: 1f 91 pop r17
|
|
|
|
|
dc4: 0f 91 pop r16
|
|
|
|
|
dc6: ff 90 pop r15
|
|
|
|
|
dc8: ef 90 pop r14
|
|
|
|
|
dca: df 90 pop r13
|
|
|
|
|
dcc: cf 90 pop r12
|
|
|
|
|
dce: bf 90 pop r11
|
|
|
|
|
dd0: af 90 pop r10
|
|
|
|
|
dd2: 9f 90 pop r9
|
|
|
|
|
dd4: 8f 90 pop r8
|
|
|
|
|
dd6: 7f 90 pop r7
|
|
|
|
|
dd8: 6f 90 pop r6
|
|
|
|
|
dda: 5f 90 pop r5
|
|
|
|
|
ddc: 4f 90 pop r4
|
|
|
|
|
dde: 3f 90 pop r3
|
|
|
|
|
de0: 2f 90 pop r2
|
|
|
|
|
de2: 0f 90 pop r0
|
|
|
|
|
de4: 0f be out 0x3f, r0 ; 63
|
|
|
|
|
de6: 0f 90 pop r0
|
|
|
|
|
de8: 1f 90 pop r1
|
|
|
|
|
dea: 18 95 reti
|
|
|
|
|
|
|
|
|
|
00000dec <malloc>:
|
|
|
|
|
dec: 0f 93 push r16
|
|
|
|
|
dee: 1f 93 push r17
|
|
|
|
|
df0: cf 93 push r28
|
|
|
|
|
df2: df 93 push r29
|
|
|
|
|
df4: 82 30 cpi r24, 0x02 ; 2
|
|
|
|
|
df6: 91 05 cpc r25, r1
|
|
|
|
|
df8: 10 f4 brcc .+4 ; 0xdfe <malloc+0x12>
|
|
|
|
|
dfa: 82 e0 ldi r24, 0x02 ; 2
|
|
|
|
|
dfc: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
dfe: e0 91 fe 01 lds r30, 0x01FE
|
|
|
|
|
e02: f0 91 ff 01 lds r31, 0x01FF
|
|
|
|
|
e06: 20 e0 ldi r18, 0x00 ; 0
|
|
|
|
|
e08: 30 e0 ldi r19, 0x00 ; 0
|
|
|
|
|
e0a: c0 e0 ldi r28, 0x00 ; 0
|
|
|
|
|
e0c: d0 e0 ldi r29, 0x00 ; 0
|
|
|
|
|
e0e: 23 c0 rjmp .+70 ; 0xe56 <malloc+0x6a>
|
|
|
|
|
e10: 40 81 ld r20, Z
|
|
|
|
|
e12: 51 81 ldd r21, Z+1 ; 0x01
|
|
|
|
|
e14: 48 17 cp r20, r24
|
|
|
|
|
e16: 59 07 cpc r21, r25
|
|
|
|
|
e18: a8 f0 brcs .+42 ; 0xe44 <malloc+0x58>
|
|
|
|
|
e1a: 48 17 cp r20, r24
|
|
|
|
|
e1c: 59 07 cpc r21, r25
|
|
|
|
|
e1e: 61 f4 brne .+24 ; 0xe38 <malloc+0x4c>
|
|
|
|
|
e20: 82 81 ldd r24, Z+2 ; 0x02
|
|
|
|
|
e22: 93 81 ldd r25, Z+3 ; 0x03
|
|
|
|
|
e24: 20 97 sbiw r28, 0x00 ; 0
|
|
|
|
|
e26: 19 f0 breq .+6 ; 0xe2e <malloc+0x42>
|
|
|
|
|
e28: 9b 83 std Y+3, r25 ; 0x03
|
|
|
|
|
e2a: 8a 83 std Y+2, r24 ; 0x02
|
|
|
|
|
e2c: 2e c0 rjmp .+92 ; 0xe8a <malloc+0x9e>
|
|
|
|
|
e2e: 90 93 ff 01 sts 0x01FF, r25
|
|
|
|
|
e32: 80 93 fe 01 sts 0x01FE, r24
|
|
|
|
|
e36: 29 c0 rjmp .+82 ; 0xe8a <malloc+0x9e>
|
|
|
|
|
e38: 21 15 cp r18, r1
|
|
|
|
|
e3a: 31 05 cpc r19, r1
|
|
|
|
|
e3c: 29 f0 breq .+10 ; 0xe48 <malloc+0x5c>
|
|
|
|
|
e3e: 42 17 cp r20, r18
|
|
|
|
|
e40: 53 07 cpc r21, r19
|
|
|
|
|
e42: 10 f0 brcs .+4 ; 0xe48 <malloc+0x5c>
|
|
|
|
|
e44: a9 01 movw r20, r18
|
|
|
|
|
e46: 02 c0 rjmp .+4 ; 0xe4c <malloc+0x60>
|
|
|
|
|
e48: be 01 movw r22, r28
|
|
|
|
|
e4a: df 01 movw r26, r30
|
|
|
|
|
e4c: 02 81 ldd r16, Z+2 ; 0x02
|
|
|
|
|
e4e: 13 81 ldd r17, Z+3 ; 0x03
|
|
|
|
|
e50: ef 01 movw r28, r30
|
|
|
|
|
e52: 9a 01 movw r18, r20
|
|
|
|
|
e54: f8 01 movw r30, r16
|
|
|
|
|
e56: 30 97 sbiw r30, 0x00 ; 0
|
|
|
|
|
e58: d9 f6 brne .-74 ; 0xe10 <malloc+0x24>
|
|
|
|
|
e5a: 21 15 cp r18, r1
|
|
|
|
|
e5c: 31 05 cpc r19, r1
|
|
|
|
|
e5e: 09 f1 breq .+66 ; 0xea2 <malloc+0xb6>
|
|
|
|
|
e60: 28 1b sub r18, r24
|
|
|
|
|
e62: 39 0b sbc r19, r25
|
|
|
|
|
e64: 24 30 cpi r18, 0x04 ; 4
|
|
|
|
|
e66: 31 05 cpc r19, r1
|
|
|
|
|
e68: 90 f4 brcc .+36 ; 0xe8e <malloc+0xa2>
|
|
|
|
|
e6a: 12 96 adiw r26, 0x02 ; 2
|
|
|
|
|
e6c: 8d 91 ld r24, X+
|
|
|
|
|
e6e: 9c 91 ld r25, X
|
|
|
|
|
e70: 13 97 sbiw r26, 0x03 ; 3
|
|
|
|
|
e72: 61 15 cp r22, r1
|
|
|
|
|
e74: 71 05 cpc r23, r1
|
|
|
|
|
e76: 21 f0 breq .+8 ; 0xe80 <malloc+0x94>
|
|
|
|
|
e78: fb 01 movw r30, r22
|
|
|
|
|
e7a: 93 83 std Z+3, r25 ; 0x03
|
|
|
|
|
e7c: 82 83 std Z+2, r24 ; 0x02
|
|
|
|
|
e7e: 04 c0 rjmp .+8 ; 0xe88 <malloc+0x9c>
|
|
|
|
|
e80: 90 93 ff 01 sts 0x01FF, r25
|
|
|
|
|
e84: 80 93 fe 01 sts 0x01FE, r24
|
|
|
|
|
e88: fd 01 movw r30, r26
|
|
|
|
|
e8a: 32 96 adiw r30, 0x02 ; 2
|
|
|
|
|
e8c: 44 c0 rjmp .+136 ; 0xf16 <malloc+0x12a>
|
|
|
|
|
e8e: fd 01 movw r30, r26
|
|
|
|
|
e90: e2 0f add r30, r18
|
|
|
|
|
e92: f3 1f adc r31, r19
|
|
|
|
|
e94: 81 93 st Z+, r24
|
|
|
|
|
e96: 91 93 st Z+, r25
|
|
|
|
|
e98: 22 50 subi r18, 0x02 ; 2
|
|
|
|
|
e9a: 31 09 sbc r19, r1
|
|
|
|
|
e9c: 2d 93 st X+, r18
|
|
|
|
|
e9e: 3c 93 st X, r19
|
|
|
|
|
ea0: 3a c0 rjmp .+116 ; 0xf16 <malloc+0x12a>
|
|
|
|
|
ea2: 20 91 fc 01 lds r18, 0x01FC
|
|
|
|
|
ea6: 30 91 fd 01 lds r19, 0x01FD
|
|
|
|
|
eaa: 23 2b or r18, r19
|
|
|
|
|
eac: 41 f4 brne .+16 ; 0xebe <malloc+0xd2>
|
|
|
|
|
eae: 20 91 28 01 lds r18, 0x0128
|
|
|
|
|
eb2: 30 91 29 01 lds r19, 0x0129
|
|
|
|
|
eb6: 30 93 fd 01 sts 0x01FD, r19
|
|
|
|
|
eba: 20 93 fc 01 sts 0x01FC, r18
|
|
|
|
|
ebe: 20 91 26 01 lds r18, 0x0126
|
|
|
|
|
ec2: 30 91 27 01 lds r19, 0x0127
|
|
|
|
|
ec6: 21 15 cp r18, r1
|
|
|
|
|
ec8: 31 05 cpc r19, r1
|
|
|
|
|
eca: 41 f4 brne .+16 ; 0xedc <malloc+0xf0>
|
|
|
|
|
ecc: 2d b7 in r18, 0x3d ; 61
|
|
|
|
|
ece: 3e b7 in r19, 0x3e ; 62
|
|
|
|
|
ed0: 40 91 2a 01 lds r20, 0x012A
|
|
|
|
|
ed4: 50 91 2b 01 lds r21, 0x012B
|
|
|
|
|
ed8: 24 1b sub r18, r20
|
|
|
|
|
eda: 35 0b sbc r19, r21
|
|
|
|
|
edc: e0 91 fc 01 lds r30, 0x01FC
|
|
|
|
|
ee0: f0 91 fd 01 lds r31, 0x01FD
|
|
|
|
|
ee4: e2 17 cp r30, r18
|
|
|
|
|
ee6: f3 07 cpc r31, r19
|
|
|
|
|
ee8: a0 f4 brcc .+40 ; 0xf12 <malloc+0x126>
|
|
|
|
|
eea: 2e 1b sub r18, r30
|
|
|
|
|
eec: 3f 0b sbc r19, r31
|
|
|
|
|
eee: 28 17 cp r18, r24
|
|
|
|
|
ef0: 39 07 cpc r19, r25
|
|
|
|
|
ef2: 78 f0 brcs .+30 ; 0xf12 <malloc+0x126>
|
|
|
|
|
ef4: ac 01 movw r20, r24
|
|
|
|
|
ef6: 4e 5f subi r20, 0xFE ; 254
|
|
|
|
|
ef8: 5f 4f sbci r21, 0xFF ; 255
|
|
|
|
|
efa: 24 17 cp r18, r20
|
|
|
|
|
efc: 35 07 cpc r19, r21
|
|
|
|
|
efe: 48 f0 brcs .+18 ; 0xf12 <malloc+0x126>
|
|
|
|
|
f00: 4e 0f add r20, r30
|
|
|
|
|
f02: 5f 1f adc r21, r31
|
|
|
|
|
f04: 50 93 fd 01 sts 0x01FD, r21
|
|
|
|
|
f08: 40 93 fc 01 sts 0x01FC, r20
|
|
|
|
|
f0c: 81 93 st Z+, r24
|
|
|
|
|
f0e: 91 93 st Z+, r25
|
|
|
|
|
f10: 02 c0 rjmp .+4 ; 0xf16 <malloc+0x12a>
|
|
|
|
|
f12: e0 e0 ldi r30, 0x00 ; 0
|
|
|
|
|
f14: f0 e0 ldi r31, 0x00 ; 0
|
|
|
|
|
f16: cf 01 movw r24, r30
|
|
|
|
|
f18: df 91 pop r29
|
|
|
|
|
f1a: cf 91 pop r28
|
|
|
|
|
f1c: 1f 91 pop r17
|
|
|
|
|
f1e: 0f 91 pop r16
|
|
|
|
|
f20: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00000f22 <free>:
|
|
|
|
|
f22: ef 92 push r14
|
|
|
|
|
f24: ff 92 push r15
|
|
|
|
|
f26: 0f 93 push r16
|
|
|
|
|
f28: 1f 93 push r17
|
|
|
|
|
f2a: cf 93 push r28
|
|
|
|
|
f2c: df 93 push r29
|
|
|
|
|
f2e: 00 97 sbiw r24, 0x00 ; 0
|
|
|
|
|
f30: 09 f4 brne .+2 ; 0xf34 <free+0x12>
|
|
|
|
|
f32: 8f c0 rjmp .+286 ; 0x1052 <free+0x130>
|
|
|
|
|
f34: dc 01 movw r26, r24
|
|
|
|
|
f36: 12 97 sbiw r26, 0x02 ; 2
|
|
|
|
|
f38: 13 96 adiw r26, 0x03 ; 3
|
|
|
|
|
f3a: 1c 92 st X, r1
|
|
|
|
|
f3c: 1e 92 st -X, r1
|
|
|
|
|
f3e: 12 97 sbiw r26, 0x02 ; 2
|
|
|
|
|
f40: e0 90 fe 01 lds r14, 0x01FE
|
|
|
|
|
f44: f0 90 ff 01 lds r15, 0x01FF
|
|
|
|
|
f48: e1 14 cp r14, r1
|
|
|
|
|
f4a: f1 04 cpc r15, r1
|
|
|
|
|
f4c: 89 f4 brne .+34 ; 0xf70 <free+0x4e>
|
|
|
|
|
f4e: 2d 91 ld r18, X+
|
|
|
|
|
f50: 3c 91 ld r19, X
|
|
|
|
|
f52: 11 97 sbiw r26, 0x01 ; 1
|
|
|
|
|
f54: 28 0f add r18, r24
|
|
|
|
|
f56: 39 1f adc r19, r25
|
|
|
|
|
f58: 80 91 fc 01 lds r24, 0x01FC
|
|
|
|
|
f5c: 90 91 fd 01 lds r25, 0x01FD
|
|
|
|
|
f60: 82 17 cp r24, r18
|
|
|
|
|
f62: 93 07 cpc r25, r19
|
|
|
|
|
f64: 89 f5 brne .+98 ; 0xfc8 <free+0xa6>
|
|
|
|
|
f66: b0 93 fd 01 sts 0x01FD, r27
|
|
|
|
|
f6a: a0 93 fc 01 sts 0x01FC, r26
|
|
|
|
|
f6e: 71 c0 rjmp .+226 ; 0x1052 <free+0x130>
|
|
|
|
|
f70: e7 01 movw r28, r14
|
|
|
|
|
f72: 20 e0 ldi r18, 0x00 ; 0
|
|
|
|
|
f74: 30 e0 ldi r19, 0x00 ; 0
|
|
|
|
|
f76: 01 c0 rjmp .+2 ; 0xf7a <free+0x58>
|
|
|
|
|
f78: ea 01 movw r28, r20
|
|
|
|
|
f7a: ca 17 cp r28, r26
|
|
|
|
|
f7c: db 07 cpc r29, r27
|
|
|
|
|
f7e: 38 f4 brcc .+14 ; 0xf8e <free+0x6c>
|
|
|
|
|
f80: 4a 81 ldd r20, Y+2 ; 0x02
|
|
|
|
|
f82: 5b 81 ldd r21, Y+3 ; 0x03
|
|
|
|
|
f84: 9e 01 movw r18, r28
|
|
|
|
|
f86: 41 15 cp r20, r1
|
|
|
|
|
f88: 51 05 cpc r21, r1
|
|
|
|
|
f8a: b1 f7 brne .-20 ; 0xf78 <free+0x56>
|
|
|
|
|
f8c: 22 c0 rjmp .+68 ; 0xfd2 <free+0xb0>
|
|
|
|
|
f8e: bc 01 movw r22, r24
|
|
|
|
|
f90: 62 50 subi r22, 0x02 ; 2
|
|
|
|
|
f92: 71 09 sbc r23, r1
|
|
|
|
|
f94: fb 01 movw r30, r22
|
|
|
|
|
f96: d3 83 std Z+3, r29 ; 0x03
|
|
|
|
|
f98: c2 83 std Z+2, r28 ; 0x02
|
|
|
|
|
f9a: 00 81 ld r16, Z
|
|
|
|
|
f9c: 11 81 ldd r17, Z+1 ; 0x01
|
|
|
|
|
f9e: ac 01 movw r20, r24
|
|
|
|
|
fa0: 40 0f add r20, r16
|
|
|
|
|
fa2: 51 1f adc r21, r17
|
|
|
|
|
fa4: 4c 17 cp r20, r28
|
|
|
|
|
fa6: 5d 07 cpc r21, r29
|
|
|
|
|
fa8: 61 f4 brne .+24 ; 0xfc2 <free+0xa0>
|
|
|
|
|
faa: 48 81 ld r20, Y
|
|
|
|
|
fac: 59 81 ldd r21, Y+1 ; 0x01
|
|
|
|
|
fae: 40 0f add r20, r16
|
|
|
|
|
fb0: 51 1f adc r21, r17
|
|
|
|
|
fb2: 4e 5f subi r20, 0xFE ; 254
|
|
|
|
|
fb4: 5f 4f sbci r21, 0xFF ; 255
|
|
|
|
|
fb6: 51 83 std Z+1, r21 ; 0x01
|
|
|
|
|
fb8: 40 83 st Z, r20
|
|
|
|
|
fba: 4a 81 ldd r20, Y+2 ; 0x02
|
|
|
|
|
fbc: 5b 81 ldd r21, Y+3 ; 0x03
|
|
|
|
|
fbe: 53 83 std Z+3, r21 ; 0x03
|
|
|
|
|
fc0: 42 83 std Z+2, r20 ; 0x02
|
|
|
|
|
fc2: 21 15 cp r18, r1
|
|
|
|
|
fc4: 31 05 cpc r19, r1
|
|
|
|
|
fc6: 29 f4 brne .+10 ; 0xfd2 <free+0xb0>
|
|
|
|
|
fc8: b0 93 ff 01 sts 0x01FF, r27
|
|
|
|
|
fcc: a0 93 fe 01 sts 0x01FE, r26
|
|
|
|
|
fd0: 40 c0 rjmp .+128 ; 0x1052 <free+0x130>
|
|
|
|
|
fd2: f9 01 movw r30, r18
|
|
|
|
|
fd4: b3 83 std Z+3, r27 ; 0x03
|
|
|
|
|
fd6: a2 83 std Z+2, r26 ; 0x02
|
|
|
|
|
fd8: e9 01 movw r28, r18
|
|
|
|
|
fda: 69 91 ld r22, Y+
|
|
|
|
|
fdc: 79 91 ld r23, Y+
|
|
|
|
|
fde: c6 0f add r28, r22
|
|
|
|
|
fe0: d7 1f adc r29, r23
|
|
|
|
|
fe2: ac 17 cp r26, r28
|
|
|
|
|
fe4: bd 07 cpc r27, r29
|
|
|
|
|
fe6: 79 f4 brne .+30 ; 0x1006 <free+0xe4>
|
|
|
|
|
fe8: dc 01 movw r26, r24
|
|
|
|
|
fea: 5e 91 ld r21, -X
|
|
|
|
|
fec: 4e 91 ld r20, -X
|
|
|
|
|
fee: 46 0f add r20, r22
|
|
|
|
|
ff0: 57 1f adc r21, r23
|
|
|
|
|
ff2: 4e 5f subi r20, 0xFE ; 254
|
|
|
|
|
ff4: 5f 4f sbci r21, 0xFF ; 255
|
|
|
|
|
ff6: 51 83 std Z+1, r21 ; 0x01
|
|
|
|
|
ff8: 40 83 st Z, r20
|
|
|
|
|
ffa: 12 96 adiw r26, 0x02 ; 2
|
|
|
|
|
ffc: 8d 91 ld r24, X+
|
|
|
|
|
ffe: 9c 91 ld r25, X
|
|
|
|
|
1000: 13 97 sbiw r26, 0x03 ; 3
|
|
|
|
|
1002: 93 83 std Z+3, r25 ; 0x03
|
|
|
|
|
1004: 82 83 std Z+2, r24 ; 0x02
|
|
|
|
|
1006: a0 e0 ldi r26, 0x00 ; 0
|
|
|
|
|
1008: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
100a: 02 c0 rjmp .+4 ; 0x1010 <free+0xee>
|
|
|
|
|
100c: d7 01 movw r26, r14
|
|
|
|
|
100e: 7c 01 movw r14, r24
|
|
|
|
|
1010: f7 01 movw r30, r14
|
|
|
|
|
1012: 82 81 ldd r24, Z+2 ; 0x02
|
|
|
|
|
1014: 93 81 ldd r25, Z+3 ; 0x03
|
|
|
|
|
1016: 00 97 sbiw r24, 0x00 ; 0
|
|
|
|
|
1018: c9 f7 brne .-14 ; 0x100c <free+0xea>
|
|
|
|
|
101a: c7 01 movw r24, r14
|
|
|
|
|
101c: 02 96 adiw r24, 0x02 ; 2
|
|
|
|
|
101e: 20 81 ld r18, Z
|
|
|
|
|
1020: 31 81 ldd r19, Z+1 ; 0x01
|
|
|
|
|
1022: 82 0f add r24, r18
|
|
|
|
|
1024: 93 1f adc r25, r19
|
|
|
|
|
1026: 20 91 fc 01 lds r18, 0x01FC
|
|
|
|
|
102a: 30 91 fd 01 lds r19, 0x01FD
|
|
|
|
|
102e: 28 17 cp r18, r24
|
|
|
|
|
1030: 39 07 cpc r19, r25
|
|
|
|
|
1032: 79 f4 brne .+30 ; 0x1052 <free+0x130>
|
|
|
|
|
1034: 10 97 sbiw r26, 0x00 ; 0
|
|
|
|
|
1036: 29 f4 brne .+10 ; 0x1042 <free+0x120>
|
|
|
|
|
1038: 10 92 ff 01 sts 0x01FF, r1
|
|
|
|
|
103c: 10 92 fe 01 sts 0x01FE, r1
|
|
|
|
|
1040: 04 c0 rjmp .+8 ; 0x104a <free+0x128>
|
|
|
|
|
1042: 13 96 adiw r26, 0x03 ; 3
|
|
|
|
|
1044: 1c 92 st X, r1
|
|
|
|
|
1046: 1e 92 st -X, r1
|
|
|
|
|
1048: 12 97 sbiw r26, 0x02 ; 2
|
|
|
|
|
104a: f0 92 fd 01 sts 0x01FD, r15
|
|
|
|
|
104e: e0 92 fc 01 sts 0x01FC, r14
|
|
|
|
|
1052: cd b7 in r28, 0x3d ; 61
|
|
|
|
|
1054: de b7 in r29, 0x3e ; 62
|
|
|
|
|
1056: e6 e0 ldi r30, 0x06 ; 6
|
|
|
|
|
1058: 0c 94 ea 0b jmp 0x17d4 ; 0x17d4 <__epilogue_restores__+0x18>
|
|
|
|
|
|
|
|
|
|
0000105c <strcat>:
|
|
|
|
|
105c: fb 01 movw r30, r22
|
|
|
|
|
105e: dc 01 movw r26, r24
|
|
|
|
|
1060: 0d 90 ld r0, X+
|
|
|
|
|
1062: 00 20 and r0, r0
|
|
|
|
|
1064: e9 f7 brne .-6 ; 0x1060 <strcat+0x4>
|
|
|
|
|
1066: 11 97 sbiw r26, 0x01 ; 1
|
|
|
|
|
1068: 01 90 ld r0, Z+
|
|
|
|
|
106a: 0d 92 st X+, r0
|
|
|
|
|
106c: 00 20 and r0, r0
|
|
|
|
|
106e: e1 f7 brne .-8 ; 0x1068 <strcat+0xc>
|
|
|
|
|
1070: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00001072 <itoa>:
|
|
|
|
|
1072: fb 01 movw r30, r22
|
|
|
|
|
1074: 9f 01 movw r18, r30
|
|
|
|
|
1076: e8 94 clt
|
|
|
|
|
1078: 42 30 cpi r20, 0x02 ; 2
|
|
|
|
|
107a: c4 f0 brlt .+48 ; 0x10ac <itoa+0x3a>
|
|
|
|
|
107c: 45 32 cpi r20, 0x25 ; 37
|
|
|
|
|
107e: b4 f4 brge .+44 ; 0x10ac <itoa+0x3a>
|
|
|
|
|
1080: 4a 30 cpi r20, 0x0A ; 10
|
|
|
|
|
1082: 29 f4 brne .+10 ; 0x108e <itoa+0x1c>
|
|
|
|
|
1084: 97 fb bst r25, 7
|
|
|
|
|
1086: 1e f4 brtc .+6 ; 0x108e <itoa+0x1c>
|
|
|
|
|
1088: 90 95 com r25
|
|
|
|
|
108a: 81 95 neg r24
|
|
|
|
|
108c: 9f 4f sbci r25, 0xFF ; 255
|
|
|
|
|
108e: 64 2f mov r22, r20
|
|
|
|
|
1090: 77 27 eor r23, r23
|
|
|
|
|
1092: 0e 94 8c 0b call 0x1718 ; 0x1718 <__udivmodhi4>
|
|
|
|
|
1096: 80 5d subi r24, 0xD0 ; 208
|
|
|
|
|
1098: 8a 33 cpi r24, 0x3A ; 58
|
|
|
|
|
109a: 0c f0 brlt .+2 ; 0x109e <itoa+0x2c>
|
|
|
|
|
109c: 89 5d subi r24, 0xD9 ; 217
|
|
|
|
|
109e: 81 93 st Z+, r24
|
|
|
|
|
10a0: cb 01 movw r24, r22
|
|
|
|
|
10a2: 00 97 sbiw r24, 0x00 ; 0
|
|
|
|
|
10a4: a1 f7 brne .-24 ; 0x108e <itoa+0x1c>
|
|
|
|
|
10a6: 16 f4 brtc .+4 ; 0x10ac <itoa+0x3a>
|
|
|
|
|
10a8: 5d e2 ldi r21, 0x2D ; 45
|
|
|
|
|
10aa: 51 93 st Z+, r21
|
|
|
|
|
10ac: 10 82 st Z, r1
|
|
|
|
|
10ae: c9 01 movw r24, r18
|
|
|
|
|
10b0: 0c 94 e7 0a jmp 0x15ce ; 0x15ce <strrev>
|
|
|
|
|
|
|
|
|
|
000010b4 <ltoa>:
|
|
|
|
|
10b4: fa 01 movw r30, r20
|
|
|
|
|
10b6: cf 93 push r28
|
|
|
|
|
10b8: ff 93 push r31
|
|
|
|
|
10ba: ef 93 push r30
|
|
|
|
|
10bc: 22 30 cpi r18, 0x02 ; 2
|
|
|
|
|
10be: 44 f1 brlt .+80 ; 0x1110 <ltoa+0x5c>
|
|
|
|
|
10c0: 25 32 cpi r18, 0x25 ; 37
|
|
|
|
|
10c2: 34 f5 brge .+76 ; 0x1110 <ltoa+0x5c>
|
|
|
|
|
10c4: c2 2f mov r28, r18
|
|
|
|
|
10c6: e8 94 clt
|
|
|
|
|
10c8: ca 30 cpi r28, 0x0A ; 10
|
|
|
|
|
10ca: 49 f4 brne .+18 ; 0x10de <ltoa+0x2a>
|
|
|
|
|
10cc: 97 fb bst r25, 7
|
|
|
|
|
10ce: 3e f4 brtc .+14 ; 0x10de <ltoa+0x2a>
|
|
|
|
|
10d0: 90 95 com r25
|
|
|
|
|
10d2: 80 95 com r24
|
|
|
|
|
10d4: 70 95 com r23
|
|
|
|
|
10d6: 61 95 neg r22
|
|
|
|
|
10d8: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
10da: 8f 4f sbci r24, 0xFF ; 255
|
|
|
|
|
10dc: 9f 4f sbci r25, 0xFF ; 255
|
|
|
|
|
10de: 2c 2f mov r18, r28
|
|
|
|
|
10e0: 33 27 eor r19, r19
|
|
|
|
|
10e2: 44 27 eor r20, r20
|
|
|
|
|
10e4: 55 27 eor r21, r21
|
|
|
|
|
10e6: ff 93 push r31
|
|
|
|
|
10e8: ef 93 push r30
|
|
|
|
|
10ea: 0e 94 a0 0b call 0x1740 ; 0x1740 <__udivmodsi4>
|
|
|
|
|
10ee: ef 91 pop r30
|
|
|
|
|
10f0: ff 91 pop r31
|
|
|
|
|
10f2: 60 5d subi r22, 0xD0 ; 208
|
|
|
|
|
10f4: 6a 33 cpi r22, 0x3A ; 58
|
|
|
|
|
10f6: 0c f0 brlt .+2 ; 0x10fa <ltoa+0x46>
|
|
|
|
|
10f8: 69 5d subi r22, 0xD9 ; 217
|
|
|
|
|
10fa: 61 93 st Z+, r22
|
|
|
|
|
10fc: b9 01 movw r22, r18
|
|
|
|
|
10fe: ca 01 movw r24, r20
|
|
|
|
|
1100: 60 50 subi r22, 0x00 ; 0
|
|
|
|
|
1102: 70 40 sbci r23, 0x00 ; 0
|
|
|
|
|
1104: 80 40 sbci r24, 0x00 ; 0
|
|
|
|
|
1106: 90 40 sbci r25, 0x00 ; 0
|
|
|
|
|
1108: 51 f7 brne .-44 ; 0x10de <ltoa+0x2a>
|
|
|
|
|
110a: 16 f4 brtc .+4 ; 0x1110 <ltoa+0x5c>
|
|
|
|
|
110c: cd e2 ldi r28, 0x2D ; 45
|
|
|
|
|
110e: c1 93 st Z+, r28
|
|
|
|
|
1110: 10 82 st Z, r1
|
|
|
|
|
1112: 8f 91 pop r24
|
|
|
|
|
1114: 9f 91 pop r25
|
|
|
|
|
1116: cf 91 pop r28
|
|
|
|
|
1118: 0c 94 e7 0a jmp 0x15ce ; 0x15ce <strrev>
|
|
|
|
|
|
|
|
|
|
0000111c <fprintf>:
|
|
|
|
|
111c: a0 e0 ldi r26, 0x00 ; 0
|
|
|
|
|
111e: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
1120: e4 e9 ldi r30, 0x94 ; 148
|
|
|
|
|
1122: f8 e0 ldi r31, 0x08 ; 8
|
|
|
|
|
1124: 0c 94 d2 0b jmp 0x17a4 ; 0x17a4 <__prologue_saves__+0x20>
|
|
|
|
|
1128: ce 01 movw r24, r28
|
|
|
|
|
112a: 09 96 adiw r24, 0x09 ; 9
|
|
|
|
|
112c: ac 01 movw r20, r24
|
|
|
|
|
112e: 6f 81 ldd r22, Y+7 ; 0x07
|
|
|
|
|
1130: 78 85 ldd r23, Y+8 ; 0x08
|
|
|
|
|
1132: 8d 81 ldd r24, Y+5 ; 0x05
|
|
|
|
|
1134: 9e 81 ldd r25, Y+6 ; 0x06
|
|
|
|
|
1136: 0e 94 f3 08 call 0x11e6 ; 0x11e6 <vfprintf>
|
|
|
|
|
113a: e2 e0 ldi r30, 0x02 ; 2
|
|
|
|
|
113c: 0c 94 ee 0b jmp 0x17dc ; 0x17dc <__epilogue_restores__+0x20>
|
|
|
|
|
|
|
|
|
|
00001140 <fwrite>:
|
|
|
|
|
1140: a0 e0 ldi r26, 0x00 ; 0
|
|
|
|
|
1142: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
1144: e6 ea ldi r30, 0xA6 ; 166
|
|
|
|
|
1146: f8 e0 ldi r31, 0x08 ; 8
|
|
|
|
|
1148: 0c 94 c8 0b jmp 0x1790 ; 0x1790 <__prologue_saves__+0xc>
|
|
|
|
|
114c: 6b 01 movw r12, r22
|
|
|
|
|
114e: 4a 01 movw r8, r20
|
|
|
|
|
1150: 79 01 movw r14, r18
|
|
|
|
|
1152: d9 01 movw r26, r18
|
|
|
|
|
1154: 13 96 adiw r26, 0x03 ; 3
|
|
|
|
|
1156: 2c 91 ld r18, X
|
|
|
|
|
1158: 21 ff sbrs r18, 1
|
|
|
|
|
115a: 1b c0 rjmp .+54 ; 0x1192 <fwrite+0x52>
|
|
|
|
|
115c: 8c 01 movw r16, r24
|
|
|
|
|
115e: c0 e0 ldi r28, 0x00 ; 0
|
|
|
|
|
1160: d0 e0 ldi r29, 0x00 ; 0
|
|
|
|
|
1162: 10 c0 rjmp .+32 ; 0x1184 <fwrite+0x44>
|
|
|
|
|
1164: d7 01 movw r26, r14
|
|
|
|
|
1166: 18 96 adiw r26, 0x08 ; 8
|
|
|
|
|
1168: ed 91 ld r30, X+
|
|
|
|
|
116a: fc 91 ld r31, X
|
|
|
|
|
116c: 19 97 sbiw r26, 0x09 ; 9
|
|
|
|
|
116e: b7 01 movw r22, r14
|
|
|
|
|
1170: d8 01 movw r26, r16
|
|
|
|
|
1172: 8d 91 ld r24, X+
|
|
|
|
|
1174: 8d 01 movw r16, r26
|
|
|
|
|
1176: 09 95 icall
|
|
|
|
|
1178: 89 2b or r24, r25
|
|
|
|
|
117a: 69 f4 brne .+26 ; 0x1196 <fwrite+0x56>
|
|
|
|
|
117c: 0a 15 cp r16, r10
|
|
|
|
|
117e: 1b 05 cpc r17, r11
|
|
|
|
|
1180: 89 f7 brne .-30 ; 0x1164 <fwrite+0x24>
|
|
|
|
|
1182: 21 96 adiw r28, 0x01 ; 1
|
|
|
|
|
1184: c8 15 cp r28, r8
|
|
|
|
|
1186: d9 05 cpc r29, r9
|
|
|
|
|
1188: 31 f0 breq .+12 ; 0x1196 <fwrite+0x56>
|
|
|
|
|
118a: 58 01 movw r10, r16
|
|
|
|
|
118c: ac 0c add r10, r12
|
|
|
|
|
118e: bd 1c adc r11, r13
|
|
|
|
|
1190: f5 cf rjmp .-22 ; 0x117c <fwrite+0x3c>
|
|
|
|
|
1192: c0 e0 ldi r28, 0x00 ; 0
|
|
|
|
|
1194: d0 e0 ldi r29, 0x00 ; 0
|
|
|
|
|
1196: ce 01 movw r24, r28
|
|
|
|
|
1198: cd b7 in r28, 0x3d ; 61
|
|
|
|
|
119a: de b7 in r29, 0x3e ; 62
|
|
|
|
|
119c: ec e0 ldi r30, 0x0C ; 12
|
|
|
|
|
119e: 0c 94 e4 0b jmp 0x17c8 ; 0x17c8 <__epilogue_restores__+0xc>
|
|
|
|
|
|
|
|
|
|
000011a2 <sprintf>:
|
|
|
|
|
11a2: ae e0 ldi r26, 0x0E ; 14
|
|
|
|
|
11a4: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
11a6: e7 ed ldi r30, 0xD7 ; 215
|
|
|
|
|
11a8: f8 e0 ldi r31, 0x08 ; 8
|
|
|
|
|
11aa: 0c 94 d0 0b jmp 0x17a0 ; 0x17a0 <__prologue_saves__+0x1c>
|
|
|
|
|
11ae: 0d 89 ldd r16, Y+21 ; 0x15
|
|
|
|
|
11b0: 1e 89 ldd r17, Y+22 ; 0x16
|
|
|
|
|
11b2: 86 e0 ldi r24, 0x06 ; 6
|
|
|
|
|
11b4: 8c 83 std Y+4, r24 ; 0x04
|
|
|
|
|
11b6: 1a 83 std Y+2, r17 ; 0x02
|
|
|
|
|
11b8: 09 83 std Y+1, r16 ; 0x01
|
|
|
|
|
11ba: 8f ef ldi r24, 0xFF ; 255
|
|
|
|
|
11bc: 9f e7 ldi r25, 0x7F ; 127
|
|
|
|
|
11be: 9e 83 std Y+6, r25 ; 0x06
|
|
|
|
|
11c0: 8d 83 std Y+5, r24 ; 0x05
|
|
|
|
|
11c2: ce 01 movw r24, r28
|
|
|
|
|
11c4: 49 96 adiw r24, 0x19 ; 25
|
|
|
|
|
11c6: ac 01 movw r20, r24
|
|
|
|
|
11c8: 6f 89 ldd r22, Y+23 ; 0x17
|
|
|
|
|
11ca: 78 8d ldd r23, Y+24 ; 0x18
|
|
|
|
|
11cc: ce 01 movw r24, r28
|
|
|
|
|
11ce: 01 96 adiw r24, 0x01 ; 1
|
|
|
|
|
11d0: 0e 94 f3 08 call 0x11e6 ; 0x11e6 <vfprintf>
|
|
|
|
|
11d4: ef 81 ldd r30, Y+7 ; 0x07
|
|
|
|
|
11d6: f8 85 ldd r31, Y+8 ; 0x08
|
|
|
|
|
11d8: e0 0f add r30, r16
|
|
|
|
|
11da: f1 1f adc r31, r17
|
|
|
|
|
11dc: 10 82 st Z, r1
|
|
|
|
|
11de: 2e 96 adiw r28, 0x0e ; 14
|
|
|
|
|
11e0: e4 e0 ldi r30, 0x04 ; 4
|
|
|
|
|
11e2: 0c 94 ec 0b jmp 0x17d8 ; 0x17d8 <__epilogue_restores__+0x1c>
|
|
|
|
|
|
|
|
|
|
000011e6 <vfprintf>:
|
|
|
|
|
11e6: ac e0 ldi r26, 0x0C ; 12
|
|
|
|
|
11e8: b0 e0 ldi r27, 0x00 ; 0
|
|
|
|
|
11ea: e9 ef ldi r30, 0xF9 ; 249
|
|
|
|
|
11ec: f8 e0 ldi r31, 0x08 ; 8
|
|
|
|
|
11ee: 0c 94 c2 0b jmp 0x1784 ; 0x1784 <__prologue_saves__>
|
|
|
|
|
11f2: 7c 01 movw r14, r24
|
|
|
|
|
11f4: 6b 01 movw r12, r22
|
|
|
|
|
11f6: 8a 01 movw r16, r20
|
|
|
|
|
11f8: fc 01 movw r30, r24
|
|
|
|
|
11fa: 17 82 std Z+7, r1 ; 0x07
|
|
|
|
|
11fc: 16 82 std Z+6, r1 ; 0x06
|
|
|
|
|
11fe: 83 81 ldd r24, Z+3 ; 0x03
|
|
|
|
|
1200: 81 ff sbrs r24, 1
|
|
|
|
|
1202: c8 c1 rjmp .+912 ; 0x1594 <vfprintf+0x3ae>
|
|
|
|
|
1204: 88 24 eor r8, r8
|
|
|
|
|
1206: 83 94 inc r8
|
|
|
|
|
1208: 91 2c mov r9, r1
|
|
|
|
|
120a: 8c 0e add r8, r28
|
|
|
|
|
120c: 9d 1e adc r9, r29
|
|
|
|
|
120e: f7 01 movw r30, r14
|
|
|
|
|
1210: 93 81 ldd r25, Z+3 ; 0x03
|
|
|
|
|
1212: f6 01 movw r30, r12
|
|
|
|
|
1214: 93 fd sbrc r25, 3
|
|
|
|
|
1216: 85 91 lpm r24, Z+
|
|
|
|
|
1218: 93 ff sbrs r25, 3
|
|
|
|
|
121a: 81 91 ld r24, Z+
|
|
|
|
|
121c: 6f 01 movw r12, r30
|
|
|
|
|
121e: 88 23 and r24, r24
|
|
|
|
|
1220: 09 f4 brne .+2 ; 0x1224 <vfprintf+0x3e>
|
|
|
|
|
1222: b4 c1 rjmp .+872 ; 0x158c <vfprintf+0x3a6>
|
|
|
|
|
1224: 85 32 cpi r24, 0x25 ; 37
|
|
|
|
|
1226: 39 f4 brne .+14 ; 0x1236 <vfprintf+0x50>
|
|
|
|
|
1228: 93 fd sbrc r25, 3
|
|
|
|
|
122a: 85 91 lpm r24, Z+
|
|
|
|
|
122c: 93 ff sbrs r25, 3
|
|
|
|
|
122e: 81 91 ld r24, Z+
|
|
|
|
|
1230: 6f 01 movw r12, r30
|
|
|
|
|
1232: 85 32 cpi r24, 0x25 ; 37
|
|
|
|
|
1234: 29 f4 brne .+10 ; 0x1240 <vfprintf+0x5a>
|
|
|
|
|
1236: b7 01 movw r22, r14
|
|
|
|
|
1238: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
123a: 0e 94 f7 0a call 0x15ee ; 0x15ee <fputc>
|
|
|
|
|
123e: e7 cf rjmp .-50 ; 0x120e <vfprintf+0x28>
|
|
|
|
|
1240: 51 2c mov r5, r1
|
|
|
|
|
1242: 31 2c mov r3, r1
|
|
|
|
|
1244: 20 e0 ldi r18, 0x00 ; 0
|
|
|
|
|
1246: 20 32 cpi r18, 0x20 ; 32
|
|
|
|
|
1248: a8 f4 brcc .+42 ; 0x1274 <vfprintf+0x8e>
|
|
|
|
|
124a: 8b 32 cpi r24, 0x2B ; 43
|
|
|
|
|
124c: 61 f0 breq .+24 ; 0x1266 <vfprintf+0x80>
|
|
|
|
|
124e: 28 f4 brcc .+10 ; 0x125a <vfprintf+0x74>
|
|
|
|
|
1250: 80 32 cpi r24, 0x20 ; 32
|
|
|
|
|
1252: 51 f0 breq .+20 ; 0x1268 <vfprintf+0x82>
|
|
|
|
|
1254: 83 32 cpi r24, 0x23 ; 35
|
|
|
|
|
1256: 71 f4 brne .+28 ; 0x1274 <vfprintf+0x8e>
|
|
|
|
|
1258: 0b c0 rjmp .+22 ; 0x1270 <vfprintf+0x8a>
|
|
|
|
|
125a: 8d 32 cpi r24, 0x2D ; 45
|
|
|
|
|
125c: 39 f0 breq .+14 ; 0x126c <vfprintf+0x86>
|
|
|
|
|
125e: 80 33 cpi r24, 0x30 ; 48
|
|
|
|
|
1260: 49 f4 brne .+18 ; 0x1274 <vfprintf+0x8e>
|
|
|
|
|
1262: 21 60 ori r18, 0x01 ; 1
|
|
|
|
|
1264: 2a c0 rjmp .+84 ; 0x12ba <vfprintf+0xd4>
|
|
|
|
|
1266: 22 60 ori r18, 0x02 ; 2
|
|
|
|
|
1268: 24 60 ori r18, 0x04 ; 4
|
|
|
|
|
126a: 27 c0 rjmp .+78 ; 0x12ba <vfprintf+0xd4>
|
|
|
|
|
126c: 28 60 ori r18, 0x08 ; 8
|
|
|
|
|
126e: 25 c0 rjmp .+74 ; 0x12ba <vfprintf+0xd4>
|
|
|
|
|
1270: 20 61 ori r18, 0x10 ; 16
|
|
|
|
|
1272: 23 c0 rjmp .+70 ; 0x12ba <vfprintf+0xd4>
|
|
|
|
|
1274: 27 fd sbrc r18, 7
|
|
|
|
|
1276: 29 c0 rjmp .+82 ; 0x12ca <vfprintf+0xe4>
|
|
|
|
|
1278: 38 2f mov r19, r24
|
|
|
|
|
127a: 30 53 subi r19, 0x30 ; 48
|
|
|
|
|
127c: 3a 30 cpi r19, 0x0A ; 10
|
|
|
|
|
127e: 88 f4 brcc .+34 ; 0x12a2 <vfprintf+0xbc>
|
|
|
|
|
1280: 26 ff sbrs r18, 6
|
|
|
|
|
1282: 07 c0 rjmp .+14 ; 0x1292 <vfprintf+0xac>
|
|
|
|
|
1284: 85 2d mov r24, r5
|
|
|
|
|
1286: 6a e0 ldi r22, 0x0A ; 10
|
|
|
|
|
1288: 0e 94 83 0b call 0x1706 ; 0x1706 <__mulqi3>
|
|
|
|
|
128c: 58 2e mov r5, r24
|
|
|
|
|
128e: 53 0e add r5, r19
|
|
|
|
|
1290: 14 c0 rjmp .+40 ; 0x12ba <vfprintf+0xd4>
|
|
|
|
|
1292: 83 2d mov r24, r3
|
|
|
|
|
1294: 6a e0 ldi r22, 0x0A ; 10
|
|
|
|
|
1296: 0e 94 83 0b call 0x1706 ; 0x1706 <__mulqi3>
|
|
|
|
|
129a: 38 2e mov r3, r24
|
|
|
|
|
129c: 33 0e add r3, r19
|
|
|
|
|
129e: 20 62 ori r18, 0x20 ; 32
|
|
|
|
|
12a0: 0c c0 rjmp .+24 ; 0x12ba <vfprintf+0xd4>
|
|
|
|
|
12a2: 8e 32 cpi r24, 0x2E ; 46
|
|
|
|
|
12a4: 21 f4 brne .+8 ; 0x12ae <vfprintf+0xc8>
|
|
|
|
|
12a6: 26 fd sbrc r18, 6
|
|
|
|
|
12a8: 71 c1 rjmp .+738 ; 0x158c <vfprintf+0x3a6>
|
|
|
|
|
12aa: 20 64 ori r18, 0x40 ; 64
|
|
|
|
|
12ac: 06 c0 rjmp .+12 ; 0x12ba <vfprintf+0xd4>
|
|
|
|
|
12ae: 8c 36 cpi r24, 0x6C ; 108
|
|
|
|
|
12b0: 11 f4 brne .+4 ; 0x12b6 <vfprintf+0xd0>
|
|
|
|
|
12b2: 20 68 ori r18, 0x80 ; 128
|
|
|
|
|
12b4: 02 c0 rjmp .+4 ; 0x12ba <vfprintf+0xd4>
|
|
|
|
|
12b6: 88 36 cpi r24, 0x68 ; 104
|
|
|
|
|
12b8: 41 f4 brne .+16 ; 0x12ca <vfprintf+0xe4>
|
|
|
|
|
12ba: f6 01 movw r30, r12
|
|
|
|
|
12bc: 93 fd sbrc r25, 3
|
|
|
|
|
12be: 85 91 lpm r24, Z+
|
|
|
|
|
12c0: 93 ff sbrs r25, 3
|
|
|
|
|
12c2: 81 91 ld r24, Z+
|
|
|
|
|
12c4: 6f 01 movw r12, r30
|
|
|
|
|
12c6: 81 11 cpse r24, r1
|
|
|
|
|
12c8: be cf rjmp .-132 ; 0x1246 <vfprintf+0x60>
|
|
|
|
|
12ca: 98 2f mov r25, r24
|
|
|
|
|
12cc: 95 54 subi r25, 0x45 ; 69
|
|
|
|
|
12ce: 93 30 cpi r25, 0x03 ; 3
|
|
|
|
|
12d0: 18 f0 brcs .+6 ; 0x12d8 <vfprintf+0xf2>
|
|
|
|
|
12d2: 90 52 subi r25, 0x20 ; 32
|
|
|
|
|
12d4: 93 30 cpi r25, 0x03 ; 3
|
|
|
|
|
12d6: 28 f4 brcc .+10 ; 0x12e2 <vfprintf+0xfc>
|
|
|
|
|
12d8: 0c 5f subi r16, 0xFC ; 252
|
|
|
|
|
12da: 1f 4f sbci r17, 0xFF ; 255
|
|
|
|
|
12dc: ff e3 ldi r31, 0x3F ; 63
|
|
|
|
|
12de: f9 83 std Y+1, r31 ; 0x01
|
|
|
|
|
12e0: 0d c0 rjmp .+26 ; 0x12fc <vfprintf+0x116>
|
|
|
|
|
12e2: 83 36 cpi r24, 0x63 ; 99
|
|
|
|
|
12e4: 31 f0 breq .+12 ; 0x12f2 <vfprintf+0x10c>
|
|
|
|
|
12e6: 83 37 cpi r24, 0x73 ; 115
|
|
|
|
|
12e8: 71 f0 breq .+28 ; 0x1306 <vfprintf+0x120>
|
|
|
|
|
12ea: 83 35 cpi r24, 0x53 ; 83
|
|
|
|
|
12ec: 09 f0 breq .+2 ; 0x12f0 <vfprintf+0x10a>
|
|
|
|
|
12ee: 5e c0 rjmp .+188 ; 0x13ac <vfprintf+0x1c6>
|
|
|
|
|
12f0: 23 c0 rjmp .+70 ; 0x1338 <vfprintf+0x152>
|
|
|
|
|
12f2: f8 01 movw r30, r16
|
|
|
|
|
12f4: 80 81 ld r24, Z
|
|
|
|
|
12f6: 89 83 std Y+1, r24 ; 0x01
|
|
|
|
|
12f8: 0e 5f subi r16, 0xFE ; 254
|
|
|
|
|
12fa: 1f 4f sbci r17, 0xFF ; 255
|
|
|
|
|
12fc: 44 24 eor r4, r4
|
|
|
|
|
12fe: 43 94 inc r4
|
|
|
|
|
1300: 51 2c mov r5, r1
|
|
|
|
|
1302: 54 01 movw r10, r8
|
|
|
|
|
1304: 15 c0 rjmp .+42 ; 0x1330 <vfprintf+0x14a>
|
|
|
|
|
1306: 38 01 movw r6, r16
|
|
|
|
|
1308: f2 e0 ldi r31, 0x02 ; 2
|
|
|
|
|
130a: 6f 0e add r6, r31
|
|
|
|
|
130c: 71 1c adc r7, r1
|
|
|
|
|
130e: f8 01 movw r30, r16
|
|
|
|
|
1310: a0 80 ld r10, Z
|
|
|
|
|
1312: b1 80 ldd r11, Z+1 ; 0x01
|
|
|
|
|
1314: 26 ff sbrs r18, 6
|
|
|
|
|
1316: 03 c0 rjmp .+6 ; 0x131e <vfprintf+0x138>
|
|
|
|
|
1318: 65 2d mov r22, r5
|
|
|
|
|
131a: 70 e0 ldi r23, 0x00 ; 0
|
|
|
|
|
131c: 02 c0 rjmp .+4 ; 0x1322 <vfprintf+0x13c>
|
|
|
|
|
131e: 6f ef ldi r22, 0xFF ; 255
|
|
|
|
|
1320: 7f ef ldi r23, 0xFF ; 255
|
|
|
|
|
1322: c5 01 movw r24, r10
|
|
|
|
|
1324: 2c 87 std Y+12, r18 ; 0x0c
|
|
|
|
|
1326: 0e 94 dc 0a call 0x15b8 ; 0x15b8 <strnlen>
|
|
|
|
|
132a: 2c 01 movw r4, r24
|
|
|
|
|
132c: 83 01 movw r16, r6
|
|
|
|
|
132e: 2c 85 ldd r18, Y+12 ; 0x0c
|
|
|
|
|
1330: 6f e7 ldi r22, 0x7F ; 127
|
|
|
|
|
1332: 26 2e mov r2, r22
|
|
|
|
|
1334: 22 22 and r2, r18
|
|
|
|
|
1336: 18 c0 rjmp .+48 ; 0x1368 <vfprintf+0x182>
|
|
|
|
|
1338: 38 01 movw r6, r16
|
|
|
|
|
133a: f2 e0 ldi r31, 0x02 ; 2
|
|
|
|
|
133c: 6f 0e add r6, r31
|
|
|
|
|
133e: 71 1c adc r7, r1
|
|
|
|
|
1340: f8 01 movw r30, r16
|
|
|
|
|
1342: a0 80 ld r10, Z
|
|
|
|
|
1344: b1 80 ldd r11, Z+1 ; 0x01
|
|
|
|
|
1346: 26 ff sbrs r18, 6
|
|
|
|
|
1348: 03 c0 rjmp .+6 ; 0x1350 <vfprintf+0x16a>
|
|
|
|
|
134a: 65 2d mov r22, r5
|
|
|
|
|
134c: 70 e0 ldi r23, 0x00 ; 0
|
|
|
|
|
134e: 02 c0 rjmp .+4 ; 0x1354 <vfprintf+0x16e>
|
|
|
|
|
1350: 6f ef ldi r22, 0xFF ; 255
|
|
|
|
|
1352: 7f ef ldi r23, 0xFF ; 255
|
|
|
|
|
1354: c5 01 movw r24, r10
|
|
|
|
|
1356: 2c 87 std Y+12, r18 ; 0x0c
|
|
|
|
|
1358: 0e 94 d1 0a call 0x15a2 ; 0x15a2 <strnlen_P>
|
|
|
|
|
135c: 2c 01 movw r4, r24
|
|
|
|
|
135e: 2c 85 ldd r18, Y+12 ; 0x0c
|
|
|
|
|
1360: 50 e8 ldi r21, 0x80 ; 128
|
|
|
|
|
1362: 25 2e mov r2, r21
|
|
|
|
|
1364: 22 2a or r2, r18
|
|
|
|
|
1366: 83 01 movw r16, r6
|
|
|
|
|
1368: 23 fc sbrc r2, 3
|
|
|
|
|
136a: 1c c0 rjmp .+56 ; 0x13a4 <vfprintf+0x1be>
|
|
|
|
|
136c: 06 c0 rjmp .+12 ; 0x137a <vfprintf+0x194>
|
|
|
|
|
136e: b7 01 movw r22, r14
|
|
|
|
|
1370: 80 e2 ldi r24, 0x20 ; 32
|
|
|
|
|
1372: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
1374: 0e 94 f7 0a call 0x15ee ; 0x15ee <fputc>
|
|
|
|
|
1378: 3a 94 dec r3
|
|
|
|
|
137a: 83 2d mov r24, r3
|
|
|
|
|
137c: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
137e: 48 16 cp r4, r24
|
|
|
|
|
1380: 59 06 cpc r5, r25
|
|
|
|
|
1382: a8 f3 brcs .-22 ; 0x136e <vfprintf+0x188>
|
|
|
|
|
1384: 0f c0 rjmp .+30 ; 0x13a4 <vfprintf+0x1be>
|
|
|
|
|
1386: f5 01 movw r30, r10
|
|
|
|
|
1388: 27 fc sbrc r2, 7
|
|
|
|
|
138a: 85 91 lpm r24, Z+
|
|
|
|
|
138c: 27 fe sbrs r2, 7
|
|
|
|
|
138e: 81 91 ld r24, Z+
|
|
|
|
|
1390: 5f 01 movw r10, r30
|
|
|
|
|
1392: b7 01 movw r22, r14
|
|
|
|
|
1394: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
1396: 0e 94 f7 0a call 0x15ee ; 0x15ee <fputc>
|
|
|
|
|
139a: 31 10 cpse r3, r1
|
|
|
|
|
139c: 3a 94 dec r3
|
|
|
|
|
139e: f1 e0 ldi r31, 0x01 ; 1
|
|
|
|
|
13a0: 4f 1a sub r4, r31
|
|
|
|
|
13a2: 51 08 sbc r5, r1
|
|
|
|
|
13a4: 41 14 cp r4, r1
|
|
|
|
|
13a6: 51 04 cpc r5, r1
|
|
|
|
|
13a8: 71 f7 brne .-36 ; 0x1386 <vfprintf+0x1a0>
|
|
|
|
|
13aa: ed c0 rjmp .+474 ; 0x1586 <vfprintf+0x3a0>
|
|
|
|
|
13ac: 84 36 cpi r24, 0x64 ; 100
|
|
|
|
|
13ae: 11 f0 breq .+4 ; 0x13b4 <vfprintf+0x1ce>
|
|
|
|
|
13b0: 89 36 cpi r24, 0x69 ; 105
|
|
|
|
|
13b2: 41 f5 brne .+80 ; 0x1404 <vfprintf+0x21e>
|
|
|
|
|
13b4: f8 01 movw r30, r16
|
|
|
|
|
13b6: 27 ff sbrs r18, 7
|
|
|
|
|
13b8: 07 c0 rjmp .+14 ; 0x13c8 <vfprintf+0x1e2>
|
|
|
|
|
13ba: 60 81 ld r22, Z
|
|
|
|
|
13bc: 71 81 ldd r23, Z+1 ; 0x01
|
|
|
|
|
13be: 82 81 ldd r24, Z+2 ; 0x02
|
|
|
|
|
13c0: 93 81 ldd r25, Z+3 ; 0x03
|
|
|
|
|
13c2: 0c 5f subi r16, 0xFC ; 252
|
|
|
|
|
13c4: 1f 4f sbci r17, 0xFF ; 255
|
|
|
|
|
13c6: 08 c0 rjmp .+16 ; 0x13d8 <vfprintf+0x1f2>
|
|
|
|
|
13c8: 60 81 ld r22, Z
|
|
|
|
|
13ca: 71 81 ldd r23, Z+1 ; 0x01
|
|
|
|
|
13cc: 88 27 eor r24, r24
|
|
|
|
|
13ce: 77 fd sbrc r23, 7
|
|
|
|
|
13d0: 80 95 com r24
|
|
|
|
|
13d2: 98 2f mov r25, r24
|
|
|
|
|
13d4: 0e 5f subi r16, 0xFE ; 254
|
|
|
|
|
13d6: 1f 4f sbci r17, 0xFF ; 255
|
|
|
|
|
13d8: 4f e6 ldi r20, 0x6F ; 111
|
|
|
|
|
13da: b4 2e mov r11, r20
|
|
|
|
|
13dc: b2 22 and r11, r18
|
|
|
|
|
13de: 97 ff sbrs r25, 7
|
|
|
|
|
13e0: 09 c0 rjmp .+18 ; 0x13f4 <vfprintf+0x20e>
|
|
|
|
|
13e2: 90 95 com r25
|
|
|
|
|
13e4: 80 95 com r24
|
|
|
|
|
13e6: 70 95 com r23
|
|
|
|
|
13e8: 61 95 neg r22
|
|
|
|
|
13ea: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
13ec: 8f 4f sbci r24, 0xFF ; 255
|
|
|
|
|
13ee: 9f 4f sbci r25, 0xFF ; 255
|
|
|
|
|
13f0: f0 e8 ldi r31, 0x80 ; 128
|
|
|
|
|
13f2: bf 2a or r11, r31
|
|
|
|
|
13f4: 2a e0 ldi r18, 0x0A ; 10
|
|
|
|
|
13f6: 30 e0 ldi r19, 0x00 ; 0
|
|
|
|
|
13f8: a4 01 movw r20, r8
|
|
|
|
|
13fa: 0e 94 23 0b call 0x1646 ; 0x1646 <__ultoa_invert>
|
|
|
|
|
13fe: a8 2e mov r10, r24
|
|
|
|
|
1400: a8 18 sub r10, r8
|
|
|
|
|
1402: 43 c0 rjmp .+134 ; 0x148a <vfprintf+0x2a4>
|
|
|
|
|
1404: 85 37 cpi r24, 0x75 ; 117
|
|
|
|
|
1406: 31 f4 brne .+12 ; 0x1414 <vfprintf+0x22e>
|
|
|
|
|
1408: 3f ee ldi r19, 0xEF ; 239
|
|
|
|
|
140a: b3 2e mov r11, r19
|
|
|
|
|
140c: b2 22 and r11, r18
|
|
|
|
|
140e: 2a e0 ldi r18, 0x0A ; 10
|
|
|
|
|
1410: 30 e0 ldi r19, 0x00 ; 0
|
|
|
|
|
1412: 24 c0 rjmp .+72 ; 0x145c <vfprintf+0x276>
|
|
|
|
|
1414: 99 ef ldi r25, 0xF9 ; 249
|
|
|
|
|
1416: b9 2e mov r11, r25
|
|
|
|
|
1418: b2 22 and r11, r18
|
|
|
|
|
141a: 8f 36 cpi r24, 0x6F ; 111
|
|
|
|
|
141c: b9 f0 breq .+46 ; 0x144c <vfprintf+0x266>
|
|
|
|
|
141e: 20 f4 brcc .+8 ; 0x1428 <vfprintf+0x242>
|
|
|
|
|
1420: 88 35 cpi r24, 0x58 ; 88
|
|
|
|
|
1422: 09 f0 breq .+2 ; 0x1426 <vfprintf+0x240>
|
|
|
|
|
1424: b3 c0 rjmp .+358 ; 0x158c <vfprintf+0x3a6>
|
|
|
|
|
1426: 0d c0 rjmp .+26 ; 0x1442 <vfprintf+0x25c>
|
|
|
|
|
1428: 80 37 cpi r24, 0x70 ; 112
|
|
|
|
|
142a: 21 f0 breq .+8 ; 0x1434 <vfprintf+0x24e>
|
|
|
|
|
142c: 88 37 cpi r24, 0x78 ; 120
|
|
|
|
|
142e: 09 f0 breq .+2 ; 0x1432 <vfprintf+0x24c>
|
|
|
|
|
1430: ad c0 rjmp .+346 ; 0x158c <vfprintf+0x3a6>
|
|
|
|
|
1432: 02 c0 rjmp .+4 ; 0x1438 <vfprintf+0x252>
|
|
|
|
|
1434: 20 e1 ldi r18, 0x10 ; 16
|
|
|
|
|
1436: b2 2a or r11, r18
|
|
|
|
|
1438: b4 fe sbrs r11, 4
|
|
|
|
|
143a: 0b c0 rjmp .+22 ; 0x1452 <vfprintf+0x26c>
|
|
|
|
|
143c: 84 e0 ldi r24, 0x04 ; 4
|
|
|
|
|
143e: b8 2a or r11, r24
|
|
|
|
|
1440: 08 c0 rjmp .+16 ; 0x1452 <vfprintf+0x26c>
|
|
|
|
|
1442: 24 ff sbrs r18, 4
|
|
|
|
|
1444: 09 c0 rjmp .+18 ; 0x1458 <vfprintf+0x272>
|
|
|
|
|
1446: e6 e0 ldi r30, 0x06 ; 6
|
|
|
|
|
1448: be 2a or r11, r30
|
|
|
|
|
144a: 06 c0 rjmp .+12 ; 0x1458 <vfprintf+0x272>
|
|
|
|
|
144c: 28 e0 ldi r18, 0x08 ; 8
|
|
|
|
|
144e: 30 e0 ldi r19, 0x00 ; 0
|
|
|
|
|
1450: 05 c0 rjmp .+10 ; 0x145c <vfprintf+0x276>
|
|
|
|
|
1452: 20 e1 ldi r18, 0x10 ; 16
|
|
|
|
|
1454: 30 e0 ldi r19, 0x00 ; 0
|
|
|
|
|
1456: 02 c0 rjmp .+4 ; 0x145c <vfprintf+0x276>
|
|
|
|
|
1458: 20 e1 ldi r18, 0x10 ; 16
|
|
|
|
|
145a: 32 e0 ldi r19, 0x02 ; 2
|
|
|
|
|
145c: f8 01 movw r30, r16
|
|
|
|
|
145e: b7 fe sbrs r11, 7
|
|
|
|
|
1460: 07 c0 rjmp .+14 ; 0x1470 <vfprintf+0x28a>
|
|
|
|
|
1462: 60 81 ld r22, Z
|
|
|
|
|
1464: 71 81 ldd r23, Z+1 ; 0x01
|
|
|
|
|
1466: 82 81 ldd r24, Z+2 ; 0x02
|
|
|
|
|
1468: 93 81 ldd r25, Z+3 ; 0x03
|
|
|
|
|
146a: 0c 5f subi r16, 0xFC ; 252
|
|
|
|
|
146c: 1f 4f sbci r17, 0xFF ; 255
|
|
|
|
|
146e: 06 c0 rjmp .+12 ; 0x147c <vfprintf+0x296>
|
|
|
|
|
1470: 60 81 ld r22, Z
|
|
|
|
|
1472: 71 81 ldd r23, Z+1 ; 0x01
|
|
|
|
|
1474: 80 e0 ldi r24, 0x00 ; 0
|
|
|
|
|
1476: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
1478: 0e 5f subi r16, 0xFE ; 254
|
|
|
|
|
147a: 1f 4f sbci r17, 0xFF ; 255
|
|
|
|
|
147c: a4 01 movw r20, r8
|
|
|
|
|
147e: 0e 94 23 0b call 0x1646 ; 0x1646 <__ultoa_invert>
|
|
|
|
|
1482: a8 2e mov r10, r24
|
|
|
|
|
1484: a8 18 sub r10, r8
|
|
|
|
|
1486: ff e7 ldi r31, 0x7F ; 127
|
|
|
|
|
1488: bf 22 and r11, r31
|
|
|
|
|
148a: b6 fe sbrs r11, 6
|
|
|
|
|
148c: 0b c0 rjmp .+22 ; 0x14a4 <vfprintf+0x2be>
|
|
|
|
|
148e: 2b 2d mov r18, r11
|
|
|
|
|
1490: 2e 7f andi r18, 0xFE ; 254
|
|
|
|
|
1492: a5 14 cp r10, r5
|
|
|
|
|
1494: 50 f4 brcc .+20 ; 0x14aa <vfprintf+0x2c4>
|
|
|
|
|
1496: b4 fe sbrs r11, 4
|
|
|
|
|
1498: 0a c0 rjmp .+20 ; 0x14ae <vfprintf+0x2c8>
|
|
|
|
|
149a: b2 fc sbrc r11, 2
|
|
|
|
|
149c: 08 c0 rjmp .+16 ; 0x14ae <vfprintf+0x2c8>
|
|
|
|
|
149e: 2b 2d mov r18, r11
|
|
|
|
|
14a0: 2e 7e andi r18, 0xEE ; 238
|
|
|
|
|
14a2: 05 c0 rjmp .+10 ; 0x14ae <vfprintf+0x2c8>
|
|
|
|
|
14a4: 7a 2c mov r7, r10
|
|
|
|
|
14a6: 2b 2d mov r18, r11
|
|
|
|
|
14a8: 03 c0 rjmp .+6 ; 0x14b0 <vfprintf+0x2ca>
|
|
|
|
|
14aa: 7a 2c mov r7, r10
|
|
|
|
|
14ac: 01 c0 rjmp .+2 ; 0x14b0 <vfprintf+0x2ca>
|
|
|
|
|
14ae: 75 2c mov r7, r5
|
|
|
|
|
14b0: 24 ff sbrs r18, 4
|
|
|
|
|
14b2: 0d c0 rjmp .+26 ; 0x14ce <vfprintf+0x2e8>
|
|
|
|
|
14b4: fe 01 movw r30, r28
|
|
|
|
|
14b6: ea 0d add r30, r10
|
|
|
|
|
14b8: f1 1d adc r31, r1
|
|
|
|
|
14ba: 80 81 ld r24, Z
|
|
|
|
|
14bc: 80 33 cpi r24, 0x30 ; 48
|
|
|
|
|
14be: 11 f4 brne .+4 ; 0x14c4 <vfprintf+0x2de>
|
|
|
|
|
14c0: 29 7e andi r18, 0xE9 ; 233
|
|
|
|
|
14c2: 09 c0 rjmp .+18 ; 0x14d6 <vfprintf+0x2f0>
|
|
|
|
|
14c4: 22 ff sbrs r18, 2
|
|
|
|
|
14c6: 06 c0 rjmp .+12 ; 0x14d4 <vfprintf+0x2ee>
|
|
|
|
|
14c8: 73 94 inc r7
|
|
|
|
|
14ca: 73 94 inc r7
|
|
|
|
|
14cc: 04 c0 rjmp .+8 ; 0x14d6 <vfprintf+0x2f0>
|
|
|
|
|
14ce: 82 2f mov r24, r18
|
|
|
|
|
14d0: 86 78 andi r24, 0x86 ; 134
|
|
|
|
|
14d2: 09 f0 breq .+2 ; 0x14d6 <vfprintf+0x2f0>
|
|
|
|
|
14d4: 73 94 inc r7
|
|
|
|
|
14d6: 23 fd sbrc r18, 3
|
|
|
|
|
14d8: 14 c0 rjmp .+40 ; 0x1502 <vfprintf+0x31c>
|
|
|
|
|
14da: 20 ff sbrs r18, 0
|
|
|
|
|
14dc: 0f c0 rjmp .+30 ; 0x14fc <vfprintf+0x316>
|
|
|
|
|
14de: 5a 2c mov r5, r10
|
|
|
|
|
14e0: 73 14 cp r7, r3
|
|
|
|
|
14e2: 60 f4 brcc .+24 ; 0x14fc <vfprintf+0x316>
|
|
|
|
|
14e4: 53 0c add r5, r3
|
|
|
|
|
14e6: 57 18 sub r5, r7
|
|
|
|
|
14e8: 73 2c mov r7, r3
|
|
|
|
|
14ea: 08 c0 rjmp .+16 ; 0x14fc <vfprintf+0x316>
|
|
|
|
|
14ec: b7 01 movw r22, r14
|
|
|
|
|
14ee: 80 e2 ldi r24, 0x20 ; 32
|
|
|
|
|
14f0: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
14f2: 2c 87 std Y+12, r18 ; 0x0c
|
|
|
|
|
14f4: 0e 94 f7 0a call 0x15ee ; 0x15ee <fputc>
|
|
|
|
|
14f8: 73 94 inc r7
|
|
|
|
|
14fa: 2c 85 ldd r18, Y+12 ; 0x0c
|
|
|
|
|
14fc: 73 14 cp r7, r3
|
|
|
|
|
14fe: b0 f3 brcs .-20 ; 0x14ec <vfprintf+0x306>
|
|
|
|
|
1500: 04 c0 rjmp .+8 ; 0x150a <vfprintf+0x324>
|
|
|
|
|
1502: 73 14 cp r7, r3
|
|
|
|
|
1504: 10 f4 brcc .+4 ; 0x150a <vfprintf+0x324>
|
|
|
|
|
1506: 37 18 sub r3, r7
|
|
|
|
|
1508: 01 c0 rjmp .+2 ; 0x150c <vfprintf+0x326>
|
|
|
|
|
150a: 31 2c mov r3, r1
|
|
|
|
|
150c: 24 ff sbrs r18, 4
|
|
|
|
|
150e: 12 c0 rjmp .+36 ; 0x1534 <vfprintf+0x34e>
|
|
|
|
|
1510: b7 01 movw r22, r14
|
|
|
|
|
1512: 80 e3 ldi r24, 0x30 ; 48
|
|
|
|
|
1514: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
1516: 2c 87 std Y+12, r18 ; 0x0c
|
|
|
|
|
1518: 0e 94 f7 0a call 0x15ee ; 0x15ee <fputc>
|
|
|
|
|
151c: 2c 85 ldd r18, Y+12 ; 0x0c
|
|
|
|
|
151e: 22 ff sbrs r18, 2
|
|
|
|
|
1520: 1e c0 rjmp .+60 ; 0x155e <vfprintf+0x378>
|
|
|
|
|
1522: 21 ff sbrs r18, 1
|
|
|
|
|
1524: 03 c0 rjmp .+6 ; 0x152c <vfprintf+0x346>
|
|
|
|
|
1526: 88 e5 ldi r24, 0x58 ; 88
|
|
|
|
|
1528: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
152a: 02 c0 rjmp .+4 ; 0x1530 <vfprintf+0x34a>
|
|
|
|
|
152c: 88 e7 ldi r24, 0x78 ; 120
|
|
|
|
|
152e: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
1530: b7 01 movw r22, r14
|
|
|
|
|
1532: 0c c0 rjmp .+24 ; 0x154c <vfprintf+0x366>
|
|
|
|
|
1534: 82 2f mov r24, r18
|
|
|
|
|
1536: 86 78 andi r24, 0x86 ; 134
|
|
|
|
|
1538: 91 f0 breq .+36 ; 0x155e <vfprintf+0x378>
|
|
|
|
|
153a: 21 fd sbrc r18, 1
|
|
|
|
|
153c: 02 c0 rjmp .+4 ; 0x1542 <vfprintf+0x35c>
|
|
|
|
|
153e: 80 e2 ldi r24, 0x20 ; 32
|
|
|
|
|
1540: 01 c0 rjmp .+2 ; 0x1544 <vfprintf+0x35e>
|
|
|
|
|
1542: 8b e2 ldi r24, 0x2B ; 43
|
|
|
|
|
1544: 27 fd sbrc r18, 7
|
|
|
|
|
1546: 8d e2 ldi r24, 0x2D ; 45
|
|
|
|
|
1548: b7 01 movw r22, r14
|
|
|
|
|
154a: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
154c: 0e 94 f7 0a call 0x15ee ; 0x15ee <fputc>
|
|
|
|
|
1550: 06 c0 rjmp .+12 ; 0x155e <vfprintf+0x378>
|
|
|
|
|
1552: b7 01 movw r22, r14
|
|
|
|
|
1554: 80 e3 ldi r24, 0x30 ; 48
|
|
|
|
|
1556: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
1558: 0e 94 f7 0a call 0x15ee ; 0x15ee <fputc>
|
|
|
|
|
155c: 5a 94 dec r5
|
|
|
|
|
155e: a5 14 cp r10, r5
|
|
|
|
|
1560: c0 f3 brcs .-16 ; 0x1552 <vfprintf+0x36c>
|
|
|
|
|
1562: aa 94 dec r10
|
|
|
|
|
1564: f4 01 movw r30, r8
|
|
|
|
|
1566: ea 0d add r30, r10
|
|
|
|
|
1568: f1 1d adc r31, r1
|
|
|
|
|
156a: b7 01 movw r22, r14
|
|
|
|
|
156c: 80 81 ld r24, Z
|
|
|
|
|
156e: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
1570: 0e 94 f7 0a call 0x15ee ; 0x15ee <fputc>
|
|
|
|
|
1574: a1 10 cpse r10, r1
|
|
|
|
|
1576: f5 cf rjmp .-22 ; 0x1562 <vfprintf+0x37c>
|
|
|
|
|
1578: 06 c0 rjmp .+12 ; 0x1586 <vfprintf+0x3a0>
|
|
|
|
|
157a: b7 01 movw r22, r14
|
|
|
|
|
157c: 80 e2 ldi r24, 0x20 ; 32
|
|
|
|
|
157e: 90 e0 ldi r25, 0x00 ; 0
|
|
|
|
|
1580: 0e 94 f7 0a call 0x15ee ; 0x15ee <fputc>
|
|
|
|
|
1584: 3a 94 dec r3
|
|
|
|
|
1586: 31 10 cpse r3, r1
|
|
|
|
|
1588: f8 cf rjmp .-16 ; 0x157a <vfprintf+0x394>
|
|
|
|
|
158a: 41 ce rjmp .-894 ; 0x120e <vfprintf+0x28>
|
|
|
|
|
158c: f7 01 movw r30, r14
|
|
|
|
|
158e: 26 81 ldd r18, Z+6 ; 0x06
|
|
|
|
|
1590: 37 81 ldd r19, Z+7 ; 0x07
|
|
|
|
|
1592: 02 c0 rjmp .+4 ; 0x1598 <vfprintf+0x3b2>
|
|
|
|
|
1594: 2f ef ldi r18, 0xFF ; 255
|
|
|
|
|
1596: 3f ef ldi r19, 0xFF ; 255
|
|
|
|
|
1598: c9 01 movw r24, r18
|
|
|
|
|
159a: 2c 96 adiw r28, 0x0c ; 12
|
|
|
|
|
159c: e2 e1 ldi r30, 0x12 ; 18
|
|
|
|
|
159e: 0c 94 de 0b jmp 0x17bc ; 0x17bc <__epilogue_restores__>
|
|
|
|
|
|
|
|
|
|
000015a2 <strnlen_P>:
|
|
|
|
|
15a2: fc 01 movw r30, r24
|
|
|
|
|
15a4: 05 90 lpm r0, Z+
|
|
|
|
|
15a6: 61 50 subi r22, 0x01 ; 1
|
|
|
|
|
15a8: 70 40 sbci r23, 0x00 ; 0
|
|
|
|
|
15aa: 01 10 cpse r0, r1
|
|
|
|
|
15ac: d8 f7 brcc .-10 ; 0x15a4 <strnlen_P+0x2>
|
|
|
|
|
15ae: 80 95 com r24
|
|
|
|
|
15b0: 90 95 com r25
|
|
|
|
|
15b2: 8e 0f add r24, r30
|
|
|
|
|
15b4: 9f 1f adc r25, r31
|
|
|
|
|
15b6: 08 95 ret
|
|
|
|
|
|
|
|
|
|
000015b8 <strnlen>:
|
|
|
|
|
15b8: fc 01 movw r30, r24
|
|
|
|
|
15ba: 61 50 subi r22, 0x01 ; 1
|
|
|
|
|
15bc: 70 40 sbci r23, 0x00 ; 0
|
|
|
|
|
15be: 01 90 ld r0, Z+
|
|
|
|
|
15c0: 01 10 cpse r0, r1
|
|
|
|
|
15c2: d8 f7 brcc .-10 ; 0x15ba <strnlen+0x2>
|
|
|
|
|
15c4: 80 95 com r24
|
|
|
|
|
15c6: 90 95 com r25
|
|
|
|
|
15c8: 8e 0f add r24, r30
|
|
|
|
|
15ca: 9f 1f adc r25, r31
|
|
|
|
|
15cc: 08 95 ret
|
|
|
|
|
|
|
|
|
|
000015ce <strrev>:
|
|
|
|
|
15ce: dc 01 movw r26, r24
|
|
|
|
|
15d0: fc 01 movw r30, r24
|
|
|
|
|
15d2: 67 2f mov r22, r23
|
|
|
|
|
15d4: 71 91 ld r23, Z+
|
|
|
|
|
15d6: 77 23 and r23, r23
|
|
|
|
|
15d8: e1 f7 brne .-8 ; 0x15d2 <strrev+0x4>
|
|
|
|
|
15da: 32 97 sbiw r30, 0x02 ; 2
|
|
|
|
|
15dc: 04 c0 rjmp .+8 ; 0x15e6 <strrev+0x18>
|
|
|
|
|
15de: 7c 91 ld r23, X
|
|
|
|
|
15e0: 6d 93 st X+, r22
|
|
|
|
|
15e2: 70 83 st Z, r23
|
|
|
|
|
15e4: 62 91 ld r22, -Z
|
|
|
|
|
15e6: ae 17 cp r26, r30
|
|
|
|
|
15e8: bf 07 cpc r27, r31
|
|
|
|
|
15ea: c8 f3 brcs .-14 ; 0x15de <strrev+0x10>
|
|
|
|
|
15ec: 08 95 ret
|
|
|
|
|
|
|
|
|
|
000015ee <fputc>:
|
|
|
|
|
15ee: 0f 93 push r16
|
|
|
|
|
15f0: 1f 93 push r17
|
|
|
|
|
15f2: cf 93 push r28
|
|
|
|
|
15f4: df 93 push r29
|
|
|
|
|
15f6: 8c 01 movw r16, r24
|
|
|
|
|
15f8: eb 01 movw r28, r22
|
|
|
|
|
15fa: 8b 81 ldd r24, Y+3 ; 0x03
|
|
|
|
|
15fc: 81 fd sbrc r24, 1
|
|
|
|
|
15fe: 03 c0 rjmp .+6 ; 0x1606 <fputc+0x18>
|
|
|
|
|
1600: 0f ef ldi r16, 0xFF ; 255
|
|
|
|
|
1602: 1f ef ldi r17, 0xFF ; 255
|
|
|
|
|
1604: 1a c0 rjmp .+52 ; 0x163a <fputc+0x4c>
|
|
|
|
|
1606: 82 ff sbrs r24, 2
|
|
|
|
|
1608: 0d c0 rjmp .+26 ; 0x1624 <fputc+0x36>
|
|
|
|
|
160a: 2e 81 ldd r18, Y+6 ; 0x06
|
|
|
|
|
160c: 3f 81 ldd r19, Y+7 ; 0x07
|
|
|
|
|
160e: 8c 81 ldd r24, Y+4 ; 0x04
|
|
|
|
|
1610: 9d 81 ldd r25, Y+5 ; 0x05
|
|
|
|
|
1612: 28 17 cp r18, r24
|
|
|
|
|
1614: 39 07 cpc r19, r25
|
|
|
|
|
1616: 64 f4 brge .+24 ; 0x1630 <fputc+0x42>
|
|
|
|
|
1618: e8 81 ld r30, Y
|
|
|
|
|
161a: f9 81 ldd r31, Y+1 ; 0x01
|
|
|
|
|
161c: 01 93 st Z+, r16
|
|
|
|
|
161e: f9 83 std Y+1, r31 ; 0x01
|
|
|
|
|
1620: e8 83 st Y, r30
|
|
|
|
|
1622: 06 c0 rjmp .+12 ; 0x1630 <fputc+0x42>
|
|
|
|
|
1624: e8 85 ldd r30, Y+8 ; 0x08
|
|
|
|
|
1626: f9 85 ldd r31, Y+9 ; 0x09
|
|
|
|
|
1628: 80 2f mov r24, r16
|
|
|
|
|
162a: 09 95 icall
|
|
|
|
|
162c: 89 2b or r24, r25
|
|
|
|
|
162e: 41 f7 brne .-48 ; 0x1600 <fputc+0x12>
|
|
|
|
|
1630: 8e 81 ldd r24, Y+6 ; 0x06
|
|
|
|
|
1632: 9f 81 ldd r25, Y+7 ; 0x07
|
|
|
|
|
1634: 01 96 adiw r24, 0x01 ; 1
|
|
|
|
|
1636: 9f 83 std Y+7, r25 ; 0x07
|
|
|
|
|
1638: 8e 83 std Y+6, r24 ; 0x06
|
|
|
|
|
163a: c8 01 movw r24, r16
|
|
|
|
|
163c: df 91 pop r29
|
|
|
|
|
163e: cf 91 pop r28
|
|
|
|
|
1640: 1f 91 pop r17
|
|
|
|
|
1642: 0f 91 pop r16
|
|
|
|
|
1644: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00001646 <__ultoa_invert>:
|
|
|
|
|
1646: fa 01 movw r30, r20
|
|
|
|
|
1648: aa 27 eor r26, r26
|
|
|
|
|
164a: 28 30 cpi r18, 0x08 ; 8
|
|
|
|
|
164c: 61 f1 breq .+88 ; 0x16a6 <__ultoa_invert+0x60>
|
|
|
|
|
164e: 20 31 cpi r18, 0x10 ; 16
|
|
|
|
|
1650: 91 f1 breq .+100 ; 0x16b6 <__ultoa_invert+0x70>
|
|
|
|
|
1652: e8 94 clt
|
|
|
|
|
1654: 6f 93 push r22
|
|
|
|
|
1656: 6e 7f andi r22, 0xFE ; 254
|
|
|
|
|
1658: 6e 5f subi r22, 0xFE ; 254
|
|
|
|
|
165a: 7f 4f sbci r23, 0xFF ; 255
|
|
|
|
|
165c: 8f 4f sbci r24, 0xFF ; 255
|
|
|
|
|
165e: 9f 4f sbci r25, 0xFF ; 255
|
|
|
|
|
1660: af 4f sbci r26, 0xFF ; 255
|
|
|
|
|
1662: b1 e0 ldi r27, 0x01 ; 1
|
|
|
|
|
1664: 40 d0 rcall .+128 ; 0x16e6 <__ultoa_invert+0xa0>
|
|
|
|
|
1666: b4 e0 ldi r27, 0x04 ; 4
|
|
|
|
|
1668: 3e d0 rcall .+124 ; 0x16e6 <__ultoa_invert+0xa0>
|
|
|
|
|
166a: 67 0f add r22, r23
|
|
|
|
|
166c: 78 1f adc r23, r24
|
|
|
|
|
166e: 89 1f adc r24, r25
|
|
|
|
|
1670: 9a 1f adc r25, r26
|
|
|
|
|
1672: a1 1d adc r26, r1
|
|
|
|
|
1674: 68 0f add r22, r24
|
|
|
|
|
1676: 79 1f adc r23, r25
|
|
|
|
|
1678: 8a 1f adc r24, r26
|
|
|
|
|
167a: 91 1d adc r25, r1
|
|
|
|
|
167c: a1 1d adc r26, r1
|
|
|
|
|
167e: 6a 0f add r22, r26
|
|
|
|
|
1680: 71 1d adc r23, r1
|
|
|
|
|
1682: 81 1d adc r24, r1
|
|
|
|
|
1684: 91 1d adc r25, r1
|
|
|
|
|
1686: a1 1d adc r26, r1
|
|
|
|
|
1688: 22 d0 rcall .+68 ; 0x16ce <__ultoa_invert+0x88>
|
|
|
|
|
168a: 09 f4 brne .+2 ; 0x168e <__ultoa_invert+0x48>
|
|
|
|
|
168c: 68 94 set
|
|
|
|
|
168e: 3f 91 pop r19
|
|
|
|
|
1690: 06 2e mov r0, r22
|
|
|
|
|
1692: 00 0c add r0, r0
|
|
|
|
|
1694: 30 19 sub r19, r0
|
|
|
|
|
1696: 00 0c add r0, r0
|
|
|
|
|
1698: 00 0c add r0, r0
|
|
|
|
|
169a: 30 19 sub r19, r0
|
|
|
|
|
169c: 30 5d subi r19, 0xD0 ; 208
|
|
|
|
|
169e: 31 93 st Z+, r19
|
|
|
|
|
16a0: ce f6 brtc .-78 ; 0x1654 <__ultoa_invert+0xe>
|
|
|
|
|
16a2: cf 01 movw r24, r30
|
|
|
|
|
16a4: 08 95 ret
|
|
|
|
|
16a6: 46 2f mov r20, r22
|
|
|
|
|
16a8: 47 70 andi r20, 0x07 ; 7
|
|
|
|
|
16aa: 40 5d subi r20, 0xD0 ; 208
|
|
|
|
|
16ac: 41 93 st Z+, r20
|
|
|
|
|
16ae: b3 e0 ldi r27, 0x03 ; 3
|
|
|
|
|
16b0: 0f d0 rcall .+30 ; 0x16d0 <__ultoa_invert+0x8a>
|
|
|
|
|
16b2: c9 f7 brne .-14 ; 0x16a6 <__ultoa_invert+0x60>
|
|
|
|
|
16b4: f6 cf rjmp .-20 ; 0x16a2 <__ultoa_invert+0x5c>
|
|
|
|
|
16b6: 46 2f mov r20, r22
|
|
|
|
|
16b8: 4f 70 andi r20, 0x0F ; 15
|
|
|
|
|
16ba: 40 5d subi r20, 0xD0 ; 208
|
|
|
|
|
16bc: 4a 33 cpi r20, 0x3A ; 58
|
|
|
|
|
16be: 18 f0 brcs .+6 ; 0x16c6 <__ultoa_invert+0x80>
|
|
|
|
|
16c0: 49 5d subi r20, 0xD9 ; 217
|
|
|
|
|
16c2: 31 fd sbrc r19, 1
|
|
|
|
|
16c4: 40 52 subi r20, 0x20 ; 32
|
|
|
|
|
16c6: 41 93 st Z+, r20
|
|
|
|
|
16c8: 02 d0 rcall .+4 ; 0x16ce <__ultoa_invert+0x88>
|
|
|
|
|
16ca: a9 f7 brne .-22 ; 0x16b6 <__ultoa_invert+0x70>
|
|
|
|
|
16cc: ea cf rjmp .-44 ; 0x16a2 <__ultoa_invert+0x5c>
|
|
|
|
|
16ce: b4 e0 ldi r27, 0x04 ; 4
|
|
|
|
|
16d0: a6 95 lsr r26
|
|
|
|
|
16d2: 97 95 ror r25
|
|
|
|
|
16d4: 87 95 ror r24
|
|
|
|
|
16d6: 77 95 ror r23
|
|
|
|
|
16d8: 67 95 ror r22
|
|
|
|
|
16da: ba 95 dec r27
|
|
|
|
|
16dc: c9 f7 brne .-14 ; 0x16d0 <__ultoa_invert+0x8a>
|
|
|
|
|
16de: 00 97 sbiw r24, 0x00 ; 0
|
|
|
|
|
16e0: 61 05 cpc r22, r1
|
|
|
|
|
16e2: 71 05 cpc r23, r1
|
|
|
|
|
16e4: 08 95 ret
|
|
|
|
|
16e6: 9b 01 movw r18, r22
|
|
|
|
|
16e8: ac 01 movw r20, r24
|
|
|
|
|
16ea: 0a 2e mov r0, r26
|
|
|
|
|
16ec: 06 94 lsr r0
|
|
|
|
|
16ee: 57 95 ror r21
|
|
|
|
|
16f0: 47 95 ror r20
|
|
|
|
|
16f2: 37 95 ror r19
|
|
|
|
|
16f4: 27 95 ror r18
|
|
|
|
|
16f6: ba 95 dec r27
|
|
|
|
|
16f8: c9 f7 brne .-14 ; 0x16ec <__ultoa_invert+0xa6>
|
|
|
|
|
16fa: 62 0f add r22, r18
|
|
|
|
|
16fc: 73 1f adc r23, r19
|
|
|
|
|
16fe: 84 1f adc r24, r20
|
|
|
|
|
1700: 95 1f adc r25, r21
|
|
|
|
|
1702: a0 1d adc r26, r0
|
|
|
|
|
1704: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00001706 <__mulqi3>:
|
|
|
|
|
1706: 00 24 eor r0, r0
|
|
|
|
|
|
|
|
|
|
00001708 <__mulqi3_loop>:
|
|
|
|
|
1708: 80 fd sbrc r24, 0
|
|
|
|
|
170a: 06 0e add r0, r22
|
|
|
|
|
170c: 66 0f add r22, r22
|
|
|
|
|
170e: 11 f0 breq .+4 ; 0x1714 <__mulqi3_exit>
|
|
|
|
|
1710: 86 95 lsr r24
|
|
|
|
|
1712: d1 f7 brne .-12 ; 0x1708 <__mulqi3_loop>
|
|
|
|
|
|
|
|
|
|
00001714 <__mulqi3_exit>:
|
|
|
|
|
1714: 80 2d mov r24, r0
|
|
|
|
|
1716: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00001718 <__udivmodhi4>:
|
|
|
|
|
1718: aa 1b sub r26, r26
|
|
|
|
|
171a: bb 1b sub r27, r27
|
|
|
|
|
171c: 51 e1 ldi r21, 0x11 ; 17
|
|
|
|
|
171e: 07 c0 rjmp .+14 ; 0x172e <__udivmodhi4_ep>
|
|
|
|
|
|
|
|
|
|
00001720 <__udivmodhi4_loop>:
|
|
|
|
|
1720: aa 1f adc r26, r26
|
|
|
|
|
1722: bb 1f adc r27, r27
|
|
|
|
|
1724: a6 17 cp r26, r22
|
|
|
|
|
1726: b7 07 cpc r27, r23
|
|
|
|
|
1728: 10 f0 brcs .+4 ; 0x172e <__udivmodhi4_ep>
|
|
|
|
|
172a: a6 1b sub r26, r22
|
|
|
|
|
172c: b7 0b sbc r27, r23
|
|
|
|
|
|
|
|
|
|
0000172e <__udivmodhi4_ep>:
|
|
|
|
|
172e: 88 1f adc r24, r24
|
|
|
|
|
1730: 99 1f adc r25, r25
|
|
|
|
|
1732: 5a 95 dec r21
|
|
|
|
|
1734: a9 f7 brne .-22 ; 0x1720 <__udivmodhi4_loop>
|
|
|
|
|
1736: 80 95 com r24
|
|
|
|
|
1738: 90 95 com r25
|
|
|
|
|
173a: bc 01 movw r22, r24
|
|
|
|
|
173c: cd 01 movw r24, r26
|
|
|
|
|
173e: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00001740 <__udivmodsi4>:
|
|
|
|
|
1740: a1 e2 ldi r26, 0x21 ; 33
|
|
|
|
|
1742: 1a 2e mov r1, r26
|
|
|
|
|
1744: aa 1b sub r26, r26
|
|
|
|
|
1746: bb 1b sub r27, r27
|
|
|
|
|
1748: fd 01 movw r30, r26
|
|
|
|
|
174a: 0d c0 rjmp .+26 ; 0x1766 <__udivmodsi4_ep>
|
|
|
|
|
|
|
|
|
|
0000174c <__udivmodsi4_loop>:
|
|
|
|
|
174c: aa 1f adc r26, r26
|
|
|
|
|
174e: bb 1f adc r27, r27
|
|
|
|
|
1750: ee 1f adc r30, r30
|
|
|
|
|
1752: ff 1f adc r31, r31
|
|
|
|
|
1754: a2 17 cp r26, r18
|
|
|
|
|
1756: b3 07 cpc r27, r19
|
|
|
|
|
1758: e4 07 cpc r30, r20
|
|
|
|
|
175a: f5 07 cpc r31, r21
|
|
|
|
|
175c: 20 f0 brcs .+8 ; 0x1766 <__udivmodsi4_ep>
|
|
|
|
|
175e: a2 1b sub r26, r18
|
|
|
|
|
1760: b3 0b sbc r27, r19
|
|
|
|
|
1762: e4 0b sbc r30, r20
|
|
|
|
|
1764: f5 0b sbc r31, r21
|
|
|
|
|
|
|
|
|
|
00001766 <__udivmodsi4_ep>:
|
|
|
|
|
1766: 66 1f adc r22, r22
|
|
|
|
|
1768: 77 1f adc r23, r23
|
|
|
|
|
176a: 88 1f adc r24, r24
|
|
|
|
|
176c: 99 1f adc r25, r25
|
|
|
|
|
176e: 1a 94 dec r1
|
|
|
|
|
1770: 69 f7 brne .-38 ; 0x174c <__udivmodsi4_loop>
|
|
|
|
|
1772: 60 95 com r22
|
|
|
|
|
1774: 70 95 com r23
|
|
|
|
|
1776: 80 95 com r24
|
|
|
|
|
1778: 90 95 com r25
|
|
|
|
|
177a: 9b 01 movw r18, r22
|
|
|
|
|
177c: ac 01 movw r20, r24
|
|
|
|
|
177e: bd 01 movw r22, r26
|
|
|
|
|
1780: cf 01 movw r24, r30
|
|
|
|
|
1782: 08 95 ret
|
|
|
|
|
|
|
|
|
|
00001784 <__prologue_saves__>:
|
|
|
|
|
1784: 2f 92 push r2
|
|
|
|
|
1786: 3f 92 push r3
|
|
|
|
|
1788: 4f 92 push r4
|
|
|
|
|
178a: 5f 92 push r5
|
|
|
|
|
178c: 6f 92 push r6
|
|
|
|
|
178e: 7f 92 push r7
|
|
|
|
|
1790: 8f 92 push r8
|
|
|
|
|
1792: 9f 92 push r9
|
|
|
|
|
1794: af 92 push r10
|
|
|
|
|
1796: bf 92 push r11
|
|
|
|
|
1798: cf 92 push r12
|
|
|
|
|
179a: df 92 push r13
|
|
|
|
|
179c: ef 92 push r14
|
|
|
|
|
179e: ff 92 push r15
|
|
|
|
|
17a0: 0f 93 push r16
|
|
|
|
|
17a2: 1f 93 push r17
|
|
|
|
|
17a4: cf 93 push r28
|
|
|
|
|
17a6: df 93 push r29
|
|
|
|
|
17a8: cd b7 in r28, 0x3d ; 61
|
|
|
|
|
17aa: de b7 in r29, 0x3e ; 62
|
|
|
|
|
17ac: ca 1b sub r28, r26
|
|
|
|
|
17ae: db 0b sbc r29, r27
|
|
|
|
|
17b0: 0f b6 in r0, 0x3f ; 63
|
|
|
|
|
17b2: f8 94 cli
|
|
|
|
|
17b4: de bf out 0x3e, r29 ; 62
|
|
|
|
|
17b6: 0f be out 0x3f, r0 ; 63
|
|
|
|
|
17b8: cd bf out 0x3d, r28 ; 61
|
|
|
|
|
17ba: 09 94 ijmp
|
|
|
|
|
|
|
|
|
|
000017bc <__epilogue_restores__>:
|
|
|
|
|
17bc: 2a 88 ldd r2, Y+18 ; 0x12
|
|
|
|
|
17be: 39 88 ldd r3, Y+17 ; 0x11
|
|
|
|
|
17c0: 48 88 ldd r4, Y+16 ; 0x10
|
|
|
|
|
17c2: 5f 84 ldd r5, Y+15 ; 0x0f
|
|
|
|
|
17c4: 6e 84 ldd r6, Y+14 ; 0x0e
|
|
|
|
|
17c6: 7d 84 ldd r7, Y+13 ; 0x0d
|
|
|
|
|
17c8: 8c 84 ldd r8, Y+12 ; 0x0c
|
|
|
|
|
17ca: 9b 84 ldd r9, Y+11 ; 0x0b
|
|
|
|
|
17cc: aa 84 ldd r10, Y+10 ; 0x0a
|
|
|
|
|
17ce: b9 84 ldd r11, Y+9 ; 0x09
|
|
|
|
|
17d0: c8 84 ldd r12, Y+8 ; 0x08
|
|
|
|
|
17d2: df 80 ldd r13, Y+7 ; 0x07
|
|
|
|
|
17d4: ee 80 ldd r14, Y+6 ; 0x06
|
|
|
|
|
17d6: fd 80 ldd r15, Y+5 ; 0x05
|
|
|
|
|
17d8: 0c 81 ldd r16, Y+4 ; 0x04
|
|
|
|
|
17da: 1b 81 ldd r17, Y+3 ; 0x03
|
|
|
|
|
17dc: aa 81 ldd r26, Y+2 ; 0x02
|
|
|
|
|
17de: b9 81 ldd r27, Y+1 ; 0x01
|
|
|
|
|
17e0: ce 0f add r28, r30
|
|
|
|
|
17e2: d1 1d adc r29, r1
|
|
|
|
|
17e4: 0f b6 in r0, 0x3f ; 63
|
|
|
|
|
17e6: f8 94 cli
|
|
|
|
|
17e8: de bf out 0x3e, r29 ; 62
|
|
|
|
|
17ea: 0f be out 0x3f, r0 ; 63
|
|
|
|
|
17ec: cd bf out 0x3d, r28 ; 61
|
|
|
|
|
17ee: ed 01 movw r28, r26
|
|
|
|
|
17f0: 08 95 ret
|
|
|
|
|
|
|
|
|
|
000017f2 <_exit>:
|
|
|
|
|
17f2: f8 94 cli
|
|
|
|
|
|
|
|
|
|
000017f4 <__stop_program>:
|
|
|
|
|
17f4: ff cf rjmp .-2 ; 0x17f4 <__stop_program>
|