From: Michael Wiebusch Date: Mon, 21 Oct 2013 11:03:51 +0000 (+0200) Subject: a lot of things work, but the system does not like small steps X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=73853444b450df25b560bd0ef6c39d9f60e265c9;p=coral.git a lot of things work, but the system does not like small steps --- diff --git a/firmware/USBtoSerial.c b/firmware/USBtoSerial.c index e5b7451..9ed439f 100644 --- a/firmware/USBtoSerial.c +++ b/firmware/USBtoSerial.c @@ -270,13 +270,13 @@ void uart_puts(const char *s ) // convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { if (zahl == 0 && i < (no_digits - 1)) { - string[i] = ' '; + string[i] = leading_char; } else { string[i] = (zahl % 10) + '0'; } // Modulo rechnen, dann den ASCII-Code von '0' addieren @@ -291,12 +291,18 @@ int8_t sign(int16_t x) { void uart_print_number(uint32_t zahl, uint8_t no_digits) { - my_uitoa(abs(zahl),stringbuffer,no_digits); + my_uitoa(abs(zahl),stringbuffer,no_digits,' '); + uart_puts(stringbuffer); +} + + +void uart_print_number_wlzeros(uint32_t zahl, uint8_t no_digits) { + my_uitoa(abs(zahl),stringbuffer,no_digits,'0'); uart_puts(stringbuffer); - } + void uart_print_signed_number(uint32_t zahl, uint8_t no_digits) { - my_uitoa(abs(zahl),stringbuffer,no_digits); + my_uitoa(abs(zahl),stringbuffer,no_digits,' '); if (sign(zahl) < 0) { uart_putc('-'); } else { @@ -423,13 +429,26 @@ uint8_t move_plate(int16_t dx, int16_t dy){ } +void print_steps_in_mm(int16_t steps) { + int16_t predot,postdot; + + predot = steps/24; + postdot = ((abs(steps)%24)*417)/10; + uart_print_signed_number(predot,3); + uart_putc('.'); + uart_print_number_wlzeros(postdot,3); + +} + void pos_report(void){ uart_puts("x_pos: "); - uart_print_signed_number(plate_pos_x,6); +// uart_print_signed_number(plate_pos_x,6); + print_steps_in_mm(plate_pos_x); // my_uitoa(plate_pos_x, stringbuffer, 6); // uart_puts(stringbuffer); uart_puts(" y_pos: "); - uart_print_signed_number(plate_pos_y,6); +// uart_print_signed_number(plate_pos_y,6); + print_steps_in_mm(plate_pos_y); uart_puts("\r"); } @@ -441,7 +460,7 @@ void pos_report(void){ void parse_command(void){ - static char cmdbuffer[16]; + static char cmdbuffer[32]; static char numbuffer[16]; static uint16_t predot = 0,postdot = 0; static uint8_t cmdPos, curCmdLen, num_start = 0, nums_found = 0; @@ -528,15 +547,16 @@ void parse_command(void){ case GOTO: uart_puts("GOTO "); uart_putc(88+axis);// x or y + uart_putc(' '); uart_print_signed_number(predot*num_sign,3); uart_putc('.'); - uart_print_number(postdot,3); + uart_print_number_wlzeros(postdot,3); uart_puts("\r\n"); dest = num_sign *( predot*24 +(postdot*10)/416); if (axis == X) { - steps = dest - plate_pos_x; + steps = dest - plate_pos_x; // experimental correction! move_plate(steps,0); plate_pos_x += steps; } else if (axis == Y) { @@ -550,9 +570,10 @@ void parse_command(void){ case MOVEREL: uart_puts("MOVE "); uart_putc(88+axis);// x or y + uart_putc(' '); uart_print_signed_number(predot*num_sign,3); uart_putc('.'); - uart_print_number(postdot,3); + uart_print_number_wlzeros(postdot,3); uart_puts("\r\n"); steps = num_sign *( predot*24 +(postdot*10)/416); @@ -582,8 +603,18 @@ void parse_command(void){ } else { // queue command - cmdbuffer[cmdPos++] = byte; + if( cmdPos == 0 ){ + uart_puts("\r\n$ "); + } + + if( byte == 8 ){ // backspace + cmdPos--; + } else { + cmdbuffer[cmdPos++] = byte; + } uart_putc(byte); + + } } } @@ -616,7 +647,7 @@ int main(void) - uart_puts("you selected the relative position demo modus:\n\r"); +// uart_puts("you selected the relative position demo modus:\n\r"); touchpad_set_rel_mode_100dpi();// use touchpad in relative mode // touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution int16_t x, y = 0; @@ -651,7 +682,7 @@ int main(void) pos_report(); } - _delay_ms(10); + _delay_ms(20); } // end of relative mode demo block diff --git a/firmware/USBtoSerial.c~ b/firmware/USBtoSerial.c~ index cd90034..077e024 100644 --- a/firmware/USBtoSerial.c~ +++ b/firmware/USBtoSerial.c~ @@ -270,13 +270,13 @@ void uart_puts(const char *s ) // convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { if (zahl == 0 && i < (no_digits - 1)) { - string[i] = ' '; + string[i] = leading_char; } else { string[i] = (zahl % 10) + '0'; } // Modulo rechnen, dann den ASCII-Code von '0' addieren @@ -291,12 +291,18 @@ int8_t sign(int16_t x) { void uart_print_number(uint32_t zahl, uint8_t no_digits) { - my_uitoa(abs(zahl),stringbuffer,no_digits); + my_uitoa(abs(zahl),stringbuffer,no_digits,' '); + uart_puts(stringbuffer); +} + + +void uart_print_number_wlzeros(uint32_t zahl, uint8_t no_digits) { + my_uitoa(abs(zahl),stringbuffer,no_digits,'0'); uart_puts(stringbuffer); - } + void uart_print_signed_number(uint32_t zahl, uint8_t no_digits) { - my_uitoa(abs(zahl),stringbuffer,no_digits); + my_uitoa(abs(zahl),stringbuffer,no_digits,' '); if (sign(zahl) < 0) { uart_putc('-'); } else { @@ -423,13 +429,26 @@ uint8_t move_plate(int16_t dx, int16_t dy){ } +void print_steps_in_mm(int16_t steps) { + int16_t predot,postdot; + + predot = steps/24; + postdot = ((abs(steps)%24)*417)/10; + uart_print_signed_number(predot,3); + uart_putc('.'); + uart_print_number_wlzeros(postdot,3); + +} + void pos_report(void){ uart_puts("x_pos: "); - uart_print_signed_number(plate_pos_x,6); +// uart_print_signed_number(plate_pos_x,6); + print_steps_in_mm(plate_pos_x); // my_uitoa(plate_pos_x, stringbuffer, 6); // uart_puts(stringbuffer); uart_puts(" y_pos: "); - uart_print_signed_number(plate_pos_y,6); +// uart_print_signed_number(plate_pos_y,6); + print_steps_in_mm(plate_pos_y); uart_puts("\r"); } @@ -441,7 +460,7 @@ void pos_report(void){ void parse_command(void){ - static char cmdbuffer[16]; + static char cmdbuffer[32]; static char numbuffer[16]; static uint16_t predot = 0,postdot = 0; static uint8_t cmdPos, curCmdLen, num_start = 0, nums_found = 0; @@ -528,15 +547,16 @@ void parse_command(void){ case GOTO: uart_puts("GOTO "); uart_putc(88+axis);// x or y + uart_putc(' '); uart_print_signed_number(predot*num_sign,3); uart_putc('.'); - uart_print_number(postdot,3); + uart_print_number_wlzeros(postdot,3); uart_puts("\r\n"); dest = num_sign *( predot*24 +(postdot*10)/416); if (axis == X) { - steps = dest - plate_pos_x; + steps = dest - plate_pos_x; // experimental correction! move_plate(steps,0); plate_pos_x += steps; } else if (axis == Y) { @@ -544,14 +564,16 @@ void parse_command(void){ move_plate(0,steps); plate_pos_y += steps; } + pos_report(); break; case MOVEREL: uart_puts("MOVE "); uart_putc(88+axis);// x or y + uart_putc(' '); uart_print_signed_number(predot*num_sign,3); uart_putc('.'); - uart_print_number(postdot,3); + uart_print_number_wlzeros(postdot,3); uart_puts("\r\n"); steps = num_sign *( predot*24 +(postdot*10)/416); @@ -563,6 +585,7 @@ void parse_command(void){ move_plate(0,steps); plate_pos_y += steps; } + pos_report(); break; case SETZERO: @@ -580,8 +603,18 @@ void parse_command(void){ } else { // queue command - cmdbuffer[cmdPos++] = byte; + if( cmdPos == 0 ){ + uart_puts("\r\n$ "); + } + + if( byte == 8 ){ // backspace + cmdPos--; + } else { + cmdbuffer[cmdPos++] = byte; + } uart_putc(byte); + + } } } @@ -614,7 +647,7 @@ int main(void) - uart_puts("you selected the relative position demo modus:\n\r"); +// uart_puts("you selected the relative position demo modus:\n\r"); touchpad_set_rel_mode_100dpi();// use touchpad in relative mode // touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution int16_t x, y = 0; diff --git a/firmware/USBtoSerial.elf b/firmware/USBtoSerial.elf index e7a1412..f34a9e7 100755 Binary files a/firmware/USBtoSerial.elf and b/firmware/USBtoSerial.elf differ diff --git a/firmware/USBtoSerial.hex b/firmware/USBtoSerial.hex index 8edcda6..c277ec8 100644 --- a/firmware/USBtoSerial.hex +++ b/firmware/USBtoSerial.hex @@ -1,7 +1,7 @@ :100000009AC00000B4C00000B2C00000B0C0000040 :10001000AEC00000ACC00000AAC00000A8C0000034 -:10002000A6C00000A4C00000A2C000000C943109CA -:100030000C94D5099CC000009AC0000098C0000034 +:10002000A6C00000A4C00000A2C000000C94690992 +:100030000C940D0A9CC000009AC0000098C00000FB :1000400096C0000094C0000092C0000090C0000064 :100050008EC000004BC100008AC0000023C3000016 :1000600086C0000084C0000082C0000080C0000084 @@ -18,9 +18,9 @@ :1001100020005500530042002D00520053003200D1 :100120003300320020004100640061007000740060 :1001300065007200000011241FBECFEFD4E0DEBFC7 -:10014000CDBF11E0A0E0B1E0E8E8FEE102C005901B -:100150000D92AA37B107D9F712E0AAE7B1E001C0C2 -:100160001D92A03FB107E1F72FD60C94420F48CF64 +:10014000CDBF11E0A0E0B1E0E8EFFEE102C0059014 +:100150000D92AE34B107D9F712E0AEE4B1E001C0C0 +:100160001D92A43DB107E1F767D60C947A0F48CFF2 :10017000FC01A081B1816C93808191810196918372 :100180008083268137818217930721F484819581AA :10019000918380832FB7F894828593850196938706 @@ -45,454 +45,458 @@ :1002C0000895FC012FB7F894718360837383628370 :1002D0007583648360587F4F7783668380E890E0FE :1002E00091878087138612862FBF08951F920F92E1 -:1002F0000FB60F9211248F938091E2028F5F80934B -:10030000E2028F910F900FBE0F901F90189586B547 -:100310003091E20220E0280F311DC901089516BC7A -:100320001092E2020895DF92EF92FF920F931F93D3 +:1002F0000FB60F9211248F938091C6028F5F809367 +:10030000C6028F910F900FBE0F901F90189586B563 +:100310003091C60220E0280F311DC901089516BC96 +:100320001092C6020895DF92EF92FF920F931F93EF :10033000CF93DF9383E085BDF2DF509A5898E7DFD3 -:10034000BC0180E090E00E94FB0D20E030E84EE030 -:1003500053E40E94630D87FDF2CF82E085BDDD246A +:10034000BC0180E090E00E94330E20E030E84EE0F7 +:1003500053E40E949B0D87FDF2CF82E085BDDD2432 :10036000D39410E0DCDF509A5898D1DFBC0180E0D4 -:1003700090E00E94FB0D20E030E04CE852E40E9447 -:10038000630D87FDF2CF5098589AC1DFBC0180E021 -:1003900090E00E94FB0D20E030E048E453E40E942E -:1003A000630D87FDF2CF41C0C8E0D0E000E8E12E48 -:1003B000FF2489EC92E0E80EF91EB1DF509A5898BC +:1003700090E00E94330E20E030E04CE852E40E940E +:100380009B0D87FDF2CF5098589AC1DFBC0180E0E9 +:1003900090E00E94330E20E030E048E453E40E94F5 +:1003A0009B0D87FDF2CF41C0C8E0D0E000E8E12E10 +:1003B000FF248DEA92E0E80EF91EB1DF509A5898BA :1003C000F7018081802379F0A2DFBC0180E090E01A -:1003D0000E94FB0D20E030E04CE852E40E94630DE7 +:1003D0000E94330E20E030E04CE852E40E949B0D76 :1003E00087FDF2CF0EC093DFBC0180E090E00E9459 -:1003F000FB0D20E030E042E053E40E94630D87FDF6 +:1003F000330E20E030E042E053E40E949B0D87FD85 :10040000F2CF5098589A83DFBC0180E090E00E94C0 -:10041000FB0D20E030E048E453E40E94630D87FDCB +:10041000330E20E030E048E453E40E949B0D87FD5A :10042000F2CF0695219749F61F5F1D1508F4BCCF42 :1004300076DF509A58986BDFBC0180E090E00E9414 -:10044000FB0D20E030E042E053E40E94630D87FDA5 +:10044000330E20E030E042E053E40E949B0D87FD34 :10045000F2CF5098589A5BDFBC0180E090E00E9498 -:10046000FB0D20E030E048E453E40E94630D87FD7B -:10047000F2CF8091C9028B3329F0893341F409E02E +:10046000330E20E030E048E453E40E949B0D87FD0A +:10047000F2CF8091AD028B3329F0893341F409E04A :10048000D02E02C0B3E0DB2E113009F46BCF47DF72 -:100490003EDFBC0180E090E00E94FB0D20E030E0F8 -:1004A0004AEF53E40E94AD0E18160CF442C048996E -:1004B000EFCF489BFECFCAECD2E011E001C0182F6D +:100490003EDFBC0180E090E00E94330E20E030E0BF +:1004A0004AEF53E40E94E50E18160CF442C0489936 +:1004B000EFCF489BFECFCEEAD2E011E001C0182F6B :1004C0001882A8E0EA2EF12C00E829DF20DFBC0129 -:1004D00080E090E00E94FB0D20E030E048E453E42F -:1004E0000E94AD0E181614F4115024C04899EECF96 +:1004D00080E090E00E94330E20E030E048E453E4F6 +:1004E0000E94E50E181614F4115024C04899EECF5E :1004F00016DF489BFECF0BDFBC0180E090E00E943E -:10050000FB0D20E030E048EC52E40E94630D87FFD1 +:10050000330E20E030E048EC52E40E949B0D87FF60 :1005100003C08881800F888306950894E108F1085C :10052000E114F10491F6812F8F5F2196893039F61D :1005300001C010E0812FDF91CF911F910F91FF90AB :10054000EF90DF9008955098589AEEE6F0E08081A1 -:100550008160808308958CE38093C902E4DE8093F8 -:10056000E3028091E30208958BE38093C90283E65E -:100570008093CA0281E08093CB02D5DE8FEF91EEAB +:100550008160808308958CE38093AD02E4DE809314 +:10056000C7028091C70208958BE38093AD0283E6B2 +:100570008093AE0281E08093AF02D5DE8FEF91EEE3 :10058000A4E081509040A040E1F700C00000089531 -:100590008091E302882351F08091CA0286FF04C053 +:100590008091C702882351F08091AE0286FF04C08B :1005A00081958F73819508958F73089580E00895E4 -:1005B0008091E302882351F08091CB0286FF04C032 +:1005B0008091C702882351F08091AF0286FF04C06A :1005C00081958F73819508958F73089580E00895C4 -:1005D0001F938FB7F89420918801309189018FBFC4 -:1005E00080918601909187012817390751F084E5A1 -:1005F00091E00E94D00CBC0197FD03C08EE791E012 -:10060000B7DD2FB7F89480911402909115022FBF97 -:10061000009709F1209155012F702093E900209156 +:1005D0001F938FB7F89420915C0130915D018FBF1C +:1005E00080915A0190915B012817390751F088E2F8 +:1005F00091E00E94080DBC0197FD03C082E591E0E7 +:10060000B7DD2FB7F8948091E8019091E9012FBFF1 +:10061000009709F1209129012F702093E900209182 :10062000E80020FF18C08031910510F08FE090E0C5 -:10063000182F0FC0E0910C02F0910D0284E591E0BB -:1006400060810E945F0C1150882329F48AE092E0B7 -:10065000AADD112379F784E591E00E94B90C0E948C -:10066000730B1F91089584B7877F84BF88E10FB60D +:10063000182F0FC0E091E001F091E10188E291E014 +:1006400060810E94970C1150882329F48EED91E06F +:10065000AADD112379F788E291E00E94F10C0E9453 +:10066000AB0B1F91089584B7877F84BF88E10FB6D5 :10067000F89480936000109260000FBE90E080E8D4 -:100680000FB6F89480936100909361000FBEDAC5B5 -:100690000895089584E591E00C943B0C84E591E085 -:1006A0000C948E0B1F920F920FB60F9211242F9362 +:100680000FB6F89480936100909361000FBE12C67C +:100690000895089588E291E00C94730C88E291E04B +:1006A0000C94C60B1F920F920FB60F9211242F932A :1006B0003F934F935F936F937F938F939F93AF93EA :1006C000BF93EF93FF936091CE008EB3843019F403 -:1006D0008AE092E04DDDFF91EF91BF91AF919F9144 +:1006D0008EED91E04DDDFF91EF91BF91AF919F9134 :1006E0008F917F916F915F914F913F912F910F90DB :1006F0000FBE0F901F9018958F929F92AF92BF924E :10070000CF92DF92EF92FF921F93FC01A18DA15037 -:10071000A23028F4B0E0AD58BE4F1C9101C010E0EB +:10071000A23028F4B0E0A95BBE4F1C9101C010E0EC :10072000808D823009F41860828D873031F08830F6 :1007300031F0863029F4126003C0146001C01660E5 :100740001092C9001092C8001092CA00C488D588BF :10075000E688F788C701B6019695879577956795DE -:100760000E94FB0D20E034E244EF59E40E94FF0CAC -:100770004B015C01C701B6010E94FB0D9B01AC015E -:10078000C501B4010E94670D20E030E040E85FE35E -:100790000E94FE0C0E94CF0D7093CD006093CC00A0 +:100760000E94330E20E034E244EF59E40E94370D3A +:100770004B015C01C701B6010E94330E9B01AC0125 +:10078000C501B4010E949F0D20E030E040E85FE326 +:100790000E94360D0E94070E7093CD006093CC002E :1007A0001093CA0082E08093C80088E98093C90052 :1007B0001F91FF90EF90DF90CF90BF90AF909F90F0 -:1007C0008F900895682F8EB3843019F48AE092E0F8 +:1007C0008F900895682F8EB3843019F48EED91E0E8 :1007D000CFCC0895EF92FF92CF93DF93E82EE701FD :1007E0007E01F92EE70101C0EDDF89918823E1F751 :1007F000DF91CF91FF90EF9008952F923F924F920B :100800005F926F927F928F929F92AF92BF92CF92A0 -:10081000DF92EF92FF920F931F93CF93DF937B01B1 -:100820008C01822F90E0FA01E80FF91F1082D22E7E -:10083000DA944D2C552447FC5094EA01C40DD51D83 -:10084000AA24BB24AAE06A2E712C812C912C1C01B5 -:10085000089421083108F0E2CF2E22C0E114F104FF -:100860000105110541F4C501840D951D82159305FF -:1008700014F4C88208C0C801B701A40193010E9402 -:10088000EA0E605D6883C801B701A40193010E946C -:10089000EA0E79018A01DA9421970894A108B10837 -:1008A000D7FEDCCFDF91CF911F910F91FF90EF909A -:1008B000DF90CF90BF90AF909F908F907F906F9080 -:1008C0005F904F903F902F90089521E018161906E1 -:1008D0000CF020E0892F881F8827881F281B822F73 -:1008E0000895242F77FF03C0709561957F4F882767 -:1008F00077FD8095982F42ED52E07FDF82ED92E008 -:1009000069CF0F931F93242F8B0177FF03C070953E -:1009100061957F4F882777FD8095982F42ED52E0B3 -:100920006CDFC801D2DF87FF02C08DE201C08BE21D -:1009300049DF82ED92E04EDF1F910F91089580E034 -:100940004BDC80E084DC229A239A249A259A279A09 -:10095000269A3F9A3E9A08950F931F93162F82303E -:1009600050F4A82FB0E0AA0FBB1FAB58BE4F2D917B -:100970003C91119702C02CEE30E0E82FF0E0812F7F -:10098000992787FD90950496EE53FD4F4081840F83 -:10099000911D64E070E00E94D70E8083E82FF0E0A4 -:1009A000E159FE4F0081112311F0802F01C080E03A -:1009B000F9010995802F1F910F9108950F931F93AF -:1009C0002091C0023091C102280F391F3093C1021B -:1009D0002093C0028091BE029091BF02860F971FA4 -:1009E0009093BF028093BE02C9016FDF082F11E010 -:1009F000882309F410E080E0602FAEDF602F7727B6 -:100A000067FD70952091C0023091C102261B370B03 -:100A10003093C1022093C0028091BE029091BF0228 -:100A200054DF082F81111F5F81E0602F95DF602F59 -:100A3000772767FD70952091BE023091BF02261B7B -:100A4000370B3093BF022093BE02812F1F910F916D -:100A5000089580E091E0BEDE60917A0170917B01A3 -:100A6000882777FD8095982F46E04BDF88E091E05E -:100A7000B1DE60917C0170917D01882777FD8095C2 -:100A8000982F46E03EDF82E191E0A4CECF92DF9244 -:100A9000EF92FF920F931F93CF93DF932FB7F894AA -:100AA00080918801909189012FBF009709F483C13B -:100AB0008EE791E078DB8D3019F08A3009F070C153 -:100AC00084E191E087DE80919902E82FF0E0E25521 -:100AD000FD4F108280939802109299028091AE028D -:100AE000873659F0873449F08D3649F08D3439F026 -:100AF0008A3739F08A3539F404C001E005C002E0D4 -:100B000003C003E001C000E08091AF02883739F0F4 -:100B1000883529F0893729F011E0893519F010E07E -:100B200001C011E0802F8150823008F06DC010921A -:100B30009D0210929C0210929B0210929A021092B7 -:100B400097021092960292E0F92EDD24D39480E36E -:100B5000C82E54C0E0909702EE2049F4EF2DF0E04B -:100B6000E255FD4F80818D3211F4DD24DA94CF2DD2 -:100B7000D0E0FE01E255FD4F808180538A3028F499 -:100B8000EE20D9F5F092970238C0EE20B1F16E2D2B -:100B900070E0C61BD70B62557D4F8EE992E0AE0127 -:100BA0000E94290FC256DD4F1882809196028F5FF6 -:100BB00080939602813049F48EE992E00E940C0FF6 -:100BC00090939D0280939C0216C08F2D8E198330C6 -:100BD00040F4E82FF0E0E256FD4FC0828F5F833093 -:100BE000C1F71092A1028EE992E00E940C0F90933F -:100BF0009B0280939A0210929702F394809198023C -:100C00008F1508F0A7CF02C0DD24D394023009F479 -:100C10005FC0033009F4BAC0013009F0BFC087E1FA -:100C200091E0D8DD812F885ACDDDCD2DDD27C7FDA0 -:100C3000D09560919C0270919D02CE010E94B10EF0 -:100C4000BC0180E090E043E05CDE8EE2BBDD6091C1 -:100C50009A0270919B0280E090E043E042DE84E1E2 -:100C600091E0B8DD80919A0290919B026AE070E079 -:100C70000E94B10E60EA71E00E94C30E9B01809158 -:100C80009C0290919D0268E170E00E94B10E280FD5 -:100C9000391FCE01B9010E94B10E112369F42091D0 -:100CA0007A0130917B01E82EE7017E01F92EE70100 -:100CB000C21BD30BCE014DC020917C0130917D0130 -:100CC000E82EE7017E01F92EE701C21BD30B4FC0CE -:100CD0008DE191E07FDD812F885A74DDCD2DDD27F8 -:100CE000C7FDD09560919C0270919D02CE010E943B -:100CF000B10EBC0180E090E043E003DE8EE262DDF5 -:100D000060919A0270919B0280E090E043E0E9DDFF -:100D100084E191E05FDD80919A0290919B026AE00C -:100D200070E00E94B10E60EA71E00E94C30E9B0168 -:100D300080919C0290919D0268E170E00E94B10E4A -:100D4000280F391FCE01B9010E94B10EEC01112309 -:100D500071F460E070E032DE80917A0190917B0165 -:100D60008C0F9D1F90937B0180937A0117C080E0C8 -:100D700090E0BE0123DE80917C0190917D018C0F7B -:100D80009D1F90937D0180937C0108C010927B0190 -:100D900010927A0110927D0110927C015ADE0BC0F4 -:100DA00090919902E92FF0E0E255FD4F80839F5F1B -:100DB0009093990207DDDF91CF911F910F91FF90E2 -:100DC000EF90DF90CF9008950F931F93DF93CF9311 -:100DD0000F92CDB7DEB7B3DD46DC8EE791E06AE86F -:100DE00071E06FDA8AE092E066E172E06ADA7894A4 -:100DF000AADB8FEF99E6A8E181509040A040E1F78F -:100E000000C00000789483E291E0E4DCADDB10E008 -:100E1000DFDB3CDEA0DBCCDB082FBADB402F552725 -:100E200047FD509520917A0130917B01240F351FA9 -:100E300030937B0120937A01682F772767FD7095A7 -:100E400080917C0190917D01860F971F90937D0189 -:100E500080937C01CA01B2DD112329F0882319F4A3 -:100E60008983F7DD8981AFE3BCE91197F1F700C011 -:100E70000000182FCDCF923029F0933041F09130FF -:100E8000E9F417C02EE330E0EAEAF0E01BC081305D -:100E900041F0813018F0823089F406C0E8EEF0E0CD -:100EA00005C0ECEEF0E002C0E6E0F1E0249130E0B5 -:100EB00009C022E130E0E8E9F0E004C020E030E0E1 -:100EC000E0E0F0E0DA011196FC93EE93C901089599 -:100ED000282F392FF9018091EE029091EF028617A9 -:100EE000970718F4BC0120E034C061157105D9F7EB -:100EF0008091E8008E778093E800F5CF8EB3882349 -:100F0000E9F18530B9F18091E80083FD35C0809129 -:100F1000E80082FD29C08091E80080FF1AC080911E -:100F2000F20090E006C021912093F10061507040E2 -:100F300001966115710519F088309105A0F321E043 -:100F40008830910509F020E08091E8008E77809349 -:100F5000E8006115710591F6222381F605C08EB374 -:100F6000882361F0853061F08091E80082FFF7CF3F -:100F700080E0089583E0089581E0089582E0089577 -:100F800083E00895E82FF92F8091EE029091EF020F -:100F90008617970718F4BC0120E036C0611571056B -:100FA000D9F78091E8008E778093E800F5CF8EB373 -:100FB000882309F43EC08530C1F18091E80083FDAB -:100FC00036C08091E80082FD2AC08091E80080FF51 -:100FD0001BC08091F20090E007C024912093F100A3 -:100FE00031966150704001966115710519F0883095 -:100FF000910598F321E08830910509F020E0809177 -:10100000E8008E778093E8006115710581F6222350 -:1010100071F605C08EB3882361F0853061F0809150 -:10102000E80082FFF7CF80E0089583E0089581E033 -:10103000089582E0089583E00895982F2CC0292F09 -:101040002F702093E900981739F07091EC002091EF -:10105000ED005091F00003C0242F762F50E021FFC7 -:1010600019C03091EB003E7F3093EB003091ED00E2 -:101070003D7F3093ED003091EB0031603093EB0019 -:101080007093EC002093ED005093F0002091EE005F -:1010900027FF08C09F5F953090F28F708093E90022 -:1010A00081E0089580E00895EF92FF920F931F93DF -:1010B000CF93DF93162FE82EE7017E01F92EE7018B -:1010C00000E02AC09881992329F16B81E981FA8196 -:1010D0002C81892F8F70853018F56295660F660F09 -:1010E000607C991F9927991F692B223010F096E098 -:1010F00001C092E028E030E040E003C04F5F220FE3 -:10110000331F2E173F07D0F34295407F492B95DFC1 -:10111000882331F00F5F25960117A0F281E001C00E -:1011200080E0DF91CF911F910F91FF90EF90089594 -:101130008091E80287FF11C003C08EB38823B1F00D -:101140008091E80082FFF9CF8091E8008B7780934F -:10115000E80008958EB3882349F08091E80080FF6D -:10116000F9CF8091E8008E778093E8000895809110 -:10117000E4009091E50044E62091EC0020FF25C0BA -:101180002091E80020FD15C02EB32223A1F02530C8 -:10119000A1F02091EB0025FD12C02091E4003091D8 -:1011A000E5002817390741F3442359F04150C9019C -:1011B000E3CF80E0089582E0089583E0089581E020 -:1011C000089584E0089580E008952091E80022FFCA -:1011D000DBCFF9CF40D042D08091D8008F77809379 -:1011E000D8008091D80080688093D8008091D80082 -:1011F0008F7D8093D80084E089BD86E089BD09B4E5 -:1012000000FEFDCF1EBA1092E4021092E602109288 -:10121000E50280E060E042E010DF8091E1008E7F37 -:101220008093E1008091E20081608093E2008091F0 -:10123000E20088608093E2008091E0008E7F8093DE -:10124000E0000895E3E6F0E080818E7F808381E016 -:101250008093E702BFCF1092E20008951092E10060 -:1012600008951F920F920FB60F9211242F933F9360 -:101270004F935F936F937F938F939F93AF93BF939E -:10128000EF93FF938091E10082FF0AC08091E2001A -:1012900082FF06C08091E1008B7F8093E10022D223 -:1012A0008091E10080FF16C08091E20080FF12C0B3 -:1012B0008091E2008E7F8093E2008091E200806165 -:1012C0008093E2008091D80080628093D80019BC9E -:1012D0001EBADFD98091E10084FF2CC08091E2002A -:1012E00084FF28C084E089BD86E089BD09B400FE82 -:1012F000FDCF8091D8008F7D8093D8008091E10050 -:101300008F7E8093E1008091E2008F7E8093E200E7 -:101310008091E20081608093E2008091E402882362 -:1013200021F48091E30087FF02C084E001C081E0E6 -:101330008EBBAED98091E10083FF26C08091E20090 -:1013400083FF22C08091E100877F8093E10082E0EB -:101350008EBB1092E4028091E1008E7F8093E100C9 -:101360008091E2008E7F8093E2008091E2008061B4 -:101370008093E20080E060E042E05FDE8091F00078 -:1013800088608093F000AED1FF91EF91BF91AF9153 -:101390009F918F917F916F915F914F913F912F918D -:1013A0000F900FBE0F901F9018951F920F920FB6BF -:1013B0000F9211241F932F933F934F935F936F933B -:1013C0007F938F939F93AF93BF93EF93FF9310916E -:1013D000E9001F708091EC001092E9008091F0000C -:1013E000877F8093F00078941BD01092E900809161 -:1013F000F00088608093F0001093E900FF91EF9176 -:10140000BF91AF919F918F917F916F915F914F911C -:101410003F912F911F910F900FBE0F901F90189525 -:101420001F93DF93CF93CDB7DEB7AC970FB6F89489 -:10143000DEBF0FBECDBFE8EEF2E08091F1008193F8 -:1014400022E0E03FF207C9F729D98091E80083FF45 -:1014500031C18091E8022091E902253009F484C06D -:10146000263040F42130A1F1213070F0233009F012 -:1014700021C12EC0283009F4EFC0293009F4FEC084 -:10148000263009F017C192C0803821F0823809F067 -:1014900011C108C08091E5029091E602992371F094 -:1014A00082600CC08091EC028F708093E900909173 -:1014B000EB0081E095FF80E01092E9009091E80058 -:1014C000977F9093E8008093F1001092F100CFC0D5 -:1014D000882319F0823009F0EDC090E08F71907090 -:1014E000009729F08230910509F0E4C00BC080918B -:1014F000EA02813009F0DEC0233009F080E08093F9 -:10150000E6022CC08091EA02882341F52091EC028A -:101510002F7009F4CFC02093E9008091EB0080FF89 -:101520001DC08091E902833021F48091EB0080623C -:1015300013C08091EB0080618093EB0081E090E02C -:1015400002C0880F991F2A95E2F78093EA00109253 -:10155000EA008091EB0088608093EB001092E90034 -:101560008091E800877F86C0882309F0A3C010918E -:10157000EA021F778091E3008078812B8093E3005B -:101580008091E800877F8093E800D2DD8091E800B9 -:1015900080FFFCCF8091E30080688093E3001123FB -:1015A00011F083E001C082E08EBB84C0805882309D -:1015B00008F080C08091EA029091EB0223E08C3D1C -:1015C000920791F583E08C838AE28B835FB7F8946E -:1015D000DE01159680E090E04EE061E2E42FF0E05D -:1015E00060935700E49180FF03C0E295EF704F5F76 -:1015F000EF702E2F30E0EA3018F0295C3F4F02C028 -:10160000205D3F4F2D933D9301968431910531F735 -:101610005FBF8091E800877F8093E800CE0103964A -:101620006AE270E055DC12C06091EC02AE014F5FDF -:101630005F4F21DCBC01009709F43CC08091E800B9 -:10164000877F8093E80089819A819CDC8091E80003 -:101650008B778093E8002EC0803861F58091E80098 -:10166000877F8093E8008091E4028093F10080916D -:10167000E8008E778093E8005BDD1CC08823D1F4FE -:101680009091EA029230B0F48091E800877F8093D5 -:10169000E8009093E4024CDD8091E402882321F479 -:1016A0008091E30087FF02C084E001C081E08EBB2F -:1016B0000E944A038091E80083FF0AC08091E800FD -:1016C000877F8093E8008091EB0080628093EB003D -:1016D000AC960FB6F894DEBF0FBECDBFCF91DF91B1 -:1016E0001F91089508951F938EB38823A9F08091C8 -:1016F000E9008F709091EC0090FF02C010E801C0EB -:1017000010E0182B1092E9008091E80083FF01C0DF -:1017100087DE1F701093E9001F910895CF93DF9328 -:10172000EC018091E80083FFA3C0888190E02091C4 -:10173000EC023091ED022817390709F099C0809129 -:10174000E902813269F0823220F4803209F090C0DF -:101750003CC0823209F46BC0833209F089C07AC080 -:101760008091E802813A09F083C08091E800877F88 -:101770008093E8008091E80080FFFCCF8C899D89F0 -:10178000AE89BF898093F100292F3A2F4B2F55271F -:101790002093F1009D01442755272093F1008B2FC2 -:1017A0009927AA27BB278093F100888D8093F100A9 -:1017B000898D8093F1008A8D8093F1008091E800FB -:1017C0008E778093E800B4DC53C08091E8028132C8 -:1017D00009F04EC08091E800877F8093E80004C044 -:1017E0008EB3882309F444C08091E80082FFF8CFCB -:1017F0003091F1002091F1009091F1008091F10081 -:101800003C8B2D8B9E8B8F8B8091F100888F8091EC -:10181000F100898F8091F1008A8F8091E8008B77A9 -:101820008093E80085DCCE010E947C0321C080917A -:10183000E8028132E9F48091E800877F8093E80034 -:1018400077DC8091EA029091EB02998B888BCE0134 -:10185000D4D00EC08091E802813251F48091E8002A -:10186000877F8093E80064DCCE016091EA02C5D0F6 -:10187000DF91CF910895CF93DF93EC014096FC0167 -:101880008BE0DF011D928A95E9F782E08C838987DE -:1018900083E08E87CE01019661E006DC882359F053 -:1018A000CE01069661E000DC882329F0CE010B967C -:1018B00061E0FADB01C080E0DF91CF910895DF9312 -:1018C000CF930F92CDB7DEB7FC018EB38430F9F41D -:1018D00024893589468957892115310541055105E6 -:1018E000B1F081818F708093E9008091E80085FDDF -:1018F0000AC08091E8008E778093E800698337DC26 -:101900006981882329F46093F10080E001C082E0BE -:101910000F90CF91DF910895FC018EB3843019F5BB -:101920002489358946895789211531054105510595 -:10193000D1F081818F708093E9008091F20088233B -:10194000A1F09091E8008091E8008E778093E80004 -:1019500095FD0DC00CDC882359F49091E8009E772A -:101960009093E800089582E0089580E0089580E073 -:1019700008952EB3243099F4FC01248935894689D1 -:101980005789211531054105510549F021812F70F5 -:101990002093E9002091E80020FF01C0BDCF089509 -:1019A000FC018EB3843029F524893589468957890D -:1019B0002115310541055105E1F086818F70809335 -:1019C000E9008091E80082FF14C08091F200882332 -:1019D00021F02091F10030E002C02FEF3FEF809125 -:1019E000F200882341F48091E8008B778093E8002F -:1019F00002C02FEF3FEFC901089508955058BB274B -:101A0000AA270ED070C161D130F066D120F031F438 -:101A10009F3F11F41EF456C10EF4E095E7FB4CC154 -:101A2000E92F72D180F3BA1762077307840795070D -:101A300018F071F49EF58AC10EF4E0950B2EBA2FC2 -:101A4000A02D0B01B90190010C01CA01A0011124C4 -:101A5000FF27591B99F0593F50F4503E68F11A1670 -:101A6000F040A22F232F342F4427585FF3CF469501 -:101A700037952795A795F0405395C9F77EF41F1623 -:101A8000BA0B620B730B840BBAF09150A1F0FF0FED -:101A9000BB1F661F771F881FC2F70EC0BA0F621FD9 -:101AA000731F841F48F4879577956795B795F795C9 -:101AB0009E3F08F0B3CF9395880F08F09927EE0F5B -:101AC000979587950895D4D008F481E008950CD0B7 -:101AD0000AC102D140F0F9D030F021F45F3F19F093 -:101AE000EBC0511134C1EEC00FD198F39923C9F363 -:101AF0005523B1F3951B550BBB27AA276217730714 -:101B0000840738F09F5F5F4F220F331F441FAA1FC7 -:101B1000A9F333D00E2E3AF0E0E830D09150504087 -:101B2000E695001CCAF729D0FE2F27D0660F771F35 -:101B3000881FBB1F261737074807AB07B0E809F017 -:101B4000BB0B802DBF01FF2793585F4F2AF09E3FAC -:101B5000510568F0B1C0FBC05F3FECF3983EDCF389 -:101B6000869577956795B795F7959F5FC9F7880F25 -:101B7000911D9695879597F90895E1E0660F771F77 -:101B8000881FBB1F621773078407BA0720F0621B08 -:101B9000730B840BBA0BEE1F88F7E0950895BCD049 -:101BA00088F09F5790F0B92F9927B751A0F0D1F046 -:101BB000660F771F881F991F1AF0BA95C9F712C0D0 -:101BC000B13081F0C3D0B1E00895C0C0672F782F45 -:101BD0008827B85F39F0B93FCCF38695779567953C -:101BE000B395D9F73EF490958095709561957F4FA8 -:101BF0008F4F9F4F0895E89409C097FB3EF490954E -:101C00008095709561957F4F8F4F9F4F9923A9F0D5 -:101C1000F92F96E9BB279395F69587957795679564 -:101C2000B795F111F8CFFAF4BB0F11F460FF1BC0A8 -:101C30006F5F7F4F8F4F9F4F16C0882311F096E93B -:101C400011C0772321F09EE8872F762F05C06623E9 -:101C500071F096E8862F70E060E02AF09A95660FA2 -:101C6000771F881FDAF7880F9695879597F908955B -:101C7000990F0008550FAA0BE0E8FEEF161617069D -:101C8000E807F907C0F012161306E407F50798F005 -:101C9000621B730B840B950B39F40A2661F0232B1E -:101CA000242B252B21F408950A2609F4A140A6959A -:101CB0008FEF811D811D089597F99F6780E870E07F -:101CC00060E008959FEF80EC089500240A941616B2 -:101CD000170618060906089500240A94121613061A -:101CE000140605060895092E0394000C11F48823A8 -:101CF00052F0BB0F40F4BF2B11F460FF04C06F5FC4 -:101D00007F4F8F4F9F4F089557FD9058440F551F99 -:101D100059F05F3F71F04795880F97FB991F61F06D -:101D20009F3F79F087950895121613061406551FE4 -:101D3000F2CF4695F1DF08C0161617061806991F50 -:101D4000F1CF86957105610508940895E894BB2745 -:101D500066277727CB0197F908958ADF08F48FEF7C -:101D600008955527002480FF02C0060E571F660FF6 -:101D7000771F6115710521F096958795009799F762 -:101D8000952F802D0895AA1BBB1B51E107C0AA1FE8 -:101D9000BB1FA617B70710F0A61BB70B881F991F0C -:101DA0005A95A9F780959095BC01CD01089597FBB0 -:101DB000092E07260AD077FD04D0E5DF06D00020E3 -:101DC0001AF4709561957F4F0895F6F79095819577 -:101DD0009F4F0895A1E21A2EAA1BBB1BFD010DC047 -:101DE000AA1FBB1FEE1FFF1FA217B307E407F507CB -:101DF00020F0A21BB30BE40BF50B661F771F881FA7 -:101E0000991F1A9469F760957095809590959B013C -:101E1000AC01BD01CF010895FC0188279927E89402 -:101E200021912032E9F3293010F02E30C8F32B3203 -:101E300039F02D3231F4689403C01AD0820F911D0D -:101E4000219120532A30C8F31EF4909581959F4F1D -:101E50000895FB01DC014150504048F001900D9283 -:101E60000020C9F701C01D9241505040E0F708958D -:101E7000BC01880F991F880F991F860F971F880F25 -:081E8000991F0895F894FFCFAB -:101E8800785F706F733A20002020795F706F733A23 -:101E980020000D000D0A00474F544F20004D4F56AB -:101EA800452000796F752073656C656374656420DF -:101EB8007468652072656C617469766520706F73EB -:101EC8006974696F6E2064656D6F206D6F647573DA -:101ED8003A0A0D000083100000010410000001827E -:101EE8000800000100000000000000000000000AD7 -:0A1EF8000905063020EC0027010068 +:10081000DF92EF92FF920F931F93CF93DF936B01C1 +:100820007C01822F90E0FA01E80FF91F1082122F4D +:100830001150412E552447FC5094EA01C40DD51D9A +:10084000AA24BB24FAE06F2E712C812C912C1C0160 +:1008500008942108310822C0C114D104E104F10434 +:1008600041F4C501840D951D8215930514F4088388 +:1008700008C0C701B601A40193010E94220F605D68 +:100880006883C701B601A40193010E94220F690188 +:100890007A01115021970894A108B10817FFDCCF05 +:1008A000DF91CF911F910F91FF90EF90DF90CF904C +:1008B000BF90AF909F908F907F906F905F904F9080 +:1008C0003F902F90089521E0181619060CF020E0B3 +:1008D000892F881F8827881F281B822F08950F9330 +:1008E000242F77FF03C0709561957F4F882777FD90 +:1008F0008095982F46EB52E000E37FDF86EB92E095 +:1009000069DF0F910895FF920F931F93242FF62E06 +:10091000172F77FF03C0709561957F4F882777FD6C +:100920008095982F46EB52E000E267DF8F2D912FE4 +:10093000CADF87FF02C08DE201C08BE243DF86EB96 +:1009400092E048DF1F910F91FF90089580E044DC12 +:1009500080E07DDC229A239A249A259A279A269A67 +:100960003F9A3E9A08950F931F93162F823050F4AA +:10097000A82FB0E0AA0FBB1FA75BBE4F2D913C91E3 +:10098000119702C02CEE30E0E82FF0E0812F99277C +:1009900087FD90950496EA55FD4F4081840F911D87 +:1009A00064E070E00E940F0F8083E82FF0E0ED5BC1 +:1009B000FE4F0081112311F0802F01C080E0F9016A +:1009C0000995802F1F910F9108950F931F932091E8 +:1009D000A4023091A502280F391F3093A50220935D +:1009E000A4028091A2029091A302860F971F909378 +:1009F000A3028093A202C90166DF082F11E08823B9 +:100A000009F410E080E0602FAEDF602F772767FDEC +:100A100070952091A4023091A502261B370B3093CC +:100A2000A5022093A4028091A2029091A3024BDF21 +:100A3000082F81111F5F81E0602F95DF602F7727DE +:100A400067FD70952091A2023091A302261B370BFF +:100A50003093A3022093A202812F1F910F9108953A +:100A60000F931F938C0168E170E00E940F0F88279D +:100A700077FD8095982F43E046DF8EE2A3DEC80124 +:100A800017FF03C0909581959F4F68E170E00E9429 +:100A90000F0F61EA71E00E94E90E6AE070E00E94C7 +:100AA0000F0F882777FD8095982F43E018DF1F915F +:100AB0000F91089580E091E08DDE80914E0190913C +:100AC0004F01CEDF88E091E085DE8091500190916A +:100AD0005101C6DF82E191E07DCECF92DF92EF92AD +:100AE000FF920F931F93CF93DF932FB7F8948091CA +:100AF0005C0190915D012FBF009709F494C182E5DC +:100B000091E051DB182F8D3019F08A3009F074C153 +:100B100084E191E05FDE80916D02E82FF0E0EE5716 +:100B2000FD4F108280936C0210926D0280918202C0 +:100B3000873659F0873449F08D3649F08D3439F0D5 +:100B40008A3739F08A3539F404C001E005C002E083 +:100B500003C003E001C000E080918302883739F0D0 +:100B6000883529F0893729F011E0893519F010E02E +:100B700001C011E0802F8150823008F06DC01092CA +:100B800071021092700210926F0210926E02109217 +:100B90006B0210926A0292E0F92EDD24D39480E376 +:100BA000C82E54C0E0906B02EE2049F4EF2DF0E027 +:100BB000EE57FD4F80818D3211F4DD24DA94CF2D74 +:100BC000D0E0FE01EE57FD4F808180538A3028F43B +:100BD000EE20D9F5F0926B0238C0EE20B1F16E2D07 +:100BE00070E0C61BD70B6E577D4F82E792E0AE01D7 +:100BF0000E94610FCE58DD4F188280916A028F5F8C +:100C000080936A02813049F482E792E00E94440FA7 +:100C1000909371028093700216C08F2D8E198330CD +:100C200040F4E82FF0E0EE58FD4FC0828F5F833034 +:100C3000C1F71092750282E792E00E94440F9093F0 +:100C40006F0280936E0210926B02F39480916C029B +:100C50008F1508F0A7CF02C0DD24D394023009F429 +:100C600061C0033009F4BEC0013009F0C3C087E1A0 +:100C700091E0B0DD812F885AA5DD80E2A3DDCD2D86 +:100C8000DD27C7FDD0956091700270917102CE0191 +:100C90000E94E90EBC0180E090E043E034DE8EE289 +:100CA00091DD60916E0270916F0280E090E043E010 +:100CB00016DE84E191E08EDD80916E0290916F02EC +:100CC0006AE070E00E94E90E60EA71E00E94FB0EAB +:100CD0009B01809170029091710268E170E00E9426 +:100CE000E90E280F391FCE01B9010E94E90E112328 +:100CF00069F420914E0130914F01E82EE7017E0109 +:100D0000F92EE701C21BD30BCE014FC02091500139 +:100D100030915101E82EE7017E01F92EE701C21B57 +:100D2000D30B51C08DE191E055DD812F885A4ADD0A +:100D300080E248DDCD2DDD27C7FDD09560917002A2 +:100D400070917102CE010E94E90EBC0180E090E03A +:100D500043E0D9DD8EE236DD60916E0270916F0264 +:100D600080E090E043E0BBDD84E191E033DD809101 +:100D70006E0290916F026AE070E00E94E90E60EAF4 +:100D800071E00E94FB0E9B018091700290917102B4 +:100D900068E170E00E94E90E280F391FCE01B90109 +:100DA0000E94E90EEC01112371F460E070E00DDEA9 +:100DB00080914E0190914F018C0F9D1F90934F0198 +:100DC00080934E0117C080E090E0BE01FEDD80916F +:100DD0005001909151018C0F9D1F90935101809370 +:100DE000500108C010924F0110924E011092510113 +:100DF000109250015FDE17C080916D02882319F4B4 +:100E000083E291E0E7DC80916D02183011F48150AB +:100E100006C0E82FF0E0EE57FD4F10838F5F809300 +:100E20006D02812FCFDCDF91CF911F910F91FF9049 +:100E3000EF90DF90CF9008950F931F93DF93CF93A0 +:100E40000F92CDB7DEB782DD0EDC82E591E06EE574 +:100E500071E037DA8EED91E06AEE71E032DA789483 +:100E600072DB2FEF39E648E1215030404040E1F796 +:100E700000C00000789478DB10E0AADB2EDE6BDB8C +:100E800097DB082F85DB402F552747FD5095209194 +:100E90004E0130914F01240F351F30934F012093A5 +:100EA0004E01682F772767FD7095809150019091D2 +:100EB0005101860F971F9093510180935001CA01F1 +:100EC00084DD112329F0882319F48983F3DD8981D6 +:100ED0002FEF39EF40E0215030404040E1F700C0B3 +:100EE0000000182FCACF923029F0933041F0913092 +:100EF000E9F417C02EE330E0EAEAF0E01BC08130ED +:100F000041F0813018F0823089F406C0E8EEF0E05C +:100F100005C0ECEEF0E002C0E6E0F1E0249130E044 +:100F200009C022E130E0E8E9F0E004C020E030E070 +:100F3000E0E0F0E0DA011196FC93EE93C901089528 +:100F4000282F392FF9018091D2029091D302861770 +:100F5000970718F4BC0120E034C061157105D9F77A +:100F60008091E8008E778093E800F5CF8EB38823D8 +:100F7000E9F18530B9F18091E80083FD35C08091B9 +:100F8000E80082FD29C08091E80080FF1AC08091AE +:100F9000F20090E006C021912093F1006150704072 +:100FA00001966115710519F088309105A0F321E0D3 +:100FB0008830910509F020E08091E8008E778093D9 +:100FC000E8006115710591F6222381F605C08EB304 +:100FD000882361F0853061F08091E80082FFF7CFCF +:100FE00080E0089583E0089581E0089582E0089507 +:100FF00083E00895E82FF92F8091D2029091D302D7 +:101000008617970718F4BC0120E036C061157105FA +:10101000D9F78091E8008E778093E800F5CF8EB302 +:10102000882309F43EC08530C1F18091E80083FD3A +:1010300036C08091E80082FD2AC08091E80080FFE0 +:101040001BC08091F20090E007C024912093F10032 +:1010500031966150704001966115710519F0883024 +:10106000910598F321E08830910509F020E0809106 +:10107000E8008E778093E8006115710581F62223E0 +:1010800071F605C08EB3882361F0853061F08091E0 +:10109000E80082FFF7CF80E0089583E0089581E0C3 +:1010A000089582E0089583E00895982F2CC0292F99 +:1010B0002F702093E900981739F07091EC0020917F +:1010C000ED005091F00003C0242F762F50E021FF57 +:1010D00019C03091EB003E7F3093EB003091ED0072 +:1010E0003D7F3093ED003091EB0031603093EB00A9 +:1010F0007093EC002093ED005093F0002091EE00EF +:1011000027FF08C09F5F953090F28F708093E900B1 +:1011100081E0089580E00895EF92FF920F931F936E +:10112000CF93DF93162FE82EE7017E01F92EE7011A +:1011300000E02AC09881992329F16B81E981FA8125 +:101140002C81892F8F70853018F56295660F660F98 +:10115000607C991F9927991F692B223010F096E027 +:1011600001C092E028E030E040E003C04F5F220F72 +:10117000331F2E173F07D0F34295407F492B95DF51 +:10118000882331F00F5F25960117A0F281E001C09E +:1011900080E0DF91CF911F910F91FF90EF90089524 +:1011A0008091CC0287FF11C003C08EB38823B1F0B9 +:1011B0008091E80082FFF9CF8091E8008B778093DF +:1011C000E80008958EB3882349F08091E80080FFFD +:1011D000F9CF8091E8008E778093E80008958091A0 +:1011E000E4009091E50044E62091EC0020FF25C04A +:1011F0002091E80020FD15C02EB32223A1F0253058 +:10120000A1F02091EB0025FD12C02091E400309167 +:10121000E5002817390741F3442359F04150C9012B +:10122000E3CF80E0089582E0089583E0089581E0AF +:10123000089584E0089580E008952091E80022FF59 +:10124000DBCFF9CF40D042D08091D8008F77809308 +:10125000D8008091D80080688093D8008091D80011 +:101260008F7D8093D80084E089BD86E089BD09B474 +:1012700000FEFDCF1EBA1092C8021092CA02109250 +:10128000C90280E060E042E010DF8091E1008E7FE3 +:101290008093E1008091E20081608093E200809180 +:1012A000E20088608093E2008091E0008E7F80936E +:1012B000E0000895E3E6F0E080818E7F808381E0A6 +:1012C0008093CB02BFCF1092E20008951092E1000C +:1012D00008951F920F920FB60F9211242F933F93F0 +:1012E0004F935F936F937F938F939F93AF93BF932E +:1012F000EF93FF938091E10082FF0AC08091E200AA +:1013000082FF06C08091E1008B7F8093E10022D2B2 +:101310008091E10080FF16C08091E20080FF12C042 +:101320008091E2008E7F8093E2008091E2008061F4 +:101330008093E2008091D80080628093D80019BC2D +:101340001EBAA7D98091E10084FF2CC08091E200F1 +:1013500084FF28C084E089BD86E089BD09B400FE11 +:10136000FDCF8091D8008F7D8093D8008091E100DF +:101370008F7E8093E1008091E2008F7E8093E20077 +:101380008091E20081608093E2008091C80288230E +:1013900021F48091E30087FF02C084E001C081E076 +:1013A0008EBB76D98091E10083FF26C08091E20058 +:1013B00083FF22C08091E100877F8093E10082E07B +:1013C0008EBB1092C8028091E1008E7F8093E10075 +:1013D0008091E2008E7F8093E2008091E200806144 +:1013E0008093E20080E060E042E05FDE8091F00008 +:1013F00088608093F000AED1FF91EF91BF91AF91E3 +:101400009F918F917F916F915F914F913F912F911C +:101410000F900FBE0F901F9018951F920F920FB64E +:101420000F9211241F932F933F934F935F936F93CA +:101430007F938F939F93AF93BF93EF93FF931091FD +:10144000E9001F708091EC001092E9008091F0009B +:10145000877F8093F00078941BD01092E9008091F0 +:10146000F00088608093F0001093E900FF91EF9105 +:10147000BF91AF919F918F917F916F915F914F91AC +:101480003F912F911F910F900FBE0F901F901895B5 +:101490001F93DF93CF93CDB7DEB7AC970FB6F89419 +:1014A000DEBF0FBECDBFECECF2E08091F100819386 +:1014B00022E0E43DF207C9F7F1D88091E80083FF0C +:1014C00031C18091CC022091CD02253009F484C035 +:1014D000263040F42130A1F1213070F0233009F0A2 +:1014E00021C12EC0283009F4EFC0293009F4FEC014 +:1014F000263009F017C192C0803821F0823809F0F7 +:1015000011C108C08091C9029091CA02992371F05B +:1015100082600CC08091D0028F708093E90090911E +:10152000EB0081E095FF80E01092E9009091E800E7 +:10153000977F9093E8008093F1001092F100CFC064 +:10154000882319F0823009F0EDC090E08F7190701F +:10155000009729F08230910509F0E4C00BC080911A +:10156000CE02813009F0DEC0233009F080E08093A4 +:10157000CA022CC08091CE02882341F52091D0026E +:101580002F7009F4CFC02093E9008091EB0080FF19 +:101590001DC08091CD02833021F48091EB008062E8 +:1015A00013C08091EB0080618093EB0081E090E0BC +:1015B00002C0880F991F2A95E2F78093EA001092E3 +:1015C000EA008091EB0088608093EB001092E900C4 +:1015D0008091E800877F86C0882309F0A3C010911E +:1015E000CE021F778091E3008078812B8093E30007 +:1015F0008091E800877F8093E800D2DD8091E80049 +:1016000080FFFCCF8091E30080688093E30011238A +:1016100011F083E001C082E08EBB84C0805882302C +:1016200008F080C08091CE029091CF0223E08C3DE3 +:10163000920791F583E08C838AE28B835FB7F894FD +:10164000DE01159680E090E04EE061E2E42FF0E0EC +:1016500060935700E49180FF03C0E295EF704F5F05 +:10166000EF702E2F30E0EA3018F0295C3F4F02C0B7 +:10167000205D3F4F2D933D9301968431910531F7C5 +:101680005FBF8091E800877F8093E800CE010396DA +:101690006AE270E055DC12C06091D002AE014F5F8B +:1016A0005F4F21DCBC01009709F43CC08091E80049 +:1016B000877F8093E80089819A819CDC8091E80093 +:1016C0008B778093E8002EC0803861F58091E80028 +:1016D000877F8093E8008091C8028093F100809119 +:1016E000E8008E778093E8005BDD1CC08823D1F48E +:1016F0009091CE029230B0F48091E800877F809381 +:10170000E8009093C8024CDD8091C802882321F440 +:101710008091E30087FF02C084E001C081E08EBBBE +:101720000E944A038091E80083FF0AC08091E8008C +:10173000877F8093E8008091EB0080628093EB00CC +:10174000AC960FB6F894DEBF0FBECDBFCF91DF9140 +:101750001F91089508951F938EB38823A9F0809157 +:10176000E9008F709091EC0090FF02C010E801C07A +:1017700010E0182B1092E9008091E80083FF01C06F +:1017800087DE1F701093E9001F910895CF93DF93B8 +:10179000EC018091E80083FFA3C0888190E0209154 +:1017A000D0023091D1022817390709F099C08091F1 +:1017B000CD02813269F0823220F4803209F090C08B +:1017C0003CC0823209F46BC0833209F089C07AC010 +:1017D0008091CC02813A09F083C08091E800877F34 +:1017E0008093E8008091E80080FFFCCF8C899D8980 +:1017F000AE89BF898093F100292F3A2F4B2F5527AF +:101800002093F1009D01442755272093F1008B2F51 +:101810009927AA27BB278093F100888D8093F10038 +:10182000898D8093F1008A8D8093F1008091E8008A +:101830008E778093E800B4DC53C08091CC02813273 +:1018400009F04EC08091E800877F8093E80004C0D3 +:101850008EB3882309F444C08091E80082FFF8CF5A +:101860003091F1002091F1009091F1008091F10010 +:101870003C8B2D8B9E8B8F8B8091F100888F80917C +:10188000F100898F8091F1008A8F8091E8008B7739 +:101890008093E80085DCCE010E947C0321C080910A +:1018A000CC028132E9F48091E800877F8093E800E0 +:1018B00077DC8091CE029091CF02998B888BCE01FC +:1018C000D4D00EC08091CC02813251F48091E800D6 +:1018D000877F8093E80064DCCE016091CE02C5D0A2 +:1018E000DF91CF910895CF93DF93EC014096FC01F7 +:1018F0008BE0DF011D928A95E9F782E08C8389876E +:1019000083E08E87CE01019661E006DC882359F0E2 +:10191000CE01069661E000DC882329F0CE010B960B +:1019200061E0FADB01C080E0DF91CF910895DF93A1 +:10193000CF930F92CDB7DEB7FC018EB38430F9F4AC +:101940002489358946895789211531054105510575 +:10195000B1F081818F708093E9008091E80085FD6E +:101960000AC08091E8008E778093E800698337DCB5 +:101970006981882329F46093F10080E001C082E04E +:101980000F90CF91DF910895FC018EB3843019F54B +:101990002489358946895789211531054105510525 +:1019A000D1F081818F708093E9008091F2008823CB +:1019B000A1F09091E8008091E8008E778093E80094 +:1019C00095FD0DC00CDC882359F49091E8009E77BA +:1019D0009093E800089582E0089580E0089580E003 +:1019E00008952EB3243099F4FC0124893589468961 +:1019F0005789211531054105510549F021812F7085 +:101A00002093E9002091E80020FF01C0BDCF089598 +:101A1000FC018EB3843029F524893589468957899C +:101A20002115310541055105E1F086818F708093C4 +:101A3000E9008091E80082FF14C08091F2008823C1 +:101A400021F02091F10030E002C02FEF3FEF8091B4 +:101A5000F200882341F48091E8008B778093E800BE +:101A600002C02FEF3FEFC901089508955058BB27DA +:101A7000AA270ED070C161D130F066D120F031F4C8 +:101A80009F3F11F41EF456C10EF4E095E7FB4CC1E4 +:101A9000E92F72D180F3BA1762077307840795079D +:101AA00018F071F49EF58AC10EF4E0950B2EBA2F52 +:101AB000A02D0B01B90190010C01CA01A001112454 +:101AC000FF27591B99F0593F50F4503E68F11A1600 +:101AD000F040A22F232F342F4427585FF3CF469591 +:101AE00037952795A795F0405395C9F77EF41F16B3 +:101AF000BA0B620B730B840BBAF09150A1F0FF0F7D +:101B0000BB1F661F771F881FC2F70EC0BA0F621F68 +:101B1000731F841F48F4879577956795B795F79558 +:101B20009E3F08F0B3CF9395880F08F09927EE0FEA +:101B3000979587950895D4D008F481E008950CD046 +:101B40000AC102D140F0F9D030F021F45F3F19F022 +:101B5000EBC0511134C1EEC00FD198F39923C9F3F2 +:101B60005523B1F3951B550BBB27AA2762177307A3 +:101B7000840738F09F5F5F4F220F331F441FAA1F57 +:101B8000A9F333D00E2E3AF0E0E830D09150504017 +:101B9000E695001CCAF729D0FE2F27D0660F771FC5 +:101BA000881FBB1F261737074807AB07B0E809F0A7 +:101BB000BB0B802DBF01FF2793585F4F2AF09E3F3C +:101BC000510568F0B1C0FBC05F3FECF3983EDCF319 +:101BD000869577956795B795F7959F5FC9F7880FB5 +:101BE000911D9695879597F90895E1E0660F771F07 +:101BF000881FBB1F621773078407BA0720F0621B98 +:101C0000730B840BBA0BEE1F88F7E0950895BCD0D8 +:101C100088F09F5790F0B92F9927B751A0F0D1F0D5 +:101C2000660F771F881F991F1AF0BA95C9F712C05F +:101C3000B13081F0C3D0B1E00895C0C0672F782FD4 +:101C40008827B85F39F0B93FCCF3869577956795CB +:101C5000B395D9F73EF490958095709561957F4F37 +:101C60008F4F9F4F0895E89409C097FB3EF49095DD +:101C70008095709561957F4F8F4F9F4F9923A9F065 +:101C8000F92F96E9BB279395F695879577956795F4 +:101C9000B795F111F8CFFAF4BB0F11F460FF1BC038 +:101CA0006F5F7F4F8F4F9F4F16C0882311F096E9CB +:101CB00011C0772321F09EE8872F762F05C0662379 +:101CC00071F096E8862F70E060E02AF09A95660F32 +:101CD000771F881FDAF7880F9695879597F90895EB +:101CE000990F0008550FAA0BE0E8FEEF161617062D +:101CF000E807F907C0F012161306E407F50798F095 +:101D0000621B730B840B950B39F40A2661F0232BAD +:101D1000242B252B21F408950A2609F4A140A69529 +:101D20008FEF811D811D089597F99F6780E870E00E +:101D300060E008959FEF80EC089500240A94161641 +:101D4000170618060906089500240A9412161306A9 +:101D5000140605060895092E0394000C11F4882337 +:101D600052F0BB0F40F4BF2B11F460FF04C06F5F53 +:101D70007F4F8F4F9F4F089557FD9058440F551F29 +:101D800059F05F3F71F04795880F97FB991F61F0FD +:101D90009F3F79F087950895121613061406551F74 +:101DA000F2CF4695F1DF08C0161617061806991FE0 +:101DB000F1CF86957105610508940895E894BB27D5 +:101DC00066277727CB0197F908958ADF08F48FEF0C +:101DD00008955527002480FF02C0060E571F660F86 +:101DE000771F6115710521F096958795009799F7F2 +:101DF000952F802D0895AA1BBB1B51E107C0AA1F78 +:101E0000BB1FA617B70710F0A61BB70B881F991F9B +:101E10005A95A9F780959095BC01CD01089597FB3F +:101E2000092E07260AD077FD04D0E5DF06D0002072 +:101E30001AF4709561957F4F0895F6F79095819506 +:101E40009F4F0895A1E21A2EAA1BBB1BFD010DC0D6 +:101E5000AA1FBB1FEE1FFF1FA217B307E407F5075A +:101E600020F0A21BB30BE40BF50B661F771F881F36 +:101E7000991F1A9469F760957095809590959B01CC +:101E8000AC01BD01CF010895FC0188279927E89492 +:101E900021912032E9F3293010F02E30C8F32B3293 +:101EA00039F02D3231F4689403C01AD0820F911D9D +:101EB000219120532A30C8F31EF4909581959F4FAD +:101EC0000895FB01DC014150504048F001900D9213 +:101ED0000020C9F701C01D9241505040E0F708951D +:101EE000BC01880F991F880F991F860F971F880FB5 +:081EF000991F0895F894FFCF3B +:101EF800785F706F733A20002020795F706F733AB3 +:101F080020000D000D0A00474F544F20004D4F563A +:101F18004520000D0A242000008310000001041051 +:101F2800000001820800000100000000000000001D +:0E1F38000000000A0905063020EC0027010019 :00000001FF diff --git a/firmware/USBtoSerial.lss b/firmware/USBtoSerial.lss index 4d9bd91..d1847ab 100644 --- a/firmware/USBtoSerial.lss +++ b/firmware/USBtoSerial.lss @@ -3,35 +3,35 @@ USBtoSerial.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 0000007a 00800100 00001e88 00001f1c 2**0 + 0 .data 0000004e 00800100 00001ef8 00001f8c 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 00001e88 00000000 00000000 00000094 2**1 + 1 .text 00001ef8 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000176 0080017a 0080017a 00001f96 2**0 + 2 .bss 00000186 0080014e 0080014e 00001fda 2**0 ALLOC - 3 .stab 0000255c 00000000 00000000 00001f98 2**2 + 3 .stab 0000255c 00000000 00000000 00001fdc 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 000004d5 00000000 00000000 000044f4 2**0 + 4 .stabstr 000004d5 00000000 00000000 00004538 2**0 CONTENTS, READONLY, DEBUGGING - 5 .debug_aranges 00000590 00000000 00000000 000049c9 2**0 + 5 .debug_aranges 000005a0 00000000 00000000 00004a0d 2**0 CONTENTS, READONLY, DEBUGGING - 6 .debug_pubnames 00000f05 00000000 00000000 00004f59 2**0 + 6 .debug_pubnames 00000f39 00000000 00000000 00004fad 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00009207 00000000 00000000 00005e5e 2**0 + 7 .debug_info 000092a5 00000000 00000000 00005ee6 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 0000220b 00000000 00000000 0000f065 2**0 + 8 .debug_abbrev 0000220b 00000000 00000000 0000f18b 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 00007b46 00000000 00000000 00011270 2**0 + 9 .debug_line 00007bdc 00000000 00000000 00011396 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 000008e0 00000000 00000000 00018db8 2**2 + 10 .debug_frame 00000900 00000000 00000000 00018f74 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00003d5d 00000000 00000000 00019698 2**0 + 11 .debug_str 00003d96 00000000 00000000 00019874 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 00004a7a 00000000 00000000 0001d3f5 2**0 + 12 .debug_loc 00004b07 00000000 00000000 0001d60a 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_pubtypes 00001111 00000000 00000000 00021e6f 2**0 + 13 .debug_pubtypes 00001111 00000000 00000000 00022111 2**0 CONTENTS, READONLY, DEBUGGING - 14 .debug_ranges 00000818 00000000 00000000 00022f80 2**0 + 14 .debug_ranges 00000828 00000000 00000000 00023222 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -71,8 +71,8 @@ Disassembly of section .text: 26: 00 00 nop 28: a2 c0 rjmp .+324 ; 0x16e <__bad_interrupt> 2a: 00 00 nop - 2c: 0c 94 31 09 jmp 0x1262 ; 0x1262 <__vector_11> - 30: 0c 94 d5 09 jmp 0x13aa ; 0x13aa <__vector_12> + 2c: 0c 94 69 09 jmp 0x12d2 ; 0x12d2 <__vector_11> + 30: 0c 94 0d 0a jmp 0x141a ; 0x141a <__vector_12> 34: 9c c0 rjmp .+312 ; 0x16e <__bad_interrupt> 36: 00 00 nop 38: 9a c0 rjmp .+308 ; 0x16e <__bad_interrupt> @@ -158,18 +158,18 @@ Disassembly of section .text: 142: 11 e0 ldi r17, 0x01 ; 1 144: a0 e0 ldi r26, 0x00 ; 0 146: b1 e0 ldi r27, 0x01 ; 1 - 148: e8 e8 ldi r30, 0x88 ; 136 + 148: e8 ef ldi r30, 0xF8 ; 248 14a: fe e1 ldi r31, 0x1E ; 30 14c: 02 c0 rjmp .+4 ; 0x152 <__do_copy_data+0x10> 14e: 05 90 lpm r0, Z+ 150: 0d 92 st X+, r0 - 152: aa 37 cpi r26, 0x7A ; 122 + 152: ae 34 cpi r26, 0x4E ; 78 154: b1 07 cpc r27, r17 156: d9 f7 brne .-10 ; 0x14e <__do_copy_data+0xc> 00000158 <__do_clear_bss>: 158: 12 e0 ldi r17, 0x02 ; 2 - 15a: aa e7 ldi r26, 0x7A ; 122 + 15a: ae e4 ldi r26, 0x4E ; 78 15c: b1 e0 ldi r27, 0x01 ; 1 15e: 01 c0 rjmp .+2 ; 0x162 <.do_clear_bss_start> @@ -177,11 +177,11 @@ Disassembly of section .text: 160: 1d 92 st X+, r1 00000162 <.do_clear_bss_start>: - 162: a0 3f cpi r26, 0xF0 ; 240 + 162: a4 3d cpi r26, 0xD4 ; 212 164: b1 07 cpc r27, r17 166: e1 f7 brne .-8 ; 0x160 <.do_clear_bss_loop> - 168: 2f d6 rcall .+3166 ; 0xdc8
- 16a: 0c 94 42 0f jmp 0x1e84 ; 0x1e84 <_exit> + 168: 67 d6 rcall .+3278 ; 0xe38
+ 16a: 0c 94 7a 0f jmp 0x1ef4 ; 0x1ef4 <_exit> 0000016e <__bad_interrupt>: 16e: 48 cf rjmp .-368 ; 0x0 <__vectors> @@ -540,9 +540,9 @@ ISR( TIMER0_OVF_vect) { 2f4: 11 24 eor r1, r1 2f6: 8f 93 push r24 t0ovfcount++; - 2f8: 80 91 e2 02 lds r24, 0x02E2 + 2f8: 80 91 c6 02 lds r24, 0x02C6 2fc: 8f 5f subi r24, 0xFF ; 255 - 2fe: 80 93 e2 02 sts 0x02E2, r24 + 2fe: 80 93 c6 02 sts 0x02C6, r24 } 302: 8f 91 pop r24 304: 0f 90 pop r0 @@ -556,7 +556,7 @@ ISR( TIMER0_OVF_vect) { uint16_t t0ext(void) { return (t0ovfcount * 256 + (u16) TCNT0); // return current counter value 30e: 86 b5 in r24, 0x26 ; 38 - 310: 30 91 e2 02 lds r19, 0x02E2 + 310: 30 91 c6 02 lds r19, 0x02C6 314: 20 e0 ldi r18, 0x00 ; 0 316: 28 0f add r18, r24 318: 31 1d adc r19, r1 @@ -571,7 +571,7 @@ void t0rst(void) { TCNT0 = 0; // set counter to zero 31e: 16 bc out 0x26, r1 ; 38 t0ovfcount = 0; // set overflow counter to zero - 320: 10 92 e2 02 sts 0x02E2, r1 + 320: 10 92 c6 02 sts 0x02C6, r1 } 324: 08 95 ret @@ -609,12 +609,12 @@ u08 adb(void) { 340: bc 01 movw r22, r24 342: 80 e0 ldi r24, 0x00 ; 0 344: 90 e0 ldi r25, 0x00 ; 0 - 346: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 346: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 34a: 20 e0 ldi r18, 0x00 ; 0 34c: 30 e8 ldi r19, 0x80 ; 128 34e: 4e e0 ldi r20, 0x0E ; 14 350: 53 e4 ldi r21, 0x43 ; 67 - 352: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2> + 352: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2> 356: 87 fd sbrc r24, 7 358: f2 cf rjmp .-28 ; 0x33e ; // Warteschleife @@ -641,12 +641,12 @@ u08 adb(void) { 36c: bc 01 movw r22, r24 36e: 80 e0 ldi r24, 0x00 ; 0 370: 90 e0 ldi r25, 0x00 ; 0 - 372: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 372: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 376: 20 e0 ldi r18, 0x00 ; 0 378: 30 e0 ldi r19, 0x00 ; 0 37a: 4c e8 ldi r20, 0x8C ; 140 37c: 52 e4 ldi r21, 0x42 ; 66 - 37e: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2> + 37e: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2> 382: 87 fd sbrc r24, 7 384: f2 cf rjmp .-28 ; 0x36a ; @@ -659,12 +659,12 @@ u08 adb(void) { 38c: bc 01 movw r22, r24 38e: 80 e0 ldi r24, 0x00 ; 0 390: 90 e0 ldi r25, 0x00 ; 0 - 392: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 392: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 396: 20 e0 ldi r18, 0x00 ; 0 398: 30 e0 ldi r19, 0x00 ; 0 39a: 48 e4 ldi r20, 0x48 ; 72 39c: 53 e4 ldi r21, 0x43 ; 67 - 39e: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2> + 39e: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2> 3a2: 87 fd sbrc r24, 7 3a4: f2 cf rjmp .-28 ; 0x38a 3a6: 41 c0 rjmp .+130 ; 0x42a @@ -681,7 +681,7 @@ u08 adb(void) { if (adb_werte[z_byte] & bitpos) 3ae: e1 2e mov r14, r17 3b0: ff 24 eor r15, r15 - 3b2: 89 ec ldi r24, 0xC9 ; 201 + 3b2: 8d ea ldi r24, 0xAD ; 173 3b4: 92 e0 ldi r25, 0x02 ; 2 3b6: e8 0e add r14, r24 3b8: f9 1e adc r15, r25 @@ -706,12 +706,12 @@ u08 adb(void) { 3ca: bc 01 movw r22, r24 3cc: 80 e0 ldi r24, 0x00 ; 0 3ce: 90 e0 ldi r25, 0x00 ; 0 - 3d0: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 3d0: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 3d4: 20 e0 ldi r18, 0x00 ; 0 3d6: 30 e0 ldi r19, 0x00 ; 0 3d8: 4c e8 ldi r20, 0x8C ; 140 3da: 52 e4 ldi r21, 0x42 ; 66 - 3dc: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2> + 3dc: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2> 3e0: 87 fd sbrc r24, 7 3e2: f2 cf rjmp .-28 ; 0x3c8 3e4: 0e c0 rjmp .+28 ; 0x402 @@ -722,12 +722,12 @@ u08 adb(void) { 3e8: bc 01 movw r22, r24 3ea: 80 e0 ldi r24, 0x00 ; 0 3ec: 90 e0 ldi r25, 0x00 ; 0 - 3ee: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 3ee: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 3f2: 20 e0 ldi r18, 0x00 ; 0 3f4: 30 e0 ldi r19, 0x00 ; 0 3f6: 42 e0 ldi r20, 0x02 ; 2 3f8: 53 e4 ldi r21, 0x43 ; 67 - 3fa: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2> + 3fa: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2> 3fe: 87 fd sbrc r24, 7 400: f2 cf rjmp .-28 ; 0x3e6 ; @@ -740,12 +740,12 @@ u08 adb(void) { 408: bc 01 movw r22, r24 40a: 80 e0 ldi r24, 0x00 ; 0 40c: 90 e0 ldi r25, 0x00 ; 0 - 40e: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 40e: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 412: 20 e0 ldi r18, 0x00 ; 0 414: 30 e0 ldi r19, 0x00 ; 0 416: 48 e4 ldi r20, 0x48 ; 72 418: 53 e4 ldi r21, 0x43 ; 67 - 41a: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2> + 41a: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2> 41e: 87 fd sbrc r24, 7 420: f2 cf rjmp .-28 ; 0x406 ADB_POUT |= ADB_BIT; @@ -783,12 +783,12 @@ u08 adb(void) { 438: bc 01 movw r22, r24 43a: 80 e0 ldi r24, 0x00 ; 0 43c: 90 e0 ldi r25, 0x00 ; 0 - 43e: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 43e: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 442: 20 e0 ldi r18, 0x00 ; 0 444: 30 e0 ldi r19, 0x00 ; 0 446: 42 e0 ldi r20, 0x02 ; 2 448: 53 e4 ldi r21, 0x43 ; 67 - 44a: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2> + 44a: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2> 44e: 87 fd sbrc r24, 7 450: f2 cf rjmp .-28 ; 0x436 ; @@ -801,19 +801,19 @@ u08 adb(void) { 458: bc 01 movw r22, r24 45a: 80 e0 ldi r24, 0x00 ; 0 45c: 90 e0 ldi r25, 0x00 ; 0 - 45e: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 45e: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 462: 20 e0 ldi r18, 0x00 ; 0 464: 30 e0 ldi r19, 0x00 ; 0 466: 48 e4 ldi r20, 0x48 ; 72 468: 53 e4 ldi r21, 0x43 ; 67 - 46a: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2> + 46a: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2> 46e: 87 fd sbrc r24, 7 470: f2 cf rjmp .-28 ; 0x456 ; // Entscheidung, ob noch weitere Daten übertragen werden if (adb_werte[0] == COM_LISTEN3) - 472: 80 91 c9 02 lds r24, 0x02C9 + 472: 80 91 ad 02 lds r24, 0x02AD 476: 8b 33 cpi r24, 0x3B ; 59 478: 29 f0 breq .+10 ; 0x484 anzahl_out = 2 + 1; @@ -852,12 +852,12 @@ u08 adb(void) { 492: bc 01 movw r22, r24 494: 80 e0 ldi r24, 0x00 ; 0 496: 90 e0 ldi r25, 0x00 ; 0 - 498: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 498: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 49c: 20 e0 ldi r18, 0x00 ; 0 49e: 30 e0 ldi r19, 0x00 ; 0 4a0: 4a ef ldi r20, 0xFA ; 250 4a2: 53 e4 ldi r21, 0x43 ; 67 - 4a4: 0e 94 ad 0e call 0x1d5a ; 0x1d5a <__gesf2> + 4a4: 0e 94 e5 0e call 0x1dca ; 0x1dca <__gesf2> 4a8: 18 16 cp r1, r24 4aa: 0c f4 brge .+2 ; 0x4ae 4ac: 42 c0 rjmp .+132 ; 0x532 <__stack+0x33> @@ -869,7 +869,7 @@ u08 adb(void) { while (!(ADB_PIN & ADB_BIT)) 4b2: 48 9b sbis 0x09, 0 ; 9 4b4: fe cf rjmp .-4 ; 0x4b2 - 4b6: ca ec ldi r28, 0xCA ; 202 + 4b6: ce ea ldi r28, 0xAE ; 174 4b8: d2 e0 ldi r29, 0x02 ; 2 4ba: 11 e0 ldi r17, 0x01 ; 1 4bc: 01 c0 rjmp .+2 ; 0x4c0 @@ -902,12 +902,12 @@ u08 adb(void) { 4ce: bc 01 movw r22, r24 4d0: 80 e0 ldi r24, 0x00 ; 0 4d2: 90 e0 ldi r25, 0x00 ; 0 - 4d4: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 4d4: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 4d8: 20 e0 ldi r18, 0x00 ; 0 4da: 30 e0 ldi r19, 0x00 ; 0 4dc: 48 e4 ldi r20, 0x48 ; 72 4de: 53 e4 ldi r21, 0x43 ; 67 - 4e0: 0e 94 ad 0e call 0x1d5a ; 0x1d5a <__gesf2> + 4e0: 0e 94 e5 0e call 0x1dca ; 0x1dca <__gesf2> 4e4: 18 16 cp r1, r24 4e6: 14 f4 brge .+4 ; 0x4ec return (z_byte - 1); @@ -928,12 +928,12 @@ u08 adb(void) { 4f8: bc 01 movw r22, r24 4fa: 80 e0 ldi r24, 0x00 ; 0 4fc: 90 e0 ldi r25, 0x00 ; 0 - 4fe: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 4fe: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 502: 20 e0 ldi r18, 0x00 ; 0 504: 30 e0 ldi r19, 0x00 ; 0 506: 48 ec ldi r20, 0xC8 ; 200 508: 52 e4 ldi r21, 0x42 ; 66 - 50a: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2> + 50a: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2> 50e: 87 ff sbrs r24, 7 510: 03 c0 rjmp .+6 ; 0x518 <__stack+0x19> adb_werte[z_byte] += bitpos; @@ -1020,12 +1020,12 @@ void touchpad_init(void) { uint8_t touchpad_read(void) { adb_werte[0] = COM_TALK0; 556: 8c e3 ldi r24, 0x3C ; 60 - 558: 80 93 c9 02 sts 0x02C9, r24 + 558: 80 93 ad 02 sts 0x02AD, r24 adb_data_length = adb(); 55c: e4 de rcall .-568 ; 0x326 - 55e: 80 93 e3 02 sts 0x02E3, r24 + 55e: 80 93 c7 02 sts 0x02C7, r24 return adb_data_length; - 562: 80 91 e3 02 lds r24, 0x02E3 + 562: 80 91 c7 02 lds r24, 0x02C7 } 566: 08 95 ret @@ -1037,13 +1037,13 @@ void touchpad_set_rel_mode_100dpi(void) { // Auf Relativmodus umschalten adb_werte[0] = COM_LISTEN3; 568: 8b e3 ldi r24, 0x3B ; 59 - 56a: 80 93 c9 02 sts 0x02C9, r24 + 56a: 80 93 ad 02 sts 0x02AD, r24 adb_werte[1] = BITS(0110,0011); 56e: 83 e6 ldi r24, 0x63 ; 99 - 570: 80 93 ca 02 sts 0x02CA, r24 + 570: 80 93 ae 02 sts 0x02AE, r24 adb_werte[2] = 1; //default modus: 100 dpi mouse 574: 81 e0 ldi r24, 0x01 ; 1 - 576: 80 93 cb 02 sts 0x02CB, r24 + 576: 80 93 af 02 sts 0x02AF, r24 adb(); 57a: d5 de rcall .-598 ; 0x326 #else @@ -1073,13 +1073,13 @@ void touchpad_set_rel_mode_100dpi(void) { int8_t delta_y(void) { if(adb_data_length ==0) { - 590: 80 91 e3 02 lds r24, 0x02E3 + 590: 80 91 c7 02 lds r24, 0x02C7 594: 88 23 and r24, r24 596: 51 f0 breq .+20 ; 0x5ac return 0; } if (adb_werte[1] & 0b01000000) { - 598: 80 91 ca 02 lds r24, 0x02CA + 598: 80 91 ae 02 lds r24, 0x02AE 59c: 86 ff sbrs r24, 6 59e: 04 c0 rjmp .+8 ; 0x5a8 return -((128 - adb_werte[1]) & 0b00111111); @@ -1110,13 +1110,13 @@ int8_t delta_y(void) { int8_t delta_x(void) { if(adb_data_length ==0) { - 5b0: 80 91 e3 02 lds r24, 0x02E3 + 5b0: 80 91 c7 02 lds r24, 0x02C7 5b4: 88 23 and r24, r24 5b6: 51 f0 breq .+20 ; 0x5cc return 0; } if (adb_werte[2] & 0b01000000) { - 5b8: 80 91 cb 02 lds r24, 0x02CB + 5b8: 80 91 af 02 lds r24, 0x02AF 5bc: 86 ff sbrs r24, 6 5be: 04 c0 rjmp .+8 ; 0x5c8 return -((128 - adb_werte[2]) & 0b00111111); @@ -1171,8 +1171,8 @@ void Usb2SerialTask(void) { GlobalInterruptDisable(); Count = Buffer->Count; - 5d6: 20 91 88 01 lds r18, 0x0188 - 5da: 30 91 89 01 lds r19, 0x0189 + 5d6: 20 91 5c 01 lds r18, 0x015C + 5da: 30 91 5d 01 lds r19, 0x015D static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); @@ -1183,16 +1183,16 @@ void Usb2SerialTask(void) { /* Only try to read in bytes from the CDC interface if the transmit buffer is not full */ if (!(RingBuffer_IsFull(&USBtoUSART_Buffer))) - 5e0: 80 91 86 01 lds r24, 0x0186 - 5e4: 90 91 87 01 lds r25, 0x0187 + 5e0: 80 91 5a 01 lds r24, 0x015A + 5e4: 90 91 5b 01 lds r25, 0x015B 5e8: 28 17 cp r18, r24 5ea: 39 07 cpc r19, r25 5ec: 51 f0 breq .+20 ; 0x602 { int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); - 5ee: 84 e5 ldi r24, 0x54 ; 84 + 5ee: 88 e2 ldi r24, 0x28 ; 40 5f0: 91 e0 ldi r25, 0x01 ; 1 - 5f2: 0e 94 d0 0c call 0x19a0 ; 0x19a0 + 5f2: 0e 94 08 0d call 0x1a10 ; 0x1a10 5f6: bc 01 movw r22, r24 /* Read bytes from the USB OUT endpoint into the USART transmit buffer */ @@ -1200,7 +1200,7 @@ void Usb2SerialTask(void) { 5f8: 97 fd sbrc r25, 7 5fa: 03 c0 rjmp .+6 ; 0x602 RingBuffer_Insert(&USBtoUSART_Buffer, ReceivedByte); - 5fc: 8e e7 ldi r24, 0x7E ; 126 + 5fc: 82 e5 ldi r24, 0x52 ; 82 5fe: 91 e0 ldi r25, 0x01 ; 1 600: b7 dd rcall .-1170 ; 0x170 static inline uint_reg_t GetGlobalInterruptMask(void) @@ -1217,8 +1217,8 @@ void Usb2SerialTask(void) { #if (ARCH == ARCH_AVR8) cli(); 604: f8 94 cli - 606: 80 91 14 02 lds r24, 0x0214 - 60a: 90 91 15 02 lds r25, 0x0215 + 606: 80 91 e8 01 lds r24, 0x01E8 + 60a: 90 91 e9 01 lds r25, 0x01E9 static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); @@ -1239,7 +1239,7 @@ void Usb2SerialTask(void) { { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 614: 20 91 55 01 lds r18, 0x0155 + 614: 20 91 29 01 lds r18, 0x0129 618: 2f 70 andi r18, 0x0F ; 15 61a: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. @@ -1277,15 +1277,15 @@ void Usb2SerialTask(void) { static inline uint8_t RingBuffer_Peek(RingBuffer_t* const Buffer) { return *Buffer->Out; - 634: e0 91 0c 02 lds r30, 0x020C - 638: f0 91 0d 02 lds r31, 0x020D + 634: e0 91 e0 01 lds r30, 0x01E0 + 638: f0 91 e1 01 lds r31, 0x01E1 { /* Try to send the next byte of data to the host, abort if there is an error without dequeuing */ if (CDC_Device_SendByte(&VirtualSerial_CDC_Interface, - 63c: 84 e5 ldi r24, 0x54 ; 84 + 63c: 88 e2 ldi r24, 0x28 ; 40 63e: 91 e0 ldi r25, 0x01 ; 1 640: 60 81 ld r22, Z - 642: 0e 94 5f 0c call 0x18be ; 0x18be + 642: 0e 94 97 0c call 0x192e ; 0x192e 646: 11 50 subi r17, 0x01 ; 1 648: 88 23 and r24, r24 64a: 29 f4 brne .+10 ; 0x656 @@ -1295,8 +1295,8 @@ void Usb2SerialTask(void) { /* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */ RingBuffer_Remove(&USARTtoUSB_Buffer); - 64c: 8a e0 ldi r24, 0x0A ; 10 - 64e: 92 e0 ldi r25, 0x02 ; 2 + 64c: 8e ed ldi r24, 0xDE ; 222 + 64e: 91 e0 ldi r25, 0x01 ; 1 650: aa dd rcall .-1196 ; 0x1a6 /* Never send more than one bank size less one byte to the host at a time, so that we don't block * while a Zero Length Packet (ZLP) to terminate the transfer is sent if the host isn't listening */ @@ -1312,11 +1312,11 @@ void Usb2SerialTask(void) { // sendPayload(&dummy,1,0); // } CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - 656: 84 e5 ldi r24, 0x54 ; 84 + 656: 88 e2 ldi r24, 0x28 ; 40 658: 91 e0 ldi r25, 0x01 ; 1 - 65a: 0e 94 b9 0c call 0x1972 ; 0x1972 + 65a: 0e 94 f1 0c call 0x19e2 ; 0x19e2 USB_USBTask(); - 65e: 0e 94 73 0b call 0x16e6 ; 0x16e6 + 65e: 0e 94 ab 0b call 0x1756 ; 0x1756 } 662: 1f 91 pop r17 @@ -1358,7 +1358,7 @@ void clock_prescale_set(clock_div_t __x) // LEDs_Init(); USB_Init(); } - 68e: da c5 rjmp .+2996 ; 0x1244 + 68e: 12 c6 rjmp .+3108 ; 0x12b4 00000690 : @@ -1385,9 +1385,9 @@ void EVENT_USB_Device_ConfigurationChanged(void) bool ConfigSuccess = true; ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); - 694: 84 e5 ldi r24, 0x54 ; 84 + 694: 88 e2 ldi r24, 0x28 ; 40 696: 91 e0 ldi r25, 0x01 ; 1 - 698: 0c 94 3b 0c jmp 0x1876 ; 0x1876 + 698: 0c 94 73 0c jmp 0x18e6 ; 0x18e6 0000069c : } @@ -1396,9 +1396,9 @@ void EVENT_USB_Device_ConfigurationChanged(void) void EVENT_USB_Device_ControlRequest(void) { CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); - 69c: 84 e5 ldi r24, 0x54 ; 84 + 69c: 88 e2 ldi r24, 0x28 ; 40 69e: 91 e0 ldi r25, 0x01 ; 1 - 6a0: 0c 94 8e 0b jmp 0x171c ; 0x171c + 6a0: 0c 94 c6 0b jmp 0x178c ; 0x178c 000006a4 <__vector_23>: @@ -1432,8 +1432,8 @@ ISR(USART1_RX_vect, ISR_BLOCK) 6cc: 84 30 cpi r24, 0x04 ; 4 6ce: 19 f4 brne .+6 ; 0x6d6 <__vector_23+0x32> RingBuffer_Insert(&USARTtoUSB_Buffer, ReceivedByte); - 6d0: 8a e0 ldi r24, 0x0A ; 10 - 6d2: 92 e0 ldi r25, 0x02 ; 2 + 6d0: 8e ed ldi r24, 0xDE ; 222 + 6d2: 91 e0 ldi r25, 0x01 ; 1 6d4: 4d dd rcall .-1382 ; 0x170 } 6d6: ff 91 pop r31 @@ -1479,7 +1479,7 @@ void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCI 710: a2 30 cpi r26, 0x02 ; 2 712: 28 f4 brcc .+10 ; 0x71e 714: b0 e0 ldi r27, 0x00 ; 0 - 716: ad 58 subi r26, 0x8D ; 141 + 716: a9 5b subi r26, 0xB9 ; 185 718: be 4f sbci r27, 0xFE ; 254 71a: 1c 91 ld r17, X 71c: 01 c0 rjmp .+2 ; 0x720 @@ -1541,28 +1541,28 @@ void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCI 75a: 87 95 ror r24 75c: 77 95 ror r23 75e: 67 95 ror r22 - 760: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 760: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 764: 20 e0 ldi r18, 0x00 ; 0 766: 34 e2 ldi r19, 0x24 ; 36 768: 44 ef ldi r20, 0xF4 ; 244 76a: 59 e4 ldi r21, 0x49 ; 73 - 76c: 0e 94 ff 0c call 0x19fe ; 0x19fe <__addsf3> + 76c: 0e 94 37 0d call 0x1a6e ; 0x1a6e <__addsf3> 770: 4b 01 movw r8, r22 772: 5c 01 movw r10, r24 774: c7 01 movw r24, r14 776: b6 01 movw r22, r12 - 778: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf> + 778: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf> 77c: 9b 01 movw r18, r22 77e: ac 01 movw r20, r24 780: c5 01 movw r24, r10 782: b4 01 movw r22, r8 - 784: 0e 94 67 0d call 0x1ace ; 0x1ace <__divsf3> + 784: 0e 94 9f 0d call 0x1b3e ; 0x1b3e <__divsf3> 788: 20 e0 ldi r18, 0x00 ; 0 78a: 30 e0 ldi r19, 0x00 ; 0 78c: 40 e8 ldi r20, 0x80 ; 128 78e: 5f e3 ldi r21, 0x3F ; 63 - 790: 0e 94 fe 0c call 0x19fc ; 0x19fc <__subsf3> - 794: 0e 94 cf 0d call 0x1b9e ; 0x1b9e <__fixunssfsi> + 790: 0e 94 36 0d call 0x1a6c ; 0x1a6c <__subsf3> + 794: 0e 94 07 0e call 0x1c0e ; 0x1c0e <__fixunssfsi> 798: 70 93 cd 00 sts 0x00CD, r23 79c: 60 93 cc 00 sts 0x00CC, r22 @@ -1601,8 +1601,8 @@ void uart_putc(unsigned char data) 7c8: 84 30 cpi r24, 0x04 ; 4 7ca: 19 f4 brne .+6 ; 0x7d2 RingBuffer_Insert(&USARTtoUSB_Buffer, data); - 7cc: 8a e0 ldi r24, 0x0A ; 10 - 7ce: 92 e0 ldi r25, 0x02 ; 2 + 7cc: 8e ed ldi r24, 0xDE ; 222 + 7ce: 91 e0 ldi r25, 0x01 ; 1 7d0: cf cc rjmp .-1634 ; 0x170 7d2: 08 95 ret @@ -1648,7 +1648,7 @@ void uart_puts(const char *s ) // convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { 7fa: 2f 92 push r2 7fc: 3f 92 push r3 7fe: 4f 92 push r4 @@ -1667,8 +1667,8 @@ void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { 818: 1f 93 push r17 81a: cf 93 push r28 81c: df 93 push r29 - 81e: 7b 01 movw r14, r22 - 820: 8c 01 movw r16, r24 + 81e: 6b 01 movw r12, r22 + 820: 7c 01 movw r14, r24 int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator @@ -1679,15 +1679,15 @@ void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { 82a: f9 1f adc r31, r25 82c: 10 82 st Z, r1 for (i = (no_digits - 1); i >= 0; i--) { - 82e: d2 2e mov r13, r18 - 830: da 94 dec r13 + 82e: 12 2f mov r17, r18 + 830: 11 50 subi r17, 0x01 ; 1 }/* uart_puts */ // convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 832: 4d 2c mov r4, r13 +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { + 832: 41 2e mov r4, r17 834: 55 24 eor r5, r5 836: 47 fc sbrc r4, 7 838: 50 94 com r5 @@ -1701,15 +1701,15 @@ void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { 840: aa 24 eor r10, r10 842: bb 24 eor r11, r11 if (zahl == 0 && i < (no_digits - 1)) { - string[i] = ' '; + string[i] = leading_char; } else { string[i] = (zahl % 10) + '0'; - 844: aa e0 ldi r26, 0x0A ; 10 - 846: 6a 2e mov r6, r26 + 844: fa e0 ldi r31, 0x0A ; 10 + 846: 6f 2e mov r6, r31 848: 71 2c mov r7, r1 84a: 81 2c mov r8, r1 84c: 91 2c mov r9, r1 -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator @@ -1719,5075 +1719,5162 @@ void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { 850: 08 94 sec 852: 21 08 sbc r2, r1 854: 31 08 sbc r3, r1 - string[i] = ' '; - 856: f0 e2 ldi r31, 0x20 ; 32 - 858: cf 2e mov r12, r31 // convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { - 85a: 22 c0 rjmp .+68 ; 0x8a0 + 856: 22 c0 rjmp .+68 ; 0x89c if (zahl == 0 && i < (no_digits - 1)) { - 85c: e1 14 cp r14, r1 + 858: c1 14 cp r12, r1 + 85a: d1 04 cpc r13, r1 + 85c: e1 04 cpc r14, r1 85e: f1 04 cpc r15, r1 - 860: 01 05 cpc r16, r1 - 862: 11 05 cpc r17, r1 - 864: 41 f4 brne .+16 ; 0x876 + 860: 41 f4 brne .+16 ; 0x872 }/* uart_puts */ // convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 866: c5 01 movw r24, r10 - 868: 84 0d add r24, r4 - 86a: 95 1d adc r25, r5 +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { + 862: c5 01 movw r24, r10 + 864: 84 0d add r24, r4 + 866: 95 1d adc r25, r5 int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { if (zahl == 0 && i < (no_digits - 1)) { - 86c: 82 15 cp r24, r2 - 86e: 93 05 cpc r25, r3 - 870: 14 f4 brge .+4 ; 0x876 - string[i] = ' '; - 872: c8 82 st Y, r12 - 874: 08 c0 rjmp .+16 ; 0x886 + 868: 82 15 cp r24, r2 + 86a: 93 05 cpc r25, r3 + 86c: 14 f4 brge .+4 ; 0x872 + string[i] = leading_char; + 86e: 08 83 st Y, r16 + 870: 08 c0 rjmp .+16 ; 0x882 } else { string[i] = (zahl % 10) + '0'; - 876: c8 01 movw r24, r16 - 878: b7 01 movw r22, r14 - 87a: a4 01 movw r20, r8 - 87c: 93 01 movw r18, r6 - 87e: 0e 94 ea 0e call 0x1dd4 ; 0x1dd4 <__udivmodsi4> - 882: 60 5d subi r22, 0xD0 ; 208 - 884: 68 83 st Y, r22 + 872: c7 01 movw r24, r14 + 874: b6 01 movw r22, r12 + 876: a4 01 movw r20, r8 + 878: 93 01 movw r18, r6 + 87a: 0e 94 22 0f call 0x1e44 ; 0x1e44 <__udivmodsi4> + 87e: 60 5d subi r22, 0xD0 ; 208 + 880: 68 83 st Y, r22 } // Modulo rechnen, dann den ASCII-Code von '0' addieren zahl /= 10; - 886: c8 01 movw r24, r16 - 888: b7 01 movw r22, r14 - 88a: a4 01 movw r20, r8 - 88c: 93 01 movw r18, r6 - 88e: 0e 94 ea 0e call 0x1dd4 ; 0x1dd4 <__udivmodsi4> - 892: 79 01 movw r14, r18 - 894: 8a 01 movw r16, r20 + 882: c7 01 movw r24, r14 + 884: b6 01 movw r22, r12 + 886: a4 01 movw r20, r8 + 888: 93 01 movw r18, r6 + 88a: 0e 94 22 0f call 0x1e44 ; 0x1e44 <__udivmodsi4> + 88e: 69 01 movw r12, r18 + 890: 7a 01 movw r14, r20 // convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { - 896: da 94 dec r13 - 898: 21 97 sbiw r28, 0x01 ; 1 - 89a: 08 94 sec - 89c: a1 08 sbc r10, r1 - 89e: b1 08 sbc r11, r1 - 8a0: d7 fe sbrs r13, 7 - 8a2: dc cf rjmp .-72 ; 0x85c + 892: 11 50 subi r17, 0x01 ; 1 + 894: 21 97 sbiw r28, 0x01 ; 1 + 896: 08 94 sec + 898: a1 08 sbc r10, r1 + 89a: b1 08 sbc r11, r1 + 89c: 17 ff sbrs r17, 7 + 89e: dc cf rjmp .-72 ; 0x858 string[i] = (zahl % 10) + '0'; } // Modulo rechnen, dann den ASCII-Code von '0' addieren zahl /= 10; } } - 8a4: df 91 pop r29 - 8a6: cf 91 pop r28 - 8a8: 1f 91 pop r17 - 8aa: 0f 91 pop r16 - 8ac: ff 90 pop r15 - 8ae: ef 90 pop r14 - 8b0: df 90 pop r13 - 8b2: cf 90 pop r12 - 8b4: bf 90 pop r11 - 8b6: af 90 pop r10 - 8b8: 9f 90 pop r9 - 8ba: 8f 90 pop r8 - 8bc: 7f 90 pop r7 - 8be: 6f 90 pop r6 - 8c0: 5f 90 pop r5 - 8c2: 4f 90 pop r4 - 8c4: 3f 90 pop r3 - 8c6: 2f 90 pop r2 - 8c8: 08 95 ret - -000008ca : + 8a0: df 91 pop r29 + 8a2: cf 91 pop r28 + 8a4: 1f 91 pop r17 + 8a6: 0f 91 pop r16 + 8a8: ff 90 pop r15 + 8aa: ef 90 pop r14 + 8ac: df 90 pop r13 + 8ae: cf 90 pop r12 + 8b0: bf 90 pop r11 + 8b2: af 90 pop r10 + 8b4: 9f 90 pop r9 + 8b6: 8f 90 pop r8 + 8b8: 7f 90 pop r7 + 8ba: 6f 90 pop r6 + 8bc: 5f 90 pop r5 + 8be: 4f 90 pop r4 + 8c0: 3f 90 pop r3 + 8c2: 2f 90 pop r2 + 8c4: 08 95 ret + +000008c6 : int8_t sign(int16_t x) { return (x > 0) - (x < 0); - 8ca: 21 e0 ldi r18, 0x01 ; 1 - 8cc: 18 16 cp r1, r24 - 8ce: 19 06 cpc r1, r25 - 8d0: 0c f0 brlt .+2 ; 0x8d4 - 8d2: 20 e0 ldi r18, 0x00 ; 0 - 8d4: 89 2f mov r24, r25 + 8c6: 21 e0 ldi r18, 0x01 ; 1 + 8c8: 18 16 cp r1, r24 + 8ca: 19 06 cpc r1, r25 + 8cc: 0c f0 brlt .+2 ; 0x8d0 + 8ce: 20 e0 ldi r18, 0x00 ; 0 + 8d0: 89 2f mov r24, r25 + 8d2: 88 1f adc r24, r24 + 8d4: 88 27 eor r24, r24 8d6: 88 1f adc r24, r24 - 8d8: 88 27 eor r24, r24 - 8da: 88 1f adc r24, r24 } - 8dc: 28 1b sub r18, r24 - 8de: 82 2f mov r24, r18 - 8e0: 08 95 ret - -000008e2 : - - -void uart_print_number(uint32_t zahl, uint8_t no_digits) { - 8e2: 24 2f mov r18, r20 - my_uitoa(abs(zahl),stringbuffer,no_digits); - 8e4: 77 ff sbrs r23, 7 - 8e6: 03 c0 rjmp .+6 ; 0x8ee - 8e8: 70 95 com r23 - 8ea: 61 95 neg r22 - 8ec: 7f 4f sbci r23, 0xFF ; 255 - 8ee: 88 27 eor r24, r24 - 8f0: 77 fd sbrc r23, 7 - 8f2: 80 95 com r24 - 8f4: 98 2f mov r25, r24 - 8f6: 42 ed ldi r20, 0xD2 ; 210 - 8f8: 52 e0 ldi r21, 0x02 ; 2 + 8d8: 28 1b sub r18, r24 + 8da: 82 2f mov r24, r18 + 8dc: 08 95 ret + +000008de : + my_uitoa(abs(zahl),stringbuffer,no_digits,' '); + uart_puts(stringbuffer); +} + + +void uart_print_number_wlzeros(uint32_t zahl, uint8_t no_digits) { + 8de: 0f 93 push r16 + 8e0: 24 2f mov r18, r20 + my_uitoa(abs(zahl),stringbuffer,no_digits,'0'); + 8e2: 77 ff sbrs r23, 7 + 8e4: 03 c0 rjmp .+6 ; 0x8ec + 8e6: 70 95 com r23 + 8e8: 61 95 neg r22 + 8ea: 7f 4f sbci r23, 0xFF ; 255 + 8ec: 88 27 eor r24, r24 + 8ee: 77 fd sbrc r23, 7 + 8f0: 80 95 com r24 + 8f2: 98 2f mov r25, r24 + 8f4: 46 eb ldi r20, 0xB6 ; 182 + 8f6: 52 e0 ldi r21, 0x02 ; 2 + 8f8: 00 e3 ldi r16, 0x30 ; 48 8fa: 7f df rcall .-258 ; 0x7fa uart_puts(stringbuffer); - 8fc: 82 ed ldi r24, 0xD2 ; 210 + 8fc: 86 eb ldi r24, 0xB6 ; 182 8fe: 92 e0 ldi r25, 0x02 ; 2 - + 900: 69 df rcall .-302 ; 0x7d4 } - 900: 69 cf rjmp .-302 ; 0x7d4 + 902: 0f 91 pop r16 + 904: 08 95 ret + +00000906 : -00000902 : void uart_print_signed_number(uint32_t zahl, uint8_t no_digits) { - 902: 0f 93 push r16 - 904: 1f 93 push r17 - 906: 24 2f mov r18, r20 - my_uitoa(abs(zahl),stringbuffer,no_digits); - 908: 8b 01 movw r16, r22 - 90a: 77 ff sbrs r23, 7 - 90c: 03 c0 rjmp .+6 ; 0x914 - 90e: 70 95 com r23 - 910: 61 95 neg r22 - 912: 7f 4f sbci r23, 0xFF ; 255 - 914: 88 27 eor r24, r24 - 916: 77 fd sbrc r23, 7 - 918: 80 95 com r24 - 91a: 98 2f mov r25, r24 - 91c: 42 ed ldi r20, 0xD2 ; 210 - 91e: 52 e0 ldi r21, 0x02 ; 2 - 920: 6c df rcall .-296 ; 0x7fa + 906: ff 92 push r15 + 908: 0f 93 push r16 + 90a: 1f 93 push r17 + 90c: 24 2f mov r18, r20 + my_uitoa(abs(zahl),stringbuffer,no_digits,' '); + 90e: f6 2e mov r15, r22 + 910: 17 2f mov r17, r23 + 912: 77 ff sbrs r23, 7 + 914: 03 c0 rjmp .+6 ; 0x91c + 916: 70 95 com r23 + 918: 61 95 neg r22 + 91a: 7f 4f sbci r23, 0xFF ; 255 + 91c: 88 27 eor r24, r24 + 91e: 77 fd sbrc r23, 7 + 920: 80 95 com r24 + 922: 98 2f mov r25, r24 + 924: 46 eb ldi r20, 0xB6 ; 182 + 926: 52 e0 ldi r21, 0x02 ; 2 + 928: 00 e2 ldi r16, 0x20 ; 32 + 92a: 67 df rcall .-306 ; 0x7fa if (sign(zahl) < 0) { - 922: c8 01 movw r24, r16 - 924: d2 df rcall .-92 ; 0x8ca - 926: 87 ff sbrs r24, 7 - 928: 02 c0 rjmp .+4 ; 0x92e + 92c: 8f 2d mov r24, r15 + 92e: 91 2f mov r25, r17 + 930: ca df rcall .-108 ; 0x8c6 + 932: 87 ff sbrs r24, 7 + 934: 02 c0 rjmp .+4 ; 0x93a uart_putc('-'); - 92a: 8d e2 ldi r24, 0x2D ; 45 - 92c: 01 c0 rjmp .+2 ; 0x930 + 936: 8d e2 ldi r24, 0x2D ; 45 + 938: 01 c0 rjmp .+2 ; 0x93c } else { uart_putc('+'); - 92e: 8b e2 ldi r24, 0x2B ; 43 - 930: 49 df rcall .-366 ; 0x7c4 + 93a: 8b e2 ldi r24, 0x2B ; 43 + 93c: 43 df rcall .-378 ; 0x7c4 } uart_puts(stringbuffer); - 932: 82 ed ldi r24, 0xD2 ; 210 - 934: 92 e0 ldi r25, 0x02 ; 2 - 936: 4e df rcall .-356 ; 0x7d4 + 93e: 86 eb ldi r24, 0xB6 ; 182 + 940: 92 e0 ldi r25, 0x02 ; 2 + 942: 48 df rcall .-368 ; 0x7d4 } - 938: 1f 91 pop r17 - 93a: 0f 91 pop r16 - 93c: 08 95 ret + 944: 1f 91 pop r17 + 946: 0f 91 pop r16 + 948: ff 90 pop r15 + 94a: 08 95 ret -0000093e : +0000094c : PORTY2 |= ((byte & (1<<2))>>2)<>3)< + 94c: 80 e0 ldi r24, 0x00 ; 0 + 94e: 44 dc rcall .-1912 ; 0x1d8 set_y(0); - 942: 80 e0 ldi r24, 0x00 ; 0 - 944: 84 dc rcall .-1784 ; 0x24e + 950: 80 e0 ldi r24, 0x00 ; 0 + 952: 7d dc rcall .-1798 ; 0x24e DDRX0 |= (1<: +00000966 : uint8_t motor_step(uint8_t motor, int8_t direction) { // motor: M1 or M2, direction +1 or -1, 0 for coil deactivation - 958: 0f 93 push r16 - 95a: 1f 93 push r17 - 95c: 16 2f mov r17, r22 - 95e: 82 30 cpi r24, 0x02 ; 2 - 960: 50 f4 brcc .+20 ; 0x976 - 962: a8 2f mov r26, r24 - 964: b0 e0 ldi r27, 0x00 ; 0 - 966: aa 0f add r26, r26 - 968: bb 1f adc r27, r27 - 96a: ab 58 subi r26, 0x8B ; 139 - 96c: be 4f sbci r27, 0xFE ; 254 - 96e: 2d 91 ld r18, X+ - 970: 3c 91 ld r19, X - 972: 11 97 sbiw r26, 0x01 ; 1 - 974: 02 c0 rjmp .+4 ; 0x97a - 976: 2c ee ldi r18, 0xEC ; 236 - 978: 30 e0 ldi r19, 0x00 ; 0 + 966: 0f 93 push r16 + 968: 1f 93 push r17 + 96a: 16 2f mov r17, r22 + 96c: 82 30 cpi r24, 0x02 ; 2 + 96e: 50 f4 brcc .+20 ; 0x984 + 970: a8 2f mov r26, r24 + 972: b0 e0 ldi r27, 0x00 ; 0 + 974: aa 0f add r26, r26 + 976: bb 1f adc r27, r27 + 978: a7 5b subi r26, 0xB7 ; 183 + 97a: be 4f sbci r27, 0xFE ; 254 + 97c: 2d 91 ld r18, X+ + 97e: 3c 91 ld r19, X + 980: 11 97 sbiw r26, 0x01 ; 1 + 982: 02 c0 rjmp .+4 ; 0x988 + 984: 2c ee ldi r18, 0xEC ; 236 + 986: 30 e0 ldi r19, 0x00 ; 0 case Y: setport = &set_y; break; } next_phase = (phase_memory[motor] + 4 + direction) % 4; - 97a: e8 2f mov r30, r24 - 97c: f0 e0 ldi r31, 0x00 ; 0 - 97e: 81 2f mov r24, r17 - 980: 99 27 eor r25, r25 - 982: 87 fd sbrc r24, 7 - 984: 90 95 com r25 - 986: 04 96 adiw r24, 0x04 ; 4 - 988: ee 53 subi r30, 0x3E ; 62 - 98a: fd 4f sbci r31, 0xFD ; 253 - 98c: 40 81 ld r20, Z - 98e: 84 0f add r24, r20 - 990: 91 1d adc r25, r1 - 992: 64 e0 ldi r22, 0x04 ; 4 - 994: 70 e0 ldi r23, 0x00 ; 0 - 996: 0e 94 d7 0e call 0x1dae ; 0x1dae <__divmodhi4> + 988: e8 2f mov r30, r24 + 98a: f0 e0 ldi r31, 0x00 ; 0 + 98c: 81 2f mov r24, r17 + 98e: 99 27 eor r25, r25 + 990: 87 fd sbrc r24, 7 + 992: 90 95 com r25 + 994: 04 96 adiw r24, 0x04 ; 4 + 996: ea 55 subi r30, 0x5A ; 90 + 998: fd 4f sbci r31, 0xFD ; 253 + 99a: 40 81 ld r20, Z + 99c: 84 0f add r24, r20 + 99e: 91 1d adc r25, r1 + 9a0: 64 e0 ldi r22, 0x04 ; 4 + 9a2: 70 e0 ldi r23, 0x00 ; 0 + 9a4: 0e 94 0f 0f call 0x1e1e ; 0x1e1e <__divmodhi4> phase_memory[motor] = next_phase; - 99a: 80 83 st Z, r24 + 9a8: 80 83 st Z, r24 next_pattern = phase_pattern[next_phase]; - 99c: e8 2f mov r30, r24 - 99e: f0 e0 ldi r31, 0x00 ; 0 - 9a0: e1 59 subi r30, 0x91 ; 145 - 9a2: fe 4f sbci r31, 0xFE ; 254 - 9a4: 00 81 ld r16, Z + 9aa: e8 2f mov r30, r24 + 9ac: f0 e0 ldi r31, 0x00 ; 0 + 9ae: ed 5b subi r30, 0xBD ; 189 + 9b0: fe 4f sbci r31, 0xFE ; 254 + 9b2: 00 81 ld r16, Z if (direction != 0) { - 9a6: 11 23 and r17, r17 - 9a8: 11 f0 breq .+4 ; 0x9ae + 9b4: 11 23 and r17, r17 + 9b6: 11 f0 breq .+4 ; 0x9bc (*setport)(next_pattern); - 9aa: 80 2f mov r24, r16 - 9ac: 01 c0 rjmp .+2 ; 0x9b0 + 9b8: 80 2f mov r24, r16 + 9ba: 01 c0 rjmp .+2 ; 0x9be } else { (*setport)(0); - 9ae: 80 e0 ldi r24, 0x00 ; 0 - 9b0: f9 01 movw r30, r18 - 9b2: 09 95 icall + 9bc: 80 e0 ldi r24, 0x00 ; 0 + 9be: f9 01 movw r30, r18 + 9c0: 09 95 icall } return next_pattern; } - 9b4: 80 2f mov r24, r16 - 9b6: 1f 91 pop r17 - 9b8: 0f 91 pop r16 - 9ba: 08 95 ret + 9c2: 80 2f mov r24, r16 + 9c4: 1f 91 pop r17 + 9c6: 0f 91 pop r16 + 9c8: 08 95 ret -000009bc : +000009ca : return val; } uint8_t move_plate(int16_t dx, int16_t dy){ - 9bc: 0f 93 push r16 - 9be: 1f 93 push r17 + 9ca: 0f 93 push r16 + 9cc: 1f 93 push r17 static int16_t todo_x,todo_y = 0; int8_t signum; uint8_t returnval = 0; todo_x += dx; - 9c0: 20 91 c0 02 lds r18, 0x02C0 - 9c4: 30 91 c1 02 lds r19, 0x02C1 - 9c8: 28 0f add r18, r24 - 9ca: 39 1f adc r19, r25 - 9cc: 30 93 c1 02 sts 0x02C1, r19 - 9d0: 20 93 c0 02 sts 0x02C0, r18 + 9ce: 20 91 a4 02 lds r18, 0x02A4 + 9d2: 30 91 a5 02 lds r19, 0x02A5 + 9d6: 28 0f add r18, r24 + 9d8: 39 1f adc r19, r25 + 9da: 30 93 a5 02 sts 0x02A5, r19 + 9de: 20 93 a4 02 sts 0x02A4, r18 todo_y += dy; - 9d4: 80 91 be 02 lds r24, 0x02BE - 9d8: 90 91 bf 02 lds r25, 0x02BF - 9dc: 86 0f add r24, r22 - 9de: 97 1f adc r25, r23 - 9e0: 90 93 bf 02 sts 0x02BF, r25 - 9e4: 80 93 be 02 sts 0x02BE, r24 + 9e2: 80 91 a2 02 lds r24, 0x02A2 + 9e6: 90 91 a3 02 lds r25, 0x02A3 + 9ea: 86 0f add r24, r22 + 9ec: 97 1f adc r25, r23 + 9ee: 90 93 a3 02 sts 0x02A3, r25 + 9f2: 80 93 a2 02 sts 0x02A2, r24 signum = sign(todo_x); - 9e8: c9 01 movw r24, r18 - 9ea: 6f df rcall .-290 ; 0x8ca - 9ec: 08 2f mov r16, r24 + 9f6: c9 01 movw r24, r18 + 9f8: 66 df rcall .-308 ; 0x8c6 + 9fa: 08 2f mov r16, r24 uint8_t move_plate(int16_t dx, int16_t dy){ static int16_t todo_x,todo_y = 0; int8_t signum; uint8_t returnval = 0; - 9ee: 11 e0 ldi r17, 0x01 ; 1 - 9f0: 88 23 and r24, r24 - 9f2: 09 f4 brne .+2 ; 0x9f6 - 9f4: 10 e0 ldi r17, 0x00 ; 0 + 9fc: 11 e0 ldi r17, 0x01 ; 1 + 9fe: 88 23 and r24, r24 + a00: 09 f4 brne .+2 ; 0xa04 + a02: 10 e0 ldi r17, 0x00 ; 0 signum = sign(todo_x); if(signum != 0) { returnval++; } motor_step(X,signum); - 9f6: 80 e0 ldi r24, 0x00 ; 0 - 9f8: 60 2f mov r22, r16 - 9fa: ae df rcall .-164 ; 0x958 + a04: 80 e0 ldi r24, 0x00 ; 0 + a06: 60 2f mov r22, r16 + a08: ae df rcall .-164 ; 0x966 todo_x -= signum; - 9fc: 60 2f mov r22, r16 - 9fe: 77 27 eor r23, r23 - a00: 67 fd sbrc r22, 7 - a02: 70 95 com r23 - a04: 20 91 c0 02 lds r18, 0x02C0 - a08: 30 91 c1 02 lds r19, 0x02C1 - a0c: 26 1b sub r18, r22 - a0e: 37 0b sbc r19, r23 - a10: 30 93 c1 02 sts 0x02C1, r19 - a14: 20 93 c0 02 sts 0x02C0, r18 + a0a: 60 2f mov r22, r16 + a0c: 77 27 eor r23, r23 + a0e: 67 fd sbrc r22, 7 + a10: 70 95 com r23 + a12: 20 91 a4 02 lds r18, 0x02A4 + a16: 30 91 a5 02 lds r19, 0x02A5 + a1a: 26 1b sub r18, r22 + a1c: 37 0b sbc r19, r23 + a1e: 30 93 a5 02 sts 0x02A5, r19 + a22: 20 93 a4 02 sts 0x02A4, r18 signum = sign(todo_y); - a18: 80 91 be 02 lds r24, 0x02BE - a1c: 90 91 bf 02 lds r25, 0x02BF - a20: 54 df rcall .-344 ; 0x8ca - a22: 08 2f mov r16, r24 + a26: 80 91 a2 02 lds r24, 0x02A2 + a2a: 90 91 a3 02 lds r25, 0x02A3 + a2e: 4b df rcall .-362 ; 0x8c6 + a30: 08 2f mov r16, r24 if(signum != 0) { - a24: 81 11 cpse r24, r1 + a32: 81 11 cpse r24, r1 returnval++; - a26: 1f 5f subi r17, 0xFF ; 255 + a34: 1f 5f subi r17, 0xFF ; 255 } motor_step(Y,signum); - a28: 81 e0 ldi r24, 0x01 ; 1 - a2a: 60 2f mov r22, r16 - a2c: 95 df rcall .-214 ; 0x958 + a36: 81 e0 ldi r24, 0x01 ; 1 + a38: 60 2f mov r22, r16 + a3a: 95 df rcall .-214 ; 0x966 todo_y -= signum; - a2e: 60 2f mov r22, r16 - a30: 77 27 eor r23, r23 - a32: 67 fd sbrc r22, 7 - a34: 70 95 com r23 - a36: 20 91 be 02 lds r18, 0x02BE - a3a: 30 91 bf 02 lds r19, 0x02BF - a3e: 26 1b sub r18, r22 - a40: 37 0b sbc r19, r23 - a42: 30 93 bf 02 sts 0x02BF, r19 - a46: 20 93 be 02 sts 0x02BE, r18 + a3c: 60 2f mov r22, r16 + a3e: 77 27 eor r23, r23 + a40: 67 fd sbrc r22, 7 + a42: 70 95 com r23 + a44: 20 91 a2 02 lds r18, 0x02A2 + a48: 30 91 a3 02 lds r19, 0x02A3 + a4c: 26 1b sub r18, r22 + a4e: 37 0b sbc r19, r23 + a50: 30 93 a3 02 sts 0x02A3, r19 + a54: 20 93 a2 02 sts 0x02A2, r18 return returnval; // busy } - a4a: 81 2f mov r24, r17 - a4c: 1f 91 pop r17 - a4e: 0f 91 pop r16 - a50: 08 95 ret + a58: 81 2f mov r24, r17 + a5a: 1f 91 pop r17 + a5c: 0f 91 pop r16 + a5e: 08 95 ret -00000a52 : +00000a60 : + +void print_steps_in_mm(int16_t steps) { + a60: 0f 93 push r16 + a62: 1f 93 push r17 + a64: 8c 01 movw r16, r24 + int16_t predot,postdot; + + predot = steps/24; + a66: 68 e1 ldi r22, 0x18 ; 24 + a68: 70 e0 ldi r23, 0x00 ; 0 + a6a: 0e 94 0f 0f call 0x1e1e ; 0x1e1e <__divmodhi4> + postdot = ((abs(steps)%24)*417)/10; + uart_print_signed_number(predot,3); + a6e: 88 27 eor r24, r24 + a70: 77 fd sbrc r23, 7 + a72: 80 95 com r24 + a74: 98 2f mov r25, r24 + a76: 43 e0 ldi r20, 0x03 ; 3 + a78: 46 df rcall .-372 ; 0x906 + uart_putc('.'); + a7a: 8e e2 ldi r24, 0x2E ; 46 + a7c: a3 de rcall .-698 ; 0x7c4 + +void print_steps_in_mm(int16_t steps) { + int16_t predot,postdot; + + predot = steps/24; + postdot = ((abs(steps)%24)*417)/10; + a7e: c8 01 movw r24, r16 + a80: 17 ff sbrs r17, 7 + a82: 03 c0 rjmp .+6 ; 0xa8a + a84: 90 95 com r25 + a86: 81 95 neg r24 + a88: 9f 4f sbci r25, 0xFF ; 255 + a8a: 68 e1 ldi r22, 0x18 ; 24 + a8c: 70 e0 ldi r23, 0x00 ; 0 + a8e: 0e 94 0f 0f call 0x1e1e ; 0x1e1e <__divmodhi4> + a92: 61 ea ldi r22, 0xA1 ; 161 + a94: 71 e0 ldi r23, 0x01 ; 1 + a96: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3> + a9a: 6a e0 ldi r22, 0x0A ; 10 + a9c: 70 e0 ldi r23, 0x00 ; 0 + a9e: 0e 94 0f 0f call 0x1e1e ; 0x1e1e <__divmodhi4> + uart_print_signed_number(predot,3); + uart_putc('.'); + uart_print_number_wlzeros(postdot,3); + aa2: 88 27 eor r24, r24 + aa4: 77 fd sbrc r23, 7 + aa6: 80 95 com r24 + aa8: 98 2f mov r25, r24 + aaa: 43 e0 ldi r20, 0x03 ; 3 + aac: 18 df rcall .-464 ; 0x8de + +} + aae: 1f 91 pop r17 + ab0: 0f 91 pop r16 + ab2: 08 95 ret + +00000ab4 : void pos_report(void){ uart_puts("x_pos: "); - a52: 80 e0 ldi r24, 0x00 ; 0 - a54: 91 e0 ldi r25, 0x01 ; 1 - a56: be de rcall .-644 ; 0x7d4 - uart_print_signed_number(plate_pos_x,6); - a58: 60 91 7a 01 lds r22, 0x017A - a5c: 70 91 7b 01 lds r23, 0x017B - a60: 88 27 eor r24, r24 - a62: 77 fd sbrc r23, 7 - a64: 80 95 com r24 - a66: 98 2f mov r25, r24 - a68: 46 e0 ldi r20, 0x06 ; 6 - a6a: 4b df rcall .-362 ; 0x902 + ab4: 80 e0 ldi r24, 0x00 ; 0 + ab6: 91 e0 ldi r25, 0x01 ; 1 + ab8: 8d de rcall .-742 ; 0x7d4 +// uart_print_signed_number(plate_pos_x,6); + print_steps_in_mm(plate_pos_x); + aba: 80 91 4e 01 lds r24, 0x014E + abe: 90 91 4f 01 lds r25, 0x014F + ac2: ce df rcall .-100 ; 0xa60 // my_uitoa(plate_pos_x, stringbuffer, 6); // uart_puts(stringbuffer); uart_puts(" y_pos: "); - a6c: 88 e0 ldi r24, 0x08 ; 8 - a6e: 91 e0 ldi r25, 0x01 ; 1 - a70: b1 de rcall .-670 ; 0x7d4 - uart_print_signed_number(plate_pos_y,6); - a72: 60 91 7c 01 lds r22, 0x017C - a76: 70 91 7d 01 lds r23, 0x017D - a7a: 88 27 eor r24, r24 - a7c: 77 fd sbrc r23, 7 - a7e: 80 95 com r24 - a80: 98 2f mov r25, r24 - a82: 46 e0 ldi r20, 0x06 ; 6 - a84: 3e df rcall .-388 ; 0x902 + ac4: 88 e0 ldi r24, 0x08 ; 8 + ac6: 91 e0 ldi r25, 0x01 ; 1 + ac8: 85 de rcall .-758 ; 0x7d4 +// uart_print_signed_number(plate_pos_y,6); + print_steps_in_mm(plate_pos_y); + aca: 80 91 50 01 lds r24, 0x0150 + ace: 90 91 51 01 lds r25, 0x0151 + ad2: c6 df rcall .-116 ; 0xa60 uart_puts("\r"); - a86: 82 e1 ldi r24, 0x12 ; 18 - a88: 91 e0 ldi r25, 0x01 ; 1 + ad4: 82 e1 ldi r24, 0x12 ; 18 + ad6: 91 e0 ldi r25, 0x01 ; 1 } - a8a: a4 ce rjmp .-696 ; 0x7d4 + ad8: 7d ce rjmp .-774 ; 0x7d4 -00000a8c : +00000ada : #define POSITION 0 #define GOTO 1 #define MOVEREL 2 #define SETZERO 3 void parse_command(void){ - a8c: cf 92 push r12 - a8e: df 92 push r13 - a90: ef 92 push r14 - a92: ff 92 push r15 - a94: 0f 93 push r16 - a96: 1f 93 push r17 - a98: cf 93 push r28 - a9a: df 93 push r29 + ada: cf 92 push r12 + adc: df 92 push r13 + ade: ef 92 push r14 + ae0: ff 92 push r15 + ae2: 0f 93 push r16 + ae4: 1f 93 push r17 + ae6: cf 93 push r28 + ae8: df 93 push r29 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - a9c: 2f b7 in r18, 0x3f ; 63 + aea: 2f b7 in r18, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - a9e: f8 94 cli + aec: f8 94 cli uint16_t Count; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Count = Buffer->Count; - aa0: 80 91 88 01 lds r24, 0x0188 - aa4: 90 91 89 01 lds r25, 0x0189 + aee: 80 91 5c 01 lds r24, 0x015C + af2: 90 91 5d 01 lds r25, 0x015D static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - aa8: 2f bf out 0x3f, r18 ; 63 + af6: 2f bf out 0x3f, r18 ; 63 uint8_t action=0,axis=0; int8_t num_sign = 1; char byte; /* Load the next byte from the USART transmit buffer into the USART */ if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer))) { - aaa: 00 97 sbiw r24, 0x00 ; 0 - aac: 09 f4 brne .+2 ; 0xab0 - aae: 83 c1 rjmp .+774 ; 0xdb6 + af8: 00 97 sbiw r24, 0x00 ; 0 + afa: 09 f4 brne .+2 ; 0xafe + afc: 94 c1 rjmp .+808 ; 0xe26 byte = RingBuffer_Remove(&USBtoUSART_Buffer); - ab0: 8e e7 ldi r24, 0x7E ; 126 - ab2: 91 e0 ldi r25, 0x01 ; 1 - ab4: 78 db rcall .-2320 ; 0x1a6 + afe: 82 e5 ldi r24, 0x52 ; 82 + b00: 91 e0 ldi r25, 0x01 ; 1 + b02: 51 db rcall .-2398 ; 0x1a6 + b04: 18 2f mov r17, r24 if (byte == '\r' || byte == '\n') {// end of command, evaluate cemmand! - ab6: 8d 30 cpi r24, 0x0D ; 13 - ab8: 19 f0 breq .+6 ; 0xac0 - aba: 8a 30 cpi r24, 0x0A ; 10 - abc: 09 f0 breq .+2 ; 0xac0 - abe: 70 c1 rjmp .+736 ; 0xda0 + b06: 8d 30 cpi r24, 0x0D ; 13 + b08: 19 f0 breq .+6 ; 0xb10 + b0a: 8a 30 cpi r24, 0x0A ; 10 + b0c: 09 f0 breq .+2 ; 0xb10 + b0e: 74 c1 rjmp .+744 ; 0xdf8 uart_puts("\r\n"); - ac0: 84 e1 ldi r24, 0x14 ; 20 - ac2: 91 e0 ldi r25, 0x01 ; 1 - ac4: 87 de rcall .-754 ; 0x7d4 + b10: 84 e1 ldi r24, 0x14 ; 20 + b12: 91 e0 ldi r25, 0x01 ; 1 + b14: 5f de rcall .-834 ; 0x7d4 cmdbuffer[cmdPos] = '\0'; // terminate new command string - ac6: 80 91 99 02 lds r24, 0x0299 - aca: e8 2f mov r30, r24 - acc: f0 e0 ldi r31, 0x00 ; 0 - ace: e2 55 subi r30, 0x52 ; 82 - ad0: fd 4f sbci r31, 0xFD ; 253 - ad2: 10 82 st Z, r1 + b16: 80 91 6d 02 lds r24, 0x026D + b1a: e8 2f mov r30, r24 + b1c: f0 e0 ldi r31, 0x00 ; 0 + b1e: ee 57 subi r30, 0x7E ; 126 + b20: fd 4f sbci r31, 0xFD ; 253 + b22: 10 82 st Z, r1 curCmdLen = cmdPos; - ad4: 80 93 98 02 sts 0x0298, r24 + b24: 80 93 6c 02 sts 0x026C, r24 cmdPos = 0; - ad8: 10 92 99 02 sts 0x0299, r1 + b28: 10 92 6d 02 sts 0x026D, r1 if (cmdbuffer[0] == 'g' || cmdbuffer[0] == 'G') { // goto command - adc: 80 91 ae 02 lds r24, 0x02AE - ae0: 87 36 cpi r24, 0x67 ; 103 - ae2: 59 f0 breq .+22 ; 0xafa - ae4: 87 34 cpi r24, 0x47 ; 71 - ae6: 49 f0 breq .+18 ; 0xafa + b2c: 80 91 82 02 lds r24, 0x0282 + b30: 87 36 cpi r24, 0x67 ; 103 + b32: 59 f0 breq .+22 ; 0xb4a + b34: 87 34 cpi r24, 0x47 ; 71 + b36: 49 f0 breq .+18 ; 0xb4a action = GOTO; } else if ( cmdbuffer[0] == 'm' || cmdbuffer[0] == 'M') { - ae8: 8d 36 cpi r24, 0x6D ; 109 - aea: 49 f0 breq .+18 ; 0xafe - aec: 8d 34 cpi r24, 0x4D ; 77 - aee: 39 f0 breq .+14 ; 0xafe + b38: 8d 36 cpi r24, 0x6D ; 109 + b3a: 49 f0 breq .+18 ; 0xb4e + b3c: 8d 34 cpi r24, 0x4D ; 77 + b3e: 39 f0 breq .+14 ; 0xb4e action = MOVEREL; } else if ( cmdbuffer[0] == 'z' || cmdbuffer[0] == 'Z' ) { - af0: 8a 37 cpi r24, 0x7A ; 122 - af2: 39 f0 breq .+14 ; 0xb02 - af4: 8a 35 cpi r24, 0x5A ; 90 - af6: 39 f4 brne .+14 ; 0xb06 - af8: 04 c0 rjmp .+8 ; 0xb02 + b40: 8a 37 cpi r24, 0x7A ; 122 + b42: 39 f0 breq .+14 ; 0xb52 + b44: 8a 35 cpi r24, 0x5A ; 90 + b46: 39 f4 brne .+14 ; 0xb56 + b48: 04 c0 rjmp .+8 ; 0xb52 curCmdLen = cmdPos; cmdPos = 0; if (cmdbuffer[0] == 'g' || cmdbuffer[0] == 'G') { // goto command action = GOTO; - afa: 01 e0 ldi r16, 0x01 ; 1 - afc: 05 c0 rjmp .+10 ; 0xb08 + b4a: 01 e0 ldi r16, 0x01 ; 1 + b4c: 05 c0 rjmp .+10 ; 0xb58 } else if ( cmdbuffer[0] == 'm' || cmdbuffer[0] == 'M') { action = MOVEREL; - afe: 02 e0 ldi r16, 0x02 ; 2 - b00: 03 c0 rjmp .+6 ; 0xb08 + b4e: 02 e0 ldi r16, 0x02 ; 2 + b50: 03 c0 rjmp .+6 ; 0xb58 } else if ( cmdbuffer[0] == 'z' || cmdbuffer[0] == 'Z' ) { action = SETZERO; - b02: 03 e0 ldi r16, 0x03 ; 3 - b04: 01 c0 rjmp .+2 ; 0xb08 + b52: 03 e0 ldi r16, 0x03 ; 3 + b54: 01 c0 rjmp .+2 ; 0xb58 } else { action = POSITION; - b06: 00 e0 ldi r16, 0x00 ; 0 + b56: 00 e0 ldi r16, 0x00 ; 0 } if (cmdbuffer[1] == 'x' || cmdbuffer[1] == 'X') { - b08: 80 91 af 02 lds r24, 0x02AF - b0c: 88 37 cpi r24, 0x78 ; 120 - b0e: 39 f0 breq .+14 ; 0xb1e - b10: 88 35 cpi r24, 0x58 ; 88 - b12: 29 f0 breq .+10 ; 0xb1e + b58: 80 91 83 02 lds r24, 0x0283 + b5c: 88 37 cpi r24, 0x78 ; 120 + b5e: 39 f0 breq .+14 ; 0xb6e + b60: 88 35 cpi r24, 0x58 ; 88 + b62: 29 f0 breq .+10 ; 0xb6e axis = X; } else if (cmdbuffer[1] == 'y' || cmdbuffer[1] == 'Y') { - b14: 89 37 cpi r24, 0x79 ; 121 - b16: 29 f0 breq .+10 ; 0xb22 + b64: 89 37 cpi r24, 0x79 ; 121 + b66: 29 f0 breq .+10 ; 0xb72 #define POSITION 0 #define GOTO 1 #define MOVEREL 2 #define SETZERO 3 void parse_command(void){ - b18: 11 e0 ldi r17, 0x01 ; 1 - b1a: 89 35 cpi r24, 0x59 ; 89 - b1c: 19 f0 breq .+6 ; 0xb24 + b68: 11 e0 ldi r17, 0x01 ; 1 + b6a: 89 35 cpi r24, 0x59 ; 89 + b6c: 19 f0 breq .+6 ; 0xb74 } else { action = POSITION; } if (cmdbuffer[1] == 'x' || cmdbuffer[1] == 'X') { axis = X; - b1e: 10 e0 ldi r17, 0x00 ; 0 - b20: 01 c0 rjmp .+2 ; 0xb24 + b6e: 10 e0 ldi r17, 0x00 ; 0 + b70: 01 c0 rjmp .+2 ; 0xb74 } else if (cmdbuffer[1] == 'y' || cmdbuffer[1] == 'Y') { axis = Y; - b22: 11 e0 ldi r17, 0x01 ; 1 + b72: 11 e0 ldi r17, 0x01 ; 1 } // if you expect coordinate, parse number! if (action == GOTO || action == MOVEREL){ - b24: 80 2f mov r24, r16 - b26: 81 50 subi r24, 0x01 ; 1 - b28: 82 30 cpi r24, 0x02 ; 2 - b2a: 08 f0 brcs .+2 ; 0xb2e - b2c: 6d c0 rjmp .+218 ; 0xc08 + b74: 80 2f mov r24, r16 + b76: 81 50 subi r24, 0x01 ; 1 + b78: 82 30 cpi r24, 0x02 ; 2 + b7a: 08 f0 brcs .+2 ; 0xb7e + b7c: 6d c0 rjmp .+218 ; 0xc58 predot = 0; - b2e: 10 92 9d 02 sts 0x029D, r1 - b32: 10 92 9c 02 sts 0x029C, r1 + b7e: 10 92 71 02 sts 0x0271, r1 + b82: 10 92 70 02 sts 0x0270, r1 postdot = 0; - b36: 10 92 9b 02 sts 0x029B, r1 - b3a: 10 92 9a 02 sts 0x029A, r1 + b86: 10 92 6f 02 sts 0x026F, r1 + b8a: 10 92 6e 02 sts 0x026E, r1 num_sign = 1; num_start = 0; - b3e: 10 92 97 02 sts 0x0297, r1 + b8e: 10 92 6b 02 sts 0x026B, r1 nums_found = 0; - b42: 10 92 96 02 sts 0x0296, r1 + b92: 10 92 6a 02 sts 0x026A, r1 for (uint8_t i=2; i<=curCmdLen; i++) { - b46: 92 e0 ldi r25, 0x02 ; 2 - b48: f9 2e mov r15, r25 + b96: 92 e0 ldi r25, 0x02 ; 2 + b98: f9 2e mov r15, r25 // if you expect coordinate, parse number! if (action == GOTO || action == MOVEREL){ predot = 0; postdot = 0; num_sign = 1; - b4a: dd 24 eor r13, r13 - b4c: d3 94 inc r13 + b9a: dd 24 eor r13, r13 + b9c: d3 94 inc r13 predot = atoi(numbuffer); } else { // its the postdot digits uint8_t postdotlen = i-num_start; if (postdotlen < 3){ // if too small ,fill with zeros for( uint8_t j = postdotlen; j <=2; j++) { numbuffer[j] = '0'; - b4e: 80 e3 ldi r24, 0x30 ; 48 - b50: c8 2e mov r12, r24 + b9e: 80 e3 ldi r24, 0x30 ; 48 + ba0: c8 2e mov r12, r24 postdot = 0; num_sign = 1; num_start = 0; nums_found = 0; for (uint8_t i=2; i<=curCmdLen; i++) { - b52: 54 c0 rjmp .+168 ; 0xbfc + ba2: 54 c0 rjmp .+168 ; 0xc4c if ( num_start == 0 && cmdbuffer[i] == '-' ) { // if you find a minus before - b54: e0 90 97 02 lds r14, 0x0297 - b58: ee 20 and r14, r14 - b5a: 49 f4 brne .+18 ; 0xb6e - b5c: ef 2d mov r30, r15 - b5e: f0 e0 ldi r31, 0x00 ; 0 - b60: e2 55 subi r30, 0x52 ; 82 - b62: fd 4f sbci r31, 0xFD ; 253 - b64: 80 81 ld r24, Z - b66: 8d 32 cpi r24, 0x2D ; 45 - b68: 11 f4 brne .+4 ; 0xb6e + ba4: e0 90 6b 02 lds r14, 0x026B + ba8: ee 20 and r14, r14 + baa: 49 f4 brne .+18 ; 0xbbe + bac: ef 2d mov r30, r15 + bae: f0 e0 ldi r31, 0x00 ; 0 + bb0: ee 57 subi r30, 0x7E ; 126 + bb2: fd 4f sbci r31, 0xFD ; 253 + bb4: 80 81 ld r24, Z + bb6: 8d 32 cpi r24, 0x2D ; 45 + bb8: 11 f4 brne .+4 ; 0xbbe // you find a digit, it's a negative number num_sign = -1; - b6a: dd 24 eor r13, r13 - b6c: da 94 dec r13 + bba: dd 24 eor r13, r13 + bbc: da 94 dec r13 } if ( cmdbuffer[i] >= 48 && cmdbuffer[i] <= 57 ){ // is it a number? - b6e: cf 2d mov r28, r15 - b70: d0 e0 ldi r29, 0x00 ; 0 - b72: fe 01 movw r30, r28 - b74: e2 55 subi r30, 0x52 ; 82 - b76: fd 4f sbci r31, 0xFD ; 253 - b78: 80 81 ld r24, Z - b7a: 80 53 subi r24, 0x30 ; 48 - b7c: 8a 30 cpi r24, 0x0A ; 10 - b7e: 28 f4 brcc .+10 ; 0xb8a + bbe: cf 2d mov r28, r15 + bc0: d0 e0 ldi r29, 0x00 ; 0 + bc2: fe 01 movw r30, r28 + bc4: ee 57 subi r30, 0x7E ; 126 + bc6: fd 4f sbci r31, 0xFD ; 253 + bc8: 80 81 ld r24, Z + bca: 80 53 subi r24, 0x30 ; 48 + bcc: 8a 30 cpi r24, 0x0A ; 10 + bce: 28 f4 brcc .+10 ; 0xbda if ( num_start == 0) { // this is the first digit in the string - b80: ee 20 and r14, r14 - b82: d9 f5 brne .+118 ; 0xbfa + bd0: ee 20 and r14, r14 + bd2: d9 f5 brne .+118 ; 0xc4a num_start = i; - b84: f0 92 97 02 sts 0x0297, r15 - b88: 38 c0 rjmp .+112 ; 0xbfa + bd4: f0 92 6b 02 sts 0x026B, r15 + bd8: 38 c0 rjmp .+112 ; 0xc4a } } else { // no digit! if ( num_start != 0) { // digits have been found before - b8a: ee 20 and r14, r14 - b8c: b1 f1 breq .+108 ; 0xbfa + bda: ee 20 and r14, r14 + bdc: b1 f1 breq .+108 ; 0xc4a strncpy(numbuffer,cmdbuffer+num_start,i-num_start); // copy number found to - b8e: 6e 2d mov r22, r14 - b90: 70 e0 ldi r23, 0x00 ; 0 - b92: c6 1b sub r28, r22 - b94: d7 0b sbc r29, r23 - b96: 62 55 subi r22, 0x52 ; 82 - b98: 7d 4f sbci r23, 0xFD ; 253 - b9a: 8e e9 ldi r24, 0x9E ; 158 - b9c: 92 e0 ldi r25, 0x02 ; 2 - b9e: ae 01 movw r20, r28 - ba0: 0e 94 29 0f call 0x1e52 ; 0x1e52 + bde: 6e 2d mov r22, r14 + be0: 70 e0 ldi r23, 0x00 ; 0 + be2: c6 1b sub r28, r22 + be4: d7 0b sbc r29, r23 + be6: 6e 57 subi r22, 0x7E ; 126 + be8: 7d 4f sbci r23, 0xFD ; 253 + bea: 82 e7 ldi r24, 0x72 ; 114 + bec: 92 e0 ldi r25, 0x02 ; 2 + bee: ae 01 movw r20, r28 + bf0: 0e 94 61 0f call 0x1ec2 ; 0x1ec2 // numbuffer numbuffer[i-num_start] = '\0'; // make sure it's always a terminated string - ba4: c2 56 subi r28, 0x62 ; 98 - ba6: dd 4f sbci r29, 0xFD ; 253 - ba8: 18 82 st Y, r1 + bf4: ce 58 subi r28, 0x8E ; 142 + bf6: dd 4f sbci r29, 0xFD ; 253 + bf8: 18 82 st Y, r1 nums_found++; - baa: 80 91 96 02 lds r24, 0x0296 - bae: 8f 5f subi r24, 0xFF ; 255 - bb0: 80 93 96 02 sts 0x0296, r24 + bfa: 80 91 6a 02 lds r24, 0x026A + bfe: 8f 5f subi r24, 0xFF ; 255 + c00: 80 93 6a 02 sts 0x026A, r24 if(nums_found == 1) { // its the predot digits - bb4: 81 30 cpi r24, 0x01 ; 1 - bb6: 49 f4 brne .+18 ; 0xbca + c04: 81 30 cpi r24, 0x01 ; 1 + c06: 49 f4 brne .+18 ; 0xc1a predot = atoi(numbuffer); - bb8: 8e e9 ldi r24, 0x9E ; 158 - bba: 92 e0 ldi r25, 0x02 ; 2 - bbc: 0e 94 0c 0f call 0x1e18 ; 0x1e18 - bc0: 90 93 9d 02 sts 0x029D, r25 - bc4: 80 93 9c 02 sts 0x029C, r24 - bc8: 16 c0 rjmp .+44 ; 0xbf6 + c08: 82 e7 ldi r24, 0x72 ; 114 + c0a: 92 e0 ldi r25, 0x02 ; 2 + c0c: 0e 94 44 0f call 0x1e88 ; 0x1e88 + c10: 90 93 71 02 sts 0x0271, r25 + c14: 80 93 70 02 sts 0x0270, r24 + c18: 16 c0 rjmp .+44 ; 0xc46 } else { // its the postdot digits uint8_t postdotlen = i-num_start; - bca: 8f 2d mov r24, r15 - bcc: 8e 19 sub r24, r14 + c1a: 8f 2d mov r24, r15 + c1c: 8e 19 sub r24, r14 if (postdotlen < 3){ // if too small ,fill with zeros - bce: 83 30 cpi r24, 0x03 ; 3 - bd0: 40 f4 brcc .+16 ; 0xbe2 + c1e: 83 30 cpi r24, 0x03 ; 3 + c20: 40 f4 brcc .+16 ; 0xc32 for( uint8_t j = postdotlen; j <=2; j++) { numbuffer[j] = '0'; - bd2: e8 2f mov r30, r24 - bd4: f0 e0 ldi r31, 0x00 ; 0 - bd6: e2 56 subi r30, 0x62 ; 98 - bd8: fd 4f sbci r31, 0xFD ; 253 - bda: c0 82 st Z, r12 + c22: e8 2f mov r30, r24 + c24: f0 e0 ldi r31, 0x00 ; 0 + c26: ee 58 subi r30, 0x8E ; 142 + c28: fd 4f sbci r31, 0xFD ; 253 + c2a: c0 82 st Z, r12 if(nums_found == 1) { // its the predot digits predot = atoi(numbuffer); } else { // its the postdot digits uint8_t postdotlen = i-num_start; if (postdotlen < 3){ // if too small ,fill with zeros for( uint8_t j = postdotlen; j <=2; j++) { - bdc: 8f 5f subi r24, 0xFF ; 255 - bde: 83 30 cpi r24, 0x03 ; 3 - be0: c1 f7 brne .-16 ; 0xbd2 + c2c: 8f 5f subi r24, 0xFF ; 255 + c2e: 83 30 cpi r24, 0x03 ; 3 + c30: c1 f7 brne .-16 ; 0xc22 numbuffer[j] = '0'; } } // crop the number to three post dot digits numbuffer[3] = '\0'; - be2: 10 92 a1 02 sts 0x02A1, r1 + c32: 10 92 75 02 sts 0x0275, r1 postdot = atoi(numbuffer); - be6: 8e e9 ldi r24, 0x9E ; 158 - be8: 92 e0 ldi r25, 0x02 ; 2 - bea: 0e 94 0c 0f call 0x1e18 ; 0x1e18 - bee: 90 93 9b 02 sts 0x029B, r25 - bf2: 80 93 9a 02 sts 0x029A, r24 + c36: 82 e7 ldi r24, 0x72 ; 114 + c38: 92 e0 ldi r25, 0x02 ; 2 + c3a: 0e 94 44 0f call 0x1e88 ; 0x1e88 + c3e: 90 93 6f 02 sts 0x026F, r25 + c42: 80 93 6e 02 sts 0x026E, r24 } num_start = 0; - bf6: 10 92 97 02 sts 0x0297, r1 + c46: 10 92 6b 02 sts 0x026B, r1 postdot = 0; num_sign = 1; num_start = 0; nums_found = 0; for (uint8_t i=2; i<=curCmdLen; i++) { - bfa: f3 94 inc r15 - bfc: 80 91 98 02 lds r24, 0x0298 - c00: 8f 15 cp r24, r15 - c02: 08 f0 brcs .+2 ; 0xc06 - c04: a7 cf rjmp .-178 ; 0xb54 - c06: 02 c0 rjmp .+4 ; 0xc0c - static char cmdbuffer[16]; + c4a: f3 94 inc r15 + c4c: 80 91 6c 02 lds r24, 0x026C + c50: 8f 15 cp r24, r15 + c52: 08 f0 brcs .+2 ; 0xc56 + c54: a7 cf rjmp .-178 ; 0xba4 + c56: 02 c0 rjmp .+4 ; 0xc5c + static char cmdbuffer[32]; static char numbuffer[16]; static uint16_t predot = 0,postdot = 0; static uint8_t cmdPos, curCmdLen, num_start = 0, nums_found = 0; uint8_t action=0,axis=0; int8_t num_sign = 1; - c08: dd 24 eor r13, r13 - c0a: d3 94 inc r13 + c58: dd 24 eor r13, r13 + c5a: d3 94 inc r13 } int16_t steps = 0,dest=0; switch (action) { - c0c: 02 30 cpi r16, 0x02 ; 2 - c0e: 09 f4 brne .+2 ; 0xc12 - c10: 5f c0 rjmp .+190 ; 0xcd0 - c12: 03 30 cpi r16, 0x03 ; 3 - c14: 09 f4 brne .+2 ; 0xc18 - c16: ba c0 rjmp .+372 ; 0xd8c - c18: 01 30 cpi r16, 0x01 ; 1 - c1a: 09 f0 breq .+2 ; 0xc1e - c1c: bf c0 rjmp .+382 ; 0xd9c + c5c: 02 30 cpi r16, 0x02 ; 2 + c5e: 09 f4 brne .+2 ; 0xc62 + c60: 61 c0 rjmp .+194 ; 0xd24 + c62: 03 30 cpi r16, 0x03 ; 3 + c64: 09 f4 brne .+2 ; 0xc68 + c66: be c0 rjmp .+380 ; 0xde4 + c68: 01 30 cpi r16, 0x01 ; 1 + c6a: 09 f0 breq .+2 ; 0xc6e + c6c: c3 c0 rjmp .+390 ; 0xdf4 case GOTO: uart_puts("GOTO "); - c1e: 87 e1 ldi r24, 0x17 ; 23 - c20: 91 e0 ldi r25, 0x01 ; 1 - c22: d8 dd rcall .-1104 ; 0x7d4 + c6e: 87 e1 ldi r24, 0x17 ; 23 + c70: 91 e0 ldi r25, 0x01 ; 1 + c72: b0 dd rcall .-1184 ; 0x7d4 uart_putc(88+axis);// x or y - c24: 81 2f mov r24, r17 - c26: 88 5a subi r24, 0xA8 ; 168 - c28: cd dd rcall .-1126 ; 0x7c4 + c74: 81 2f mov r24, r17 + c76: 88 5a subi r24, 0xA8 ; 168 + c78: a5 dd rcall .-1206 ; 0x7c4 + uart_putc(' '); + c7a: 80 e2 ldi r24, 0x20 ; 32 + c7c: a3 dd rcall .-1210 ; 0x7c4 uart_print_signed_number(predot*num_sign,3); - c2a: cd 2d mov r28, r13 - c2c: dd 27 eor r29, r29 - c2e: c7 fd sbrc r28, 7 - c30: d0 95 com r29 - c32: 60 91 9c 02 lds r22, 0x029C - c36: 70 91 9d 02 lds r23, 0x029D - c3a: ce 01 movw r24, r28 - c3c: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3> - c40: bc 01 movw r22, r24 - c42: 80 e0 ldi r24, 0x00 ; 0 - c44: 90 e0 ldi r25, 0x00 ; 0 - c46: 43 e0 ldi r20, 0x03 ; 3 - c48: 5c de rcall .-840 ; 0x902 + c7e: cd 2d mov r28, r13 + c80: dd 27 eor r29, r29 + c82: c7 fd sbrc r28, 7 + c84: d0 95 com r29 + c86: 60 91 70 02 lds r22, 0x0270 + c8a: 70 91 71 02 lds r23, 0x0271 + c8e: ce 01 movw r24, r28 + c90: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3> + c94: bc 01 movw r22, r24 + c96: 80 e0 ldi r24, 0x00 ; 0 + c98: 90 e0 ldi r25, 0x00 ; 0 + c9a: 43 e0 ldi r20, 0x03 ; 3 + c9c: 34 de rcall .-920 ; 0x906 uart_putc('.'); - c4a: 8e e2 ldi r24, 0x2E ; 46 - c4c: bb dd rcall .-1162 ; 0x7c4 - uart_print_number(postdot,3); - c4e: 60 91 9a 02 lds r22, 0x029A - c52: 70 91 9b 02 lds r23, 0x029B - c56: 80 e0 ldi r24, 0x00 ; 0 - c58: 90 e0 ldi r25, 0x00 ; 0 - c5a: 43 e0 ldi r20, 0x03 ; 3 - c5c: 42 de rcall .-892 ; 0x8e2 + c9e: 8e e2 ldi r24, 0x2E ; 46 + ca0: 91 dd rcall .-1246 ; 0x7c4 + uart_print_number_wlzeros(postdot,3); + ca2: 60 91 6e 02 lds r22, 0x026E + ca6: 70 91 6f 02 lds r23, 0x026F + caa: 80 e0 ldi r24, 0x00 ; 0 + cac: 90 e0 ldi r25, 0x00 ; 0 + cae: 43 e0 ldi r20, 0x03 ; 3 + cb0: 16 de rcall .-980 ; 0x8de uart_puts("\r\n"); - c5e: 84 e1 ldi r24, 0x14 ; 20 - c60: 91 e0 ldi r25, 0x01 ; 1 - c62: b8 dd rcall .-1168 ; 0x7d4 + cb2: 84 e1 ldi r24, 0x14 ; 20 + cb4: 91 e0 ldi r25, 0x01 ; 1 + cb6: 8e dd rcall .-1252 ; 0x7d4 dest = num_sign *( predot*24 +(postdot*10)/416); - c64: 80 91 9a 02 lds r24, 0x029A - c68: 90 91 9b 02 lds r25, 0x029B - c6c: 6a e0 ldi r22, 0x0A ; 10 - c6e: 70 e0 ldi r23, 0x00 ; 0 - c70: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3> - c74: 60 ea ldi r22, 0xA0 ; 160 - c76: 71 e0 ldi r23, 0x01 ; 1 - c78: 0e 94 c3 0e call 0x1d86 ; 0x1d86 <__udivmodhi4> - c7c: 9b 01 movw r18, r22 - c7e: 80 91 9c 02 lds r24, 0x029C - c82: 90 91 9d 02 lds r25, 0x029D - c86: 68 e1 ldi r22, 0x18 ; 24 - c88: 70 e0 ldi r23, 0x00 ; 0 - c8a: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3> - c8e: 28 0f add r18, r24 - c90: 39 1f adc r19, r25 - c92: ce 01 movw r24, r28 - c94: b9 01 movw r22, r18 - c96: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3> + cb8: 80 91 6e 02 lds r24, 0x026E + cbc: 90 91 6f 02 lds r25, 0x026F + cc0: 6a e0 ldi r22, 0x0A ; 10 + cc2: 70 e0 ldi r23, 0x00 ; 0 + cc4: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3> + cc8: 60 ea ldi r22, 0xA0 ; 160 + cca: 71 e0 ldi r23, 0x01 ; 1 + ccc: 0e 94 fb 0e call 0x1df6 ; 0x1df6 <__udivmodhi4> + cd0: 9b 01 movw r18, r22 + cd2: 80 91 70 02 lds r24, 0x0270 + cd6: 90 91 71 02 lds r25, 0x0271 + cda: 68 e1 ldi r22, 0x18 ; 24 + cdc: 70 e0 ldi r23, 0x00 ; 0 + cde: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3> + ce2: 28 0f add r18, r24 + ce4: 39 1f adc r19, r25 + ce6: ce 01 movw r24, r28 + ce8: b9 01 movw r22, r18 + cea: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3> if (axis == X) { - c9a: 11 23 and r17, r17 - c9c: 69 f4 brne .+26 ; 0xcb8 - steps = dest - plate_pos_x; - c9e: 20 91 7a 01 lds r18, 0x017A - ca2: 30 91 7b 01 lds r19, 0x017B - ca6: e8 2e mov r14, r24 - ca8: e7 01 movw r28, r14 - caa: 7e 01 movw r14, r28 - cac: f9 2e mov r15, r25 - cae: e7 01 movw r28, r14 - cb0: c2 1b sub r28, r18 - cb2: d3 0b sbc r29, r19 + cee: 11 23 and r17, r17 + cf0: 69 f4 brne .+26 ; 0xd0c + steps = dest - plate_pos_x; // experimental correction! + cf2: 20 91 4e 01 lds r18, 0x014E + cf6: 30 91 4f 01 lds r19, 0x014F + cfa: e8 2e mov r14, r24 + cfc: e7 01 movw r28, r14 + cfe: 7e 01 movw r14, r28 + d00: f9 2e mov r15, r25 + d02: e7 01 movw r28, r14 + d04: c2 1b sub r28, r18 + d06: d3 0b sbc r29, r19 move_plate(steps,0); - cb4: ce 01 movw r24, r28 - cb6: 4d c0 rjmp .+154 ; 0xd52 + d08: ce 01 movw r24, r28 + d0a: 4f c0 rjmp .+158 ; 0xdaa plate_pos_x += steps; } else if (axis == Y) { steps = dest - plate_pos_y; - cb8: 20 91 7c 01 lds r18, 0x017C - cbc: 30 91 7d 01 lds r19, 0x017D - cc0: e8 2e mov r14, r24 - cc2: e7 01 movw r28, r14 - cc4: 7e 01 movw r14, r28 - cc6: f9 2e mov r15, r25 - cc8: e7 01 movw r28, r14 - cca: c2 1b sub r28, r18 - ccc: d3 0b sbc r29, r19 - cce: 4f c0 rjmp .+158 ; 0xd6e + d0c: 20 91 50 01 lds r18, 0x0150 + d10: 30 91 51 01 lds r19, 0x0151 + d14: e8 2e mov r14, r24 + d16: e7 01 movw r28, r14 + d18: 7e 01 movw r14, r28 + d1a: f9 2e mov r15, r25 + d1c: e7 01 movw r28, r14 + d1e: c2 1b sub r28, r18 + d20: d3 0b sbc r29, r19 + d22: 51 c0 rjmp .+162 ; 0xdc6 } pos_report(); break; case MOVEREL: uart_puts("MOVE "); - cd0: 8d e1 ldi r24, 0x1D ; 29 - cd2: 91 e0 ldi r25, 0x01 ; 1 - cd4: 7f dd rcall .-1282 ; 0x7d4 + d24: 8d e1 ldi r24, 0x1D ; 29 + d26: 91 e0 ldi r25, 0x01 ; 1 + d28: 55 dd rcall .-1366 ; 0x7d4 uart_putc(88+axis);// x or y - cd6: 81 2f mov r24, r17 - cd8: 88 5a subi r24, 0xA8 ; 168 - cda: 74 dd rcall .-1304 ; 0x7c4 + d2a: 81 2f mov r24, r17 + d2c: 88 5a subi r24, 0xA8 ; 168 + d2e: 4a dd rcall .-1388 ; 0x7c4 + uart_putc(' '); + d30: 80 e2 ldi r24, 0x20 ; 32 + d32: 48 dd rcall .-1392 ; 0x7c4 uart_print_signed_number(predot*num_sign,3); - cdc: cd 2d mov r28, r13 - cde: dd 27 eor r29, r29 - ce0: c7 fd sbrc r28, 7 - ce2: d0 95 com r29 - ce4: 60 91 9c 02 lds r22, 0x029C - ce8: 70 91 9d 02 lds r23, 0x029D - cec: ce 01 movw r24, r28 - cee: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3> - cf2: bc 01 movw r22, r24 - cf4: 80 e0 ldi r24, 0x00 ; 0 - cf6: 90 e0 ldi r25, 0x00 ; 0 - cf8: 43 e0 ldi r20, 0x03 ; 3 - cfa: 03 de rcall .-1018 ; 0x902 + d34: cd 2d mov r28, r13 + d36: dd 27 eor r29, r29 + d38: c7 fd sbrc r28, 7 + d3a: d0 95 com r29 + d3c: 60 91 70 02 lds r22, 0x0270 + d40: 70 91 71 02 lds r23, 0x0271 + d44: ce 01 movw r24, r28 + d46: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3> + d4a: bc 01 movw r22, r24 + d4c: 80 e0 ldi r24, 0x00 ; 0 + d4e: 90 e0 ldi r25, 0x00 ; 0 + d50: 43 e0 ldi r20, 0x03 ; 3 + d52: d9 dd rcall .-1102 ; 0x906 uart_putc('.'); - cfc: 8e e2 ldi r24, 0x2E ; 46 - cfe: 62 dd rcall .-1340 ; 0x7c4 - uart_print_number(postdot,3); - d00: 60 91 9a 02 lds r22, 0x029A - d04: 70 91 9b 02 lds r23, 0x029B - d08: 80 e0 ldi r24, 0x00 ; 0 - d0a: 90 e0 ldi r25, 0x00 ; 0 - d0c: 43 e0 ldi r20, 0x03 ; 3 - d0e: e9 dd rcall .-1070 ; 0x8e2 + d54: 8e e2 ldi r24, 0x2E ; 46 + d56: 36 dd rcall .-1428 ; 0x7c4 + uart_print_number_wlzeros(postdot,3); + d58: 60 91 6e 02 lds r22, 0x026E + d5c: 70 91 6f 02 lds r23, 0x026F + d60: 80 e0 ldi r24, 0x00 ; 0 + d62: 90 e0 ldi r25, 0x00 ; 0 + d64: 43 e0 ldi r20, 0x03 ; 3 + d66: bb dd rcall .-1162 ; 0x8de uart_puts("\r\n"); - d10: 84 e1 ldi r24, 0x14 ; 20 - d12: 91 e0 ldi r25, 0x01 ; 1 - d14: 5f dd rcall .-1346 ; 0x7d4 + d68: 84 e1 ldi r24, 0x14 ; 20 + d6a: 91 e0 ldi r25, 0x01 ; 1 + d6c: 33 dd rcall .-1434 ; 0x7d4 steps = num_sign *( predot*24 +(postdot*10)/416); - d16: 80 91 9a 02 lds r24, 0x029A - d1a: 90 91 9b 02 lds r25, 0x029B - d1e: 6a e0 ldi r22, 0x0A ; 10 - d20: 70 e0 ldi r23, 0x00 ; 0 - d22: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3> - d26: 60 ea ldi r22, 0xA0 ; 160 - d28: 71 e0 ldi r23, 0x01 ; 1 - d2a: 0e 94 c3 0e call 0x1d86 ; 0x1d86 <__udivmodhi4> - d2e: 9b 01 movw r18, r22 - d30: 80 91 9c 02 lds r24, 0x029C - d34: 90 91 9d 02 lds r25, 0x029D - d38: 68 e1 ldi r22, 0x18 ; 24 - d3a: 70 e0 ldi r23, 0x00 ; 0 - d3c: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3> - d40: 28 0f add r18, r24 - d42: 39 1f adc r19, r25 - d44: ce 01 movw r24, r28 - d46: b9 01 movw r22, r18 - d48: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3> - d4c: ec 01 movw r28, r24 + d6e: 80 91 6e 02 lds r24, 0x026E + d72: 90 91 6f 02 lds r25, 0x026F + d76: 6a e0 ldi r22, 0x0A ; 10 + d78: 70 e0 ldi r23, 0x00 ; 0 + d7a: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3> + d7e: 60 ea ldi r22, 0xA0 ; 160 + d80: 71 e0 ldi r23, 0x01 ; 1 + d82: 0e 94 fb 0e call 0x1df6 ; 0x1df6 <__udivmodhi4> + d86: 9b 01 movw r18, r22 + d88: 80 91 70 02 lds r24, 0x0270 + d8c: 90 91 71 02 lds r25, 0x0271 + d90: 68 e1 ldi r22, 0x18 ; 24 + d92: 70 e0 ldi r23, 0x00 ; 0 + d94: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3> + d98: 28 0f add r18, r24 + d9a: 39 1f adc r19, r25 + d9c: ce 01 movw r24, r28 + d9e: b9 01 movw r22, r18 + da0: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3> + da4: ec 01 movw r28, r24 if (axis == X) { - d4e: 11 23 and r17, r17 - d50: 71 f4 brne .+28 ; 0xd6e + da6: 11 23 and r17, r17 + da8: 71 f4 brne .+28 ; 0xdc6 move_plate(steps,0); - d52: 60 e0 ldi r22, 0x00 ; 0 - d54: 70 e0 ldi r23, 0x00 ; 0 - d56: 32 de rcall .-924 ; 0x9bc + daa: 60 e0 ldi r22, 0x00 ; 0 + dac: 70 e0 ldi r23, 0x00 ; 0 + dae: 0d de rcall .-998 ; 0x9ca plate_pos_x += steps; - d58: 80 91 7a 01 lds r24, 0x017A - d5c: 90 91 7b 01 lds r25, 0x017B - d60: 8c 0f add r24, r28 - d62: 9d 1f adc r25, r29 - d64: 90 93 7b 01 sts 0x017B, r25 - d68: 80 93 7a 01 sts 0x017A, r24 - d6c: 17 c0 rjmp .+46 ; 0xd9c + db0: 80 91 4e 01 lds r24, 0x014E + db4: 90 91 4f 01 lds r25, 0x014F + db8: 8c 0f add r24, r28 + dba: 9d 1f adc r25, r29 + dbc: 90 93 4f 01 sts 0x014F, r25 + dc0: 80 93 4e 01 sts 0x014E, r24 + dc4: 17 c0 rjmp .+46 ; 0xdf4 } else if (axis == Y) { move_plate(0,steps); - d6e: 80 e0 ldi r24, 0x00 ; 0 - d70: 90 e0 ldi r25, 0x00 ; 0 - d72: be 01 movw r22, r28 - d74: 23 de rcall .-954 ; 0x9bc + dc6: 80 e0 ldi r24, 0x00 ; 0 + dc8: 90 e0 ldi r25, 0x00 ; 0 + dca: be 01 movw r22, r28 + dcc: fe dd rcall .-1028 ; 0x9ca plate_pos_y += steps; - d76: 80 91 7c 01 lds r24, 0x017C - d7a: 90 91 7d 01 lds r25, 0x017D - d7e: 8c 0f add r24, r28 - d80: 9d 1f adc r25, r29 - d82: 90 93 7d 01 sts 0x017D, r25 - d86: 80 93 7c 01 sts 0x017C, r24 - d8a: 08 c0 rjmp .+16 ; 0xd9c + dce: 80 91 50 01 lds r24, 0x0150 + dd2: 90 91 51 01 lds r25, 0x0151 + dd6: 8c 0f add r24, r28 + dd8: 9d 1f adc r25, r29 + dda: 90 93 51 01 sts 0x0151, r25 + dde: 80 93 50 01 sts 0x0150, r24 + de2: 08 c0 rjmp .+16 ; 0xdf4 } pos_report(); break; case SETZERO: plate_pos_x = 0; - d8c: 10 92 7b 01 sts 0x017B, r1 - d90: 10 92 7a 01 sts 0x017A, r1 + de4: 10 92 4f 01 sts 0x014F, r1 + de8: 10 92 4e 01 sts 0x014E, r1 plate_pos_y = 0; - d94: 10 92 7d 01 sts 0x017D, r1 - d98: 10 92 7c 01 sts 0x017C, r1 + dec: 10 92 51 01 sts 0x0151, r1 + df0: 10 92 50 01 sts 0x0150, r1 pos_report(); break; case POSITION: pos_report(); - d9c: 5a de rcall .-844 ; 0xa52 + df4: 5f de rcall .-834 ; 0xab4 break; - d9e: 0b c0 rjmp .+22 ; 0xdb6 + df6: 17 c0 rjmp .+46 ; 0xe26 } } else { // queue command - cmdbuffer[cmdPos++] = byte; - da0: 90 91 99 02 lds r25, 0x0299 - da4: e9 2f mov r30, r25 - da6: f0 e0 ldi r31, 0x00 ; 0 - da8: e2 55 subi r30, 0x52 ; 82 - daa: fd 4f sbci r31, 0xFD ; 253 - dac: 80 83 st Z, r24 - dae: 9f 5f subi r25, 0xFF ; 255 - db0: 90 93 99 02 sts 0x0299, r25 + if( cmdPos == 0 ){ + df8: 80 91 6d 02 lds r24, 0x026D + dfc: 88 23 and r24, r24 + dfe: 19 f4 brne .+6 ; 0xe06 + uart_puts("\r\n$ "); + e00: 83 e2 ldi r24, 0x23 ; 35 + e02: 91 e0 ldi r25, 0x01 ; 1 + e04: e7 dc rcall .-1586 ; 0x7d4 + e06: 80 91 6d 02 lds r24, 0x026D + } + + if( byte == 8 ){ // backspace + e0a: 18 30 cpi r17, 0x08 ; 8 + e0c: 11 f4 brne .+4 ; 0xe12 + cmdPos--; + e0e: 81 50 subi r24, 0x01 ; 1 + e10: 06 c0 rjmp .+12 ; 0xe1e + } else { + cmdbuffer[cmdPos++] = byte; + e12: e8 2f mov r30, r24 + e14: f0 e0 ldi r31, 0x00 ; 0 + e16: ee 57 subi r30, 0x7E ; 126 + e18: fd 4f sbci r31, 0xFD ; 253 + e1a: 10 83 st Z, r17 + e1c: 8f 5f subi r24, 0xFF ; 255 + e1e: 80 93 6d 02 sts 0x026D, r24 + } uart_putc(byte); - db4: 07 dd rcall .-1522 ; 0x7c4 + e22: 81 2f mov r24, r17 + e24: cf dc rcall .-1634 ; 0x7c4 + + } } } - db6: df 91 pop r29 - db8: cf 91 pop r28 - dba: 1f 91 pop r17 - dbc: 0f 91 pop r16 - dbe: ff 90 pop r15 - dc0: ef 90 pop r14 - dc2: df 90 pop r13 - dc4: cf 90 pop r12 - dc6: 08 95 ret - -00000dc8
: + e26: df 91 pop r29 + e28: cf 91 pop r28 + e2a: 1f 91 pop r17 + e2c: 0f 91 pop r16 + e2e: ff 90 pop r15 + e30: ef 90 pop r14 + e32: df 90 pop r13 + e34: cf 90 pop r12 + e36: 08 95 ret + +00000e38
: int main(void) { - dc8: 0f 93 push r16 - dca: 1f 93 push r17 - dcc: df 93 push r29 - dce: cf 93 push r28 - dd0: 0f 92 push r0 - dd2: cd b7 in r28, 0x3d ; 61 - dd4: de b7 in r29, 0x3e ; 62 + e38: 0f 93 push r16 + e3a: 1f 93 push r17 + e3c: df 93 push r29 + e3e: cf 93 push r28 + e40: 0f 92 push r0 + e42: cd b7 in r28, 0x3d ; 61 + e44: de b7 in r29, 0x3e ; 62 init_motors(); - dd6: b3 dd rcall .-1178 ; 0x93e + e46: 82 dd rcall .-1276 ; 0x94c char dummy; uint8_t field_val = 0; SetupHardware(); - dd8: 46 dc rcall .-1908 ; 0x666 + e48: 0e dc rcall .-2020 ; 0x666 RingBuffer_InitBuffer(&USBtoUSART_Buffer, USBtoUSART_Buffer_Data, sizeof(USBtoUSART_Buffer_Data)); - dda: 8e e7 ldi r24, 0x7E ; 126 - ddc: 91 e0 ldi r25, 0x01 ; 1 - dde: 6a e8 ldi r22, 0x8A ; 138 - de0: 71 e0 ldi r23, 0x01 ; 1 - de2: 6f da rcall .-2850 ; 0x2c2 + e4a: 82 e5 ldi r24, 0x52 ; 82 + e4c: 91 e0 ldi r25, 0x01 ; 1 + e4e: 6e e5 ldi r22, 0x5E ; 94 + e50: 71 e0 ldi r23, 0x01 ; 1 + e52: 37 da rcall .-2962 ; 0x2c2 RingBuffer_InitBuffer(&USARTtoUSB_Buffer, USARTtoUSB_Buffer_Data, sizeof(USARTtoUSB_Buffer_Data)); - de4: 8a e0 ldi r24, 0x0A ; 10 - de6: 92 e0 ldi r25, 0x02 ; 2 - de8: 66 e1 ldi r22, 0x16 ; 22 - dea: 72 e0 ldi r23, 0x02 ; 2 - dec: 6a da rcall .-2860 ; 0x2c2 + e54: 8e ed ldi r24, 0xDE ; 222 + e56: 91 e0 ldi r25, 0x01 ; 1 + e58: 6a ee ldi r22, 0xEA ; 234 + e5a: 71 e0 ldi r23, 0x01 ; 1 + e5c: 32 da rcall .-2972 ; 0x2c2 static inline void GlobalInterruptEnable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) sei(); - dee: 78 94 sei + e5e: 78 94 sei // LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); GlobalInterruptEnable(); touchpad_init(); // you need to call this to setup the I/O pin! - df0: aa db rcall .-2220 ; 0x546 - df2: 8f ef ldi r24, 0xFF ; 255 - df4: 99 e6 ldi r25, 0x69 ; 105 - df6: a8 e1 ldi r26, 0x18 ; 24 - df8: 81 50 subi r24, 0x01 ; 1 - dfa: 90 40 sbci r25, 0x00 ; 0 - dfc: a0 40 sbci r26, 0x00 ; 0 - dfe: e1 f7 brne .-8 ; 0xdf8 - e00: 00 c0 rjmp .+0 ; 0xe02 - e02: 00 00 nop + e60: 72 db rcall .-2332 ; 0x546 + e62: 2f ef ldi r18, 0xFF ; 255 + e64: 39 e6 ldi r19, 0x69 ; 105 + e66: 48 e1 ldi r20, 0x18 ; 24 + e68: 21 50 subi r18, 0x01 ; 1 + e6a: 30 40 sbci r19, 0x00 ; 0 + e6c: 40 40 sbci r20, 0x00 ; 0 + e6e: e1 f7 brne .-8 ; 0xe68 + e70: 00 c0 rjmp .+0 ; 0xe72 + e72: 00 00 nop _delay_ms(500); sei(); - e04: 78 94 sei - + e74: 78 94 sei uint16_t loopcounter=0; - uart_puts("you selected the relative position demo modus:\n\r"); - e06: 83 e2 ldi r24, 0x23 ; 35 - e08: 91 e0 ldi r25, 0x01 ; 1 - e0a: e4 dc rcall .-1592 ; 0x7d4 +// uart_puts("you selected the relative position demo modus:\n\r"); touchpad_set_rel_mode_100dpi();// use touchpad in relative mode - e0c: ad db rcall .-2214 ; 0x568 + e76: 78 db rcall .-2320 ; 0x568 // touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution int16_t x, y = 0; int8_t dx, dy = 0; uint8_t busy = 0, last_busy = 0; - e0e: 10 e0 ldi r17, 0x00 ; 0 + e78: 10 e0 ldi r17, 0x00 ; 0 while (1) { Usb2SerialTask(); - e10: df db rcall .-2114 ; 0x5d0 + e7a: aa db rcall .-2220 ; 0x5d0 // loopcounter++; // if(loopcounter<2000) { // continue; // } // loopcounter=0; parse_command(); // read data from virtual comport - e12: 3c de rcall .-904 ; 0xa8c + e7c: 2e de rcall .-932 ; 0xada touchpad_read(); // read data from touchpad - e14: a0 db rcall .-2240 ; 0x556 + e7e: 6b db rcall .-2346 ; 0x556 dx = delta_x();// returns the amount your finger has moved in x direction since last readout - e16: cc db rcall .-2152 ; 0x5b0 - e18: 08 2f mov r16, r24 + e80: 97 db rcall .-2258 ; 0x5b0 + e82: 08 2f mov r16, r24 dy = delta_y();// returns the amount your finger has moved in y direction since last readout - e1a: ba db rcall .-2188 ; 0x590 + e84: 85 db rcall .-2294 ; 0x590 // increment/decrement some dummy variables with the plate_pos_x += dx; - e1c: 40 2f mov r20, r16 - e1e: 55 27 eor r21, r21 - e20: 47 fd sbrc r20, 7 - e22: 50 95 com r21 - e24: 20 91 7a 01 lds r18, 0x017A - e28: 30 91 7b 01 lds r19, 0x017B - e2c: 24 0f add r18, r20 - e2e: 35 1f adc r19, r21 - e30: 30 93 7b 01 sts 0x017B, r19 - e34: 20 93 7a 01 sts 0x017A, r18 + e86: 40 2f mov r20, r16 + e88: 55 27 eor r21, r21 + e8a: 47 fd sbrc r20, 7 + e8c: 50 95 com r21 + e8e: 20 91 4e 01 lds r18, 0x014E + e92: 30 91 4f 01 lds r19, 0x014F + e96: 24 0f add r18, r20 + e98: 35 1f adc r19, r21 + e9a: 30 93 4f 01 sts 0x014F, r19 + e9e: 20 93 4e 01 sts 0x014E, r18 plate_pos_y += dy; - e38: 68 2f mov r22, r24 - e3a: 77 27 eor r23, r23 - e3c: 67 fd sbrc r22, 7 - e3e: 70 95 com r23 - e40: 80 91 7c 01 lds r24, 0x017C - e44: 90 91 7d 01 lds r25, 0x017D - e48: 86 0f add r24, r22 - e4a: 97 1f adc r25, r23 - e4c: 90 93 7d 01 sts 0x017D, r25 - e50: 80 93 7c 01 sts 0x017C, r24 + ea2: 68 2f mov r22, r24 + ea4: 77 27 eor r23, r23 + ea6: 67 fd sbrc r22, 7 + ea8: 70 95 com r23 + eaa: 80 91 50 01 lds r24, 0x0150 + eae: 90 91 51 01 lds r25, 0x0151 + eb2: 86 0f add r24, r22 + eb4: 97 1f adc r25, r23 + eb6: 90 93 51 01 sts 0x0151, r25 + eba: 80 93 50 01 sts 0x0150, r24 last_busy = busy; busy = move_plate(dx,dy); - e54: ca 01 movw r24, r20 - e56: b2 dd rcall .-1180 ; 0x9bc + ebe: ca 01 movw r24, r20 + ec0: 84 dd rcall .-1272 ; 0x9ca if (last_busy && !(busy)){ - e58: 11 23 and r17, r17 - e5a: 29 f0 breq .+10 ; 0xe66 - e5c: 88 23 and r24, r24 - e5e: 19 f4 brne .+6 ; 0xe66 + ec2: 11 23 and r17, r17 + ec4: 29 f0 breq .+10 ; 0xed0 + ec6: 88 23 and r24, r24 + ec8: 19 f4 brne .+6 ; 0xed0 pos_report(); - e60: 89 83 std Y+1, r24 ; 0x01 - e62: f7 dd rcall .-1042 ; 0xa52 - e64: 89 81 ldd r24, Y+1 ; 0x01 - e66: af e3 ldi r26, 0x3F ; 63 - e68: bc e9 ldi r27, 0x9C ; 156 - e6a: 11 97 sbiw r26, 0x01 ; 1 - e6c: f1 f7 brne .-4 ; 0xe6a - e6e: 00 c0 rjmp .+0 ; 0xe70 - e70: 00 00 nop + eca: 89 83 std Y+1, r24 ; 0x01 + ecc: f3 dd rcall .-1050 ; 0xab4 + ece: 89 81 ldd r24, Y+1 ; 0x01 + ed0: 2f ef ldi r18, 0xFF ; 255 + ed2: 39 ef ldi r19, 0xF9 ; 249 + ed4: 40 e0 ldi r20, 0x00 ; 0 + ed6: 21 50 subi r18, 0x01 ; 1 + ed8: 30 40 sbci r19, 0x00 ; 0 + eda: 40 40 sbci r20, 0x00 ; 0 + edc: e1 f7 brne .-8 ; 0xed6 + ede: 00 c0 rjmp .+0 ; 0xee0 + ee0: 00 00 nop plate_pos_x += dx; plate_pos_y += dy; last_busy = busy; busy = move_plate(dx,dy); - e72: 18 2f mov r17, r24 - e74: cd cf rjmp .-102 ; 0xe10 + ee2: 18 2f mov r17, r24 + ee4: ca cf rjmp .-108 ; 0xe7a -00000e76 : +00000ee6 : const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; switch (DescriptorType) - e76: 92 30 cpi r25, 0x02 ; 2 - e78: 29 f0 breq .+10 ; 0xe84 - e7a: 93 30 cpi r25, 0x03 ; 3 - e7c: 41 f0 breq .+16 ; 0xe8e - e7e: 91 30 cpi r25, 0x01 ; 1 - e80: e9 f4 brne .+58 ; 0xebc - e82: 17 c0 rjmp .+46 ; 0xeb2 + ee6: 92 30 cpi r25, 0x02 ; 2 + ee8: 29 f0 breq .+10 ; 0xef4 + eea: 93 30 cpi r25, 0x03 ; 3 + eec: 41 f0 breq .+16 ; 0xefe + eee: 91 30 cpi r25, 0x01 ; 1 + ef0: e9 f4 brne .+58 ; 0xf2c + ef2: 17 c0 rjmp .+46 ; 0xf22 Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; case DTYPE_Configuration: Address = &ConfigurationDescriptor; Size = sizeof(USB_Descriptor_Configuration_t); - e84: 2e e3 ldi r18, 0x3E ; 62 - e86: 30 e0 ldi r19, 0x00 ; 0 + ef4: 2e e3 ldi r18, 0x3E ; 62 + ef6: 30 e0 ldi r19, 0x00 ; 0 case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; case DTYPE_Configuration: Address = &ConfigurationDescriptor; - e88: ea ea ldi r30, 0xAA ; 170 - e8a: f0 e0 ldi r31, 0x00 ; 0 + ef8: ea ea ldi r30, 0xAA ; 170 + efa: f0 e0 ldi r31, 0x00 ; 0 Size = sizeof(USB_Descriptor_Configuration_t); break; - e8c: 1b c0 rjmp .+54 ; 0xec4 + efc: 1b c0 rjmp .+54 ; 0xf34 case DTYPE_String: switch (DescriptorNumber) - e8e: 81 30 cpi r24, 0x01 ; 1 - e90: 41 f0 breq .+16 ; 0xea2 - e92: 81 30 cpi r24, 0x01 ; 1 - e94: 18 f0 brcs .+6 ; 0xe9c - e96: 82 30 cpi r24, 0x02 ; 2 - e98: 89 f4 brne .+34 ; 0xebc - e9a: 06 c0 rjmp .+12 ; 0xea8 + efe: 81 30 cpi r24, 0x01 ; 1 + f00: 41 f0 breq .+16 ; 0xf12 + f02: 81 30 cpi r24, 0x01 ; 1 + f04: 18 f0 brcs .+6 ; 0xf0c + f06: 82 30 cpi r24, 0x02 ; 2 + f08: 89 f4 brne .+34 ; 0xf2c + f0a: 06 c0 rjmp .+12 ; 0xf18 { case 0x00: Address = &LanguageString; Size = pgm_read_byte(&LanguageString.Header.Size); - e9c: e8 ee ldi r30, 0xE8 ; 232 - e9e: f0 e0 ldi r31, 0x00 ; 0 - ea0: 05 c0 rjmp .+10 ; 0xeac + f0c: e8 ee ldi r30, 0xE8 ; 232 + f0e: f0 e0 ldi r31, 0x00 ; 0 + f10: 05 c0 rjmp .+10 ; 0xf1c break; case 0x01: Address = &ManufacturerString; Size = pgm_read_byte(&ManufacturerString.Header.Size); - ea2: ec ee ldi r30, 0xEC ; 236 - ea4: f0 e0 ldi r31, 0x00 ; 0 - ea6: 02 c0 rjmp .+4 ; 0xeac + f12: ec ee ldi r30, 0xEC ; 236 + f14: f0 e0 ldi r31, 0x00 ; 0 + f16: 02 c0 rjmp .+4 ; 0xf1c break; case 0x02: Address = &ProductString; Size = pgm_read_byte(&ProductString.Header.Size); - ea8: e6 e0 ldi r30, 0x06 ; 6 - eaa: f1 e0 ldi r31, 0x01 ; 1 - eac: 24 91 lpm r18, Z+ - eae: 30 e0 ldi r19, 0x00 ; 0 + f18: e6 e0 ldi r30, 0x06 ; 6 + f1a: f1 e0 ldi r31, 0x01 ; 1 + f1c: 24 91 lpm r18, Z+ + f1e: 30 e0 ldi r19, 0x00 ; 0 break; - eb0: 09 c0 rjmp .+18 ; 0xec4 + f20: 09 c0 rjmp .+18 ; 0xf34 switch (DescriptorType) { case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); - eb2: 22 e1 ldi r18, 0x12 ; 18 - eb4: 30 e0 ldi r19, 0x00 ; 0 + f22: 22 e1 ldi r18, 0x12 ; 18 + f24: 30 e0 ldi r19, 0x00 ; 0 uint16_t Size = NO_DESCRIPTOR; switch (DescriptorType) { case DTYPE_Device: Address = &DeviceDescriptor; - eb6: e8 e9 ldi r30, 0x98 ; 152 - eb8: f0 e0 ldi r31, 0x00 ; 0 - eba: 04 c0 rjmp .+8 ; 0xec4 + f26: e8 e9 ldi r30, 0x98 ; 152 + f28: f0 e0 ldi r31, 0x00 ; 0 + f2a: 04 c0 rjmp .+8 ; 0xf34 { const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; - ebc: 20 e0 ldi r18, 0x00 ; 0 - ebe: 30 e0 ldi r19, 0x00 ; 0 + f2c: 20 e0 ldi r18, 0x00 ; 0 + f2e: 30 e0 ldi r19, 0x00 ; 0 const void** const DescriptorAddress) { const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; - ec0: e0 e0 ldi r30, 0x00 ; 0 - ec2: f0 e0 ldi r31, 0x00 ; 0 + f30: e0 e0 ldi r30, 0x00 ; 0 + f32: f0 e0 ldi r31, 0x00 ; 0 } break; } *DescriptorAddress = Address; - ec4: da 01 movw r26, r20 - ec6: 11 96 adiw r26, 0x01 ; 1 - ec8: fc 93 st X, r31 - eca: ee 93 st -X, r30 + f34: da 01 movw r26, r20 + f36: 11 96 adiw r26, 0x01 ; 1 + f38: fc 93 st X, r31 + f3a: ee 93 st -X, r30 return Size; } - ecc: c9 01 movw r24, r18 - ece: 08 95 ret + f3c: c9 01 movw r24, r18 + f3e: 08 95 ret -00000ed0 : +00000f40 : #if defined(TEMPLATE_FUNC_NAME) uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, uint16_t Length) { uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - ed0: 28 2f mov r18, r24 - ed2: 39 2f mov r19, r25 - ed4: f9 01 movw r30, r18 + f40: 28 2f mov r18, r24 + f42: 39 2f mov r19, r25 + f44: f9 01 movw r30, r18 bool LastPacketFull = false; if (Length > USB_ControlRequest.wLength) - ed6: 80 91 ee 02 lds r24, 0x02EE - eda: 90 91 ef 02 lds r25, 0x02EF - ede: 86 17 cp r24, r22 - ee0: 97 07 cpc r25, r23 - ee2: 18 f4 brcc .+6 ; 0xeea - ee4: bc 01 movw r22, r24 - ee6: 20 e0 ldi r18, 0x00 ; 0 - ee8: 34 c0 rjmp .+104 ; 0xf52 + f46: 80 91 d2 02 lds r24, 0x02D2 + f4a: 90 91 d3 02 lds r25, 0x02D3 + f4e: 86 17 cp r24, r22 + f50: 97 07 cpc r25, r23 + f52: 18 f4 brcc .+6 ; 0xf5a + f54: bc 01 movw r22, r24 + f56: 20 e0 ldi r18, 0x00 ; 0 + f58: 34 c0 rjmp .+104 ; 0xfc2 Length = USB_ControlRequest.wLength; else if (!(Length)) - eea: 61 15 cp r22, r1 - eec: 71 05 cpc r23, r1 - eee: d9 f7 brne .-10 ; 0xee6 + f5a: 61 15 cp r22, r1 + f5c: 71 05 cpc r23, r1 + f5e: d9 f7 brne .-10 ; 0xf56 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - ef0: 80 91 e8 00 lds r24, 0x00E8 - ef4: 8e 77 andi r24, 0x7E ; 126 - ef6: 80 93 e8 00 sts 0x00E8, r24 - efa: f5 cf rjmp .-22 ; 0xee6 + f60: 80 91 e8 00 lds r24, 0x00E8 + f64: 8e 77 andi r24, 0x7E ; 126 + f66: 80 93 e8 00 sts 0x00E8, r24 + f6a: f5 cf rjmp .-22 ; 0xf56 Endpoint_ClearIN(); while (Length || LastPacketFull) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - efc: 8e b3 in r24, 0x1e ; 30 + f6c: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - efe: 88 23 and r24, r24 - f00: e9 f1 breq .+122 ; 0xf7c + f6e: 88 23 and r24, r24 + f70: e9 f1 breq .+122 ; 0xfec return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - f02: 85 30 cpi r24, 0x05 ; 5 - f04: b9 f1 breq .+110 ; 0xf74 + f72: 85 30 cpi r24, 0x05 ; 5 + f74: b9 f1 breq .+110 ; 0xfe4 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - f06: 80 91 e8 00 lds r24, 0x00E8 + f76: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_BusSuspended; else if (Endpoint_IsSETUPReceived()) - f0a: 83 fd sbrc r24, 3 - f0c: 35 c0 rjmp .+106 ; 0xf78 + f7a: 83 fd sbrc r24, 3 + f7c: 35 c0 rjmp .+106 ; 0xfe8 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - f0e: 80 91 e8 00 lds r24, 0x00E8 + f7e: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_HostAborted; else if (Endpoint_IsOUTReceived()) - f12: 82 fd sbrc r24, 2 - f14: 29 c0 rjmp .+82 ; 0xf68 + f82: 82 fd sbrc r24, 2 + f84: 29 c0 rjmp .+82 ; 0xfd8 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - f16: 80 91 e8 00 lds r24, 0x00E8 + f86: 80 91 e8 00 lds r24, 0x00E8 break; if (Endpoint_IsINReady()) - f1a: 80 ff sbrs r24, 0 - f1c: 1a c0 rjmp .+52 ; 0xf52 + f8a: 80 ff sbrs r24, 0 + f8c: 1a c0 rjmp .+52 ; 0xfc2 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - f1e: 80 91 f2 00 lds r24, 0x00F2 - f22: 90 e0 ldi r25, 0x00 ; 0 + f8e: 80 91 f2 00 lds r24, 0x00F2 + f92: 90 e0 ldi r25, 0x00 ; 0 { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - f24: 06 c0 rjmp .+12 ; 0xf32 + f94: 06 c0 rjmp .+12 ; 0xfa2 { TEMPLATE_TRANSFER_BYTE(DataStream); - f26: 21 91 ld r18, Z+ + f96: 21 91 ld r18, Z+ * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - f28: 20 93 f1 00 sts 0x00F1, r18 + f98: 20 93 f1 00 sts 0x00F1, r18 TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; - f2c: 61 50 subi r22, 0x01 ; 1 - f2e: 70 40 sbci r23, 0x00 ; 0 + f9c: 61 50 subi r22, 0x01 ; 1 + f9e: 70 40 sbci r23, 0x00 ; 0 BytesInEndpoint++; - f30: 01 96 adiw r24, 0x01 ; 1 + fa0: 01 96 adiw r24, 0x01 ; 1 if (Endpoint_IsINReady()) { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - f32: 61 15 cp r22, r1 - f34: 71 05 cpc r23, r1 - f36: 19 f0 breq .+6 ; 0xf3e - f38: 88 30 cpi r24, 0x08 ; 8 - f3a: 91 05 cpc r25, r1 - f3c: a0 f3 brcs .-24 ; 0xf26 + fa2: 61 15 cp r22, r1 + fa4: 71 05 cpc r23, r1 + fa6: 19 f0 breq .+6 ; 0xfae + fa8: 88 30 cpi r24, 0x08 ; 8 + faa: 91 05 cpc r25, r1 + fac: a0 f3 brcs .-24 ; 0xf96 TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; BytesInEndpoint++; } LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - f3e: 21 e0 ldi r18, 0x01 ; 1 - f40: 88 30 cpi r24, 0x08 ; 8 - f42: 91 05 cpc r25, r1 - f44: 09 f0 breq .+2 ; 0xf48 - f46: 20 e0 ldi r18, 0x00 ; 0 + fae: 21 e0 ldi r18, 0x01 ; 1 + fb0: 88 30 cpi r24, 0x08 ; 8 + fb2: 91 05 cpc r25, r1 + fb4: 09 f0 breq .+2 ; 0xfb8 + fb6: 20 e0 ldi r18, 0x00 ; 0 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - f48: 80 91 e8 00 lds r24, 0x00E8 - f4c: 8e 77 andi r24, 0x7E ; 126 - f4e: 80 93 e8 00 sts 0x00E8, r24 + fb8: 80 91 e8 00 lds r24, 0x00E8 + fbc: 8e 77 andi r24, 0x7E ; 126 + fbe: 80 93 e8 00 sts 0x00E8, r24 if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; else if (!(Length)) Endpoint_ClearIN(); while (Length || LastPacketFull) - f52: 61 15 cp r22, r1 - f54: 71 05 cpc r23, r1 - f56: 91 f6 brne .-92 ; 0xefc - f58: 22 23 and r18, r18 - f5a: 81 f6 brne .-96 ; 0xefc - f5c: 05 c0 rjmp .+10 ; 0xf68 + fc2: 61 15 cp r22, r1 + fc4: 71 05 cpc r23, r1 + fc6: 91 f6 brne .-92 ; 0xf6c + fc8: 22 23 and r18, r18 + fca: 81 f6 brne .-96 ; 0xf6c + fcc: 05 c0 rjmp .+10 ; 0xfd8 } } while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - f5e: 8e b3 in r24, 0x1e ; 30 + fce: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - f60: 88 23 and r24, r24 - f62: 61 f0 breq .+24 ; 0xf7c + fd0: 88 23 and r24, r24 + fd2: 61 f0 breq .+24 ; 0xfec return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - f64: 85 30 cpi r24, 0x05 ; 5 - f66: 61 f0 breq .+24 ; 0xf80 + fd4: 85 30 cpi r24, 0x05 ; 5 + fd6: 61 f0 breq .+24 ; 0xff0 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - f68: 80 91 e8 00 lds r24, 0x00E8 + fd8: 80 91 e8 00 lds r24, 0x00E8 LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); Endpoint_ClearIN(); } } while (!(Endpoint_IsOUTReceived())) - f6c: 82 ff sbrs r24, 2 - f6e: f7 cf rjmp .-18 ; 0xf5e + fdc: 82 ff sbrs r24, 2 + fde: f7 cf rjmp .-18 ; 0xfce return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; } return ENDPOINT_RWCSTREAM_NoError; - f70: 80 e0 ldi r24, 0x00 ; 0 - f72: 08 95 ret + fe0: 80 e0 ldi r24, 0x00 ; 0 + fe2: 08 95 ret uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - f74: 83 e0 ldi r24, 0x03 ; 3 - f76: 08 95 ret + fe4: 83 e0 ldi r24, 0x03 ; 3 + fe6: 08 95 ret else if (Endpoint_IsSETUPReceived()) return ENDPOINT_RWCSTREAM_HostAborted; - f78: 81 e0 ldi r24, 0x01 ; 1 - f7a: 08 95 ret + fe8: 81 e0 ldi r24, 0x01 ; 1 + fea: 08 95 ret while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; - f7c: 82 e0 ldi r24, 0x02 ; 2 - f7e: 08 95 ret + fec: 82 e0 ldi r24, 0x02 ; 2 + fee: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - f80: 83 e0 ldi r24, 0x03 ; 3 + ff0: 83 e0 ldi r24, 0x03 ; 3 } return ENDPOINT_RWCSTREAM_NoError; } - f82: 08 95 ret + ff2: 08 95 ret -00000f84 : +00000ff4 : #if defined(TEMPLATE_FUNC_NAME) uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, uint16_t Length) { uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - f84: e8 2f mov r30, r24 - f86: f9 2f mov r31, r25 + ff4: e8 2f mov r30, r24 + ff6: f9 2f mov r31, r25 bool LastPacketFull = false; if (Length > USB_ControlRequest.wLength) - f88: 80 91 ee 02 lds r24, 0x02EE - f8c: 90 91 ef 02 lds r25, 0x02EF - f90: 86 17 cp r24, r22 - f92: 97 07 cpc r25, r23 - f94: 18 f4 brcc .+6 ; 0xf9c - f96: bc 01 movw r22, r24 - f98: 20 e0 ldi r18, 0x00 ; 0 - f9a: 36 c0 rjmp .+108 ; 0x1008 + ff8: 80 91 d2 02 lds r24, 0x02D2 + ffc: 90 91 d3 02 lds r25, 0x02D3 + 1000: 86 17 cp r24, r22 + 1002: 97 07 cpc r25, r23 + 1004: 18 f4 brcc .+6 ; 0x100c + 1006: bc 01 movw r22, r24 + 1008: 20 e0 ldi r18, 0x00 ; 0 + 100a: 36 c0 rjmp .+108 ; 0x1078 Length = USB_ControlRequest.wLength; else if (!(Length)) - f9c: 61 15 cp r22, r1 - f9e: 71 05 cpc r23, r1 - fa0: d9 f7 brne .-10 ; 0xf98 + 100c: 61 15 cp r22, r1 + 100e: 71 05 cpc r23, r1 + 1010: d9 f7 brne .-10 ; 0x1008 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - fa2: 80 91 e8 00 lds r24, 0x00E8 - fa6: 8e 77 andi r24, 0x7E ; 126 - fa8: 80 93 e8 00 sts 0x00E8, r24 - fac: f5 cf rjmp .-22 ; 0xf98 + 1012: 80 91 e8 00 lds r24, 0x00E8 + 1016: 8e 77 andi r24, 0x7E ; 126 + 1018: 80 93 e8 00 sts 0x00E8, r24 + 101c: f5 cf rjmp .-22 ; 0x1008 Endpoint_ClearIN(); while (Length || LastPacketFull) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - fae: 8e b3 in r24, 0x1e ; 30 + 101e: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - fb0: 88 23 and r24, r24 - fb2: 09 f4 brne .+2 ; 0xfb6 - fb4: 3e c0 rjmp .+124 ; 0x1032 + 1020: 88 23 and r24, r24 + 1022: 09 f4 brne .+2 ; 0x1026 + 1024: 3e c0 rjmp .+124 ; 0x10a2 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - fb6: 85 30 cpi r24, 0x05 ; 5 - fb8: c1 f1 breq .+112 ; 0x102a + 1026: 85 30 cpi r24, 0x05 ; 5 + 1028: c1 f1 breq .+112 ; 0x109a * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - fba: 80 91 e8 00 lds r24, 0x00E8 + 102a: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_BusSuspended; else if (Endpoint_IsSETUPReceived()) - fbe: 83 fd sbrc r24, 3 - fc0: 36 c0 rjmp .+108 ; 0x102e + 102e: 83 fd sbrc r24, 3 + 1030: 36 c0 rjmp .+108 ; 0x109e * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - fc2: 80 91 e8 00 lds r24, 0x00E8 + 1032: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_HostAborted; else if (Endpoint_IsOUTReceived()) - fc6: 82 fd sbrc r24, 2 - fc8: 2a c0 rjmp .+84 ; 0x101e + 1036: 82 fd sbrc r24, 2 + 1038: 2a c0 rjmp .+84 ; 0x108e * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - fca: 80 91 e8 00 lds r24, 0x00E8 + 103a: 80 91 e8 00 lds r24, 0x00E8 break; if (Endpoint_IsINReady()) - fce: 80 ff sbrs r24, 0 - fd0: 1b c0 rjmp .+54 ; 0x1008 + 103e: 80 ff sbrs r24, 0 + 1040: 1b c0 rjmp .+54 ; 0x1078 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - fd2: 80 91 f2 00 lds r24, 0x00F2 - fd6: 90 e0 ldi r25, 0x00 ; 0 + 1042: 80 91 f2 00 lds r24, 0x00F2 + 1046: 90 e0 ldi r25, 0x00 ; 0 { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - fd8: 07 c0 rjmp .+14 ; 0xfe8 + 1048: 07 c0 rjmp .+14 ; 0x1058 { TEMPLATE_TRANSFER_BYTE(DataStream); - fda: 24 91 lpm r18, Z+ + 104a: 24 91 lpm r18, Z+ * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - fdc: 20 93 f1 00 sts 0x00F1, r18 + 104c: 20 93 f1 00 sts 0x00F1, r18 TEMPLATE_BUFFER_MOVE(DataStream, 1); - fe0: 31 96 adiw r30, 0x01 ; 1 + 1050: 31 96 adiw r30, 0x01 ; 1 Length--; - fe2: 61 50 subi r22, 0x01 ; 1 - fe4: 70 40 sbci r23, 0x00 ; 0 + 1052: 61 50 subi r22, 0x01 ; 1 + 1054: 70 40 sbci r23, 0x00 ; 0 BytesInEndpoint++; - fe6: 01 96 adiw r24, 0x01 ; 1 + 1056: 01 96 adiw r24, 0x01 ; 1 if (Endpoint_IsINReady()) { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - fe8: 61 15 cp r22, r1 - fea: 71 05 cpc r23, r1 - fec: 19 f0 breq .+6 ; 0xff4 - fee: 88 30 cpi r24, 0x08 ; 8 - ff0: 91 05 cpc r25, r1 - ff2: 98 f3 brcs .-26 ; 0xfda + 1058: 61 15 cp r22, r1 + 105a: 71 05 cpc r23, r1 + 105c: 19 f0 breq .+6 ; 0x1064 + 105e: 88 30 cpi r24, 0x08 ; 8 + 1060: 91 05 cpc r25, r1 + 1062: 98 f3 brcs .-26 ; 0x104a TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; BytesInEndpoint++; } LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - ff4: 21 e0 ldi r18, 0x01 ; 1 - ff6: 88 30 cpi r24, 0x08 ; 8 - ff8: 91 05 cpc r25, r1 - ffa: 09 f0 breq .+2 ; 0xffe - ffc: 20 e0 ldi r18, 0x00 ; 0 + 1064: 21 e0 ldi r18, 0x01 ; 1 + 1066: 88 30 cpi r24, 0x08 ; 8 + 1068: 91 05 cpc r25, r1 + 106a: 09 f0 breq .+2 ; 0x106e + 106c: 20 e0 ldi r18, 0x00 ; 0 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - ffe: 80 91 e8 00 lds r24, 0x00E8 - 1002: 8e 77 andi r24, 0x7E ; 126 - 1004: 80 93 e8 00 sts 0x00E8, r24 + 106e: 80 91 e8 00 lds r24, 0x00E8 + 1072: 8e 77 andi r24, 0x7E ; 126 + 1074: 80 93 e8 00 sts 0x00E8, r24 if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; else if (!(Length)) Endpoint_ClearIN(); while (Length || LastPacketFull) - 1008: 61 15 cp r22, r1 - 100a: 71 05 cpc r23, r1 - 100c: 81 f6 brne .-96 ; 0xfae - 100e: 22 23 and r18, r18 - 1010: 71 f6 brne .-100 ; 0xfae - 1012: 05 c0 rjmp .+10 ; 0x101e + 1078: 61 15 cp r22, r1 + 107a: 71 05 cpc r23, r1 + 107c: 81 f6 brne .-96 ; 0x101e + 107e: 22 23 and r18, r18 + 1080: 71 f6 brne .-100 ; 0x101e + 1082: 05 c0 rjmp .+10 ; 0x108e } } while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - 1014: 8e b3 in r24, 0x1e ; 30 + 1084: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 1016: 88 23 and r24, r24 - 1018: 61 f0 breq .+24 ; 0x1032 + 1086: 88 23 and r24, r24 + 1088: 61 f0 breq .+24 ; 0x10a2 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 101a: 85 30 cpi r24, 0x05 ; 5 - 101c: 61 f0 breq .+24 ; 0x1036 + 108a: 85 30 cpi r24, 0x05 ; 5 + 108c: 61 f0 breq .+24 ; 0x10a6 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 101e: 80 91 e8 00 lds r24, 0x00E8 + 108e: 80 91 e8 00 lds r24, 0x00E8 LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); Endpoint_ClearIN(); } } while (!(Endpoint_IsOUTReceived())) - 1022: 82 ff sbrs r24, 2 - 1024: f7 cf rjmp .-18 ; 0x1014 + 1092: 82 ff sbrs r24, 2 + 1094: f7 cf rjmp .-18 ; 0x1084 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; } return ENDPOINT_RWCSTREAM_NoError; - 1026: 80 e0 ldi r24, 0x00 ; 0 - 1028: 08 95 ret + 1096: 80 e0 ldi r24, 0x00 ; 0 + 1098: 08 95 ret uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - 102a: 83 e0 ldi r24, 0x03 ; 3 - 102c: 08 95 ret + 109a: 83 e0 ldi r24, 0x03 ; 3 + 109c: 08 95 ret else if (Endpoint_IsSETUPReceived()) return ENDPOINT_RWCSTREAM_HostAborted; - 102e: 81 e0 ldi r24, 0x01 ; 1 - 1030: 08 95 ret + 109e: 81 e0 ldi r24, 0x01 ; 1 + 10a0: 08 95 ret while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; - 1032: 82 e0 ldi r24, 0x02 ; 2 - 1034: 08 95 ret + 10a2: 82 e0 ldi r24, 0x02 ; 2 + 10a4: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - 1036: 83 e0 ldi r24, 0x03 ; 3 + 10a6: 83 e0 ldi r24, 0x03 ; 3 } return ENDPOINT_RWCSTREAM_NoError; } - 1038: 08 95 ret + 10a8: 08 95 ret -0000103a : +000010aa : UECFG0X = UECFG0XData; UECFG1X = UECFG1XData; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - 103a: 98 2f mov r25, r24 - 103c: 2c c0 rjmp .+88 ; 0x1096 + 10aa: 98 2f mov r25, r24 + 10ac: 2c c0 rjmp .+88 ; 0x1106 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 103e: 29 2f mov r18, r25 - 1040: 2f 70 andi r18, 0x0F ; 15 - 1042: 20 93 e9 00 sts 0x00E9, r18 + 10ae: 29 2f mov r18, r25 + 10b0: 2f 70 andi r18, 0x0F ; 15 + 10b2: 20 93 e9 00 sts 0x00E9, r18 uint8_t UECFG1XTemp; uint8_t UEIENXTemp; Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) - 1046: 98 17 cp r25, r24 - 1048: 39 f0 breq .+14 ; 0x1058 + 10b6: 98 17 cp r25, r24 + 10b8: 39 f0 breq .+14 ; 0x10c8 UECFG1XTemp = UECFG1XData; UEIENXTemp = 0; } else { UECFG0XTemp = UECFG0X; - 104a: 70 91 ec 00 lds r23, 0x00EC + 10ba: 70 91 ec 00 lds r23, 0x00EC UECFG1XTemp = UECFG1X; - 104e: 20 91 ed 00 lds r18, 0x00ED + 10be: 20 91 ed 00 lds r18, 0x00ED UEIENXTemp = UEIENX; - 1052: 50 91 f0 00 lds r21, 0x00F0 - 1056: 03 c0 rjmp .+6 ; 0x105e + 10c2: 50 91 f0 00 lds r21, 0x00F0 + 10c6: 03 c0 rjmp .+6 ; 0x10ce Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) { UECFG0XTemp = UECFG0XData; UECFG1XTemp = UECFG1XData; - 1058: 24 2f mov r18, r20 + 10c8: 24 2f mov r18, r20 Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) { UECFG0XTemp = UECFG0XData; - 105a: 76 2f mov r23, r22 + 10ca: 76 2f mov r23, r22 UECFG1XTemp = UECFG1XData; UEIENXTemp = 0; - 105c: 50 e0 ldi r21, 0x00 ; 0 + 10cc: 50 e0 ldi r21, 0x00 ; 0 UECFG0XTemp = UECFG0X; UECFG1XTemp = UECFG1X; UEIENXTemp = UEIENX; } if (!(UECFG1XTemp & (1 << ALLOC))) - 105e: 21 ff sbrs r18, 1 - 1060: 19 c0 rjmp .+50 ; 0x1094 + 10ce: 21 ff sbrs r18, 1 + 10d0: 19 c0 rjmp .+50 ; 0x1104 * to and from a host. */ static inline void Endpoint_DisableEndpoint(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_DisableEndpoint(void) { UECONX &= ~(1 << EPEN); - 1062: 30 91 eb 00 lds r19, 0x00EB - 1066: 3e 7f andi r19, 0xFE ; 254 - 1068: 30 93 eb 00 sts 0x00EB, r19 + 10d2: 30 91 eb 00 lds r19, 0x00EB + 10d6: 3e 7f andi r19, 0xFE ; 254 + 10d8: 30 93 eb 00 sts 0x00EB, r19 continue; Endpoint_DisableEndpoint(); UECFG1X &= ~(1 << ALLOC); - 106c: 30 91 ed 00 lds r19, 0x00ED - 1070: 3d 7f andi r19, 0xFD ; 253 - 1072: 30 93 ed 00 sts 0x00ED, r19 + 10dc: 30 91 ed 00 lds r19, 0x00ED + 10e0: 3d 7f andi r19, 0xFD ; 253 + 10e2: 30 93 ed 00 sts 0x00ED, r19 * \note Endpoints must first be configured properly via \ref Endpoint_ConfigureEndpoint(). */ static inline void Endpoint_EnableEndpoint(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_EnableEndpoint(void) { UECONX |= (1 << EPEN); - 1076: 30 91 eb 00 lds r19, 0x00EB - 107a: 31 60 ori r19, 0x01 ; 1 - 107c: 30 93 eb 00 sts 0x00EB, r19 + 10e6: 30 91 eb 00 lds r19, 0x00EB + 10ea: 31 60 ori r19, 0x01 ; 1 + 10ec: 30 93 eb 00 sts 0x00EB, r19 Endpoint_EnableEndpoint(); UECFG0X = UECFG0XTemp; - 1080: 70 93 ec 00 sts 0x00EC, r23 + 10f0: 70 93 ec 00 sts 0x00EC, r23 UECFG1X = UECFG1XTemp; - 1084: 20 93 ed 00 sts 0x00ED, r18 + 10f4: 20 93 ed 00 sts 0x00ED, r18 UEIENX = UEIENXTemp; - 1088: 50 93 f0 00 sts 0x00F0, r21 + 10f8: 50 93 f0 00 sts 0x00F0, r21 * \return Boolean \c true if the currently selected endpoint has been configured, \c false otherwise. */ static inline bool Endpoint_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsConfigured(void) { return ((UESTA0X & (1 << CFGOK)) ? true : false); - 108c: 20 91 ee 00 lds r18, 0x00EE + 10fc: 20 91 ee 00 lds r18, 0x00EE if (!(Endpoint_IsConfigured())) - 1090: 27 ff sbrs r18, 7 - 1092: 08 c0 rjmp .+16 ; 0x10a4 + 1100: 27 ff sbrs r18, 7 + 1102: 08 c0 rjmp .+16 ; 0x1114 UECFG0X = UECFG0XData; UECFG1X = UECFG1XData; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - 1094: 9f 5f subi r25, 0xFF ; 255 - 1096: 95 30 cpi r25, 0x05 ; 5 - 1098: 90 f2 brcs .-92 ; 0x103e + 1104: 9f 5f subi r25, 0xFF ; 255 + 1106: 95 30 cpi r25, 0x05 ; 5 + 1108: 90 f2 brcs .-92 ; 0x10ae */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 109a: 8f 70 andi r24, 0x0F ; 15 - 109c: 80 93 e9 00 sts 0x00E9, r24 + 110a: 8f 70 andi r24, 0x0F ; 15 + 110c: 80 93 e9 00 sts 0x00E9, r24 if (!(Endpoint_IsConfigured())) return false; } Endpoint_SelectEndpoint(Number); return true; - 10a0: 81 e0 ldi r24, 0x01 ; 1 - 10a2: 08 95 ret + 1110: 81 e0 ldi r24, 0x01 ; 1 + 1112: 08 95 ret UECFG0X = UECFG0XTemp; UECFG1X = UECFG1XTemp; UEIENX = UEIENXTemp; if (!(Endpoint_IsConfigured())) return false; - 10a4: 80 e0 ldi r24, 0x00 ; 0 + 1114: 80 e0 ldi r24, 0x00 ; 0 } Endpoint_SelectEndpoint(Number); return true; #endif } - 10a6: 08 95 ret + 1116: 08 95 ret -000010a8 : +00001118 : uint8_t USB_Device_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE; #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { - 10a8: ef 92 push r14 - 10aa: ff 92 push r15 - 10ac: 0f 93 push r16 - 10ae: 1f 93 push r17 - 10b0: cf 93 push r28 - 10b2: df 93 push r29 - 10b4: 16 2f mov r17, r22 + 1118: ef 92 push r14 + 111a: ff 92 push r15 + 111c: 0f 93 push r16 + 111e: 1f 93 push r17 + 1120: cf 93 push r28 + 1122: df 93 push r29 + 1124: 16 2f mov r17, r22 { if (!(Table[i].Address)) continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; - 10b6: e8 2e mov r14, r24 - 10b8: e7 01 movw r28, r14 - 10ba: 7e 01 movw r14, r28 - 10bc: f9 2e mov r15, r25 - 10be: e7 01 movw r28, r14 + 1126: e8 2e mov r14, r24 + 1128: e7 01 movw r28, r14 + 112a: 7e 01 movw r14, r28 + 112c: f9 2e mov r15, r25 + 112e: e7 01 movw r28, r14 #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { for (uint8_t i = 0; i < Entries; i++) - 10c0: 00 e0 ldi r16, 0x00 ; 0 - 10c2: 2a c0 rjmp .+84 ; 0x1118 + 1130: 00 e0 ldi r16, 0x00 ; 0 + 1132: 2a c0 rjmp .+84 ; 0x1188 { if (!(Table[i].Address)) - 10c4: 98 81 ld r25, Y - 10c6: 99 23 and r25, r25 - 10c8: 29 f1 breq .+74 ; 0x1114 + 1134: 98 81 ld r25, Y + 1136: 99 23 and r25, r25 + 1138: 29 f1 breq .+74 ; 0x1184 continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) - 10ca: 6b 81 ldd r22, Y+3 ; 0x03 - 10cc: e9 81 ldd r30, Y+1 ; 0x01 - 10ce: fa 81 ldd r31, Y+2 ; 0x02 - 10d0: 2c 81 ldd r18, Y+4 ; 0x04 + 113a: 6b 81 ldd r22, Y+3 ; 0x03 + 113c: e9 81 ldd r30, Y+1 ; 0x01 + 113e: fa 81 ldd r31, Y+2 ; 0x02 + 1140: 2c 81 ldd r18, Y+4 ; 0x04 static inline bool Endpoint_ConfigureEndpoint(const uint8_t Address, const uint8_t Type, const uint16_t Size, const uint8_t Banks) { uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); - 10d2: 89 2f mov r24, r25 - 10d4: 8f 70 andi r24, 0x0F ; 15 + 1142: 89 2f mov r24, r25 + 1144: 8f 70 andi r24, 0x0F ; 15 if (Number >= ENDPOINT_TOTAL_ENDPOINTS) - 10d6: 85 30 cpi r24, 0x05 ; 5 - 10d8: 18 f5 brcc .+70 ; 0x1120 + 1146: 85 30 cpi r24, 0x05 ; 5 + 1148: 18 f5 brcc .+70 ; 0x1190 return false; return Endpoint_ConfigureEndpoint_Prv(Number, ((Type << EPTYPE0) | ((Address & ENDPOINT_DIR_IN) ? (1 << EPDIR) : 0)), - 10da: 62 95 swap r22 - 10dc: 66 0f add r22, r22 - 10de: 66 0f add r22, r22 - 10e0: 60 7c andi r22, 0xC0 ; 192 - 10e2: 99 1f adc r25, r25 - 10e4: 99 27 eor r25, r25 - 10e6: 99 1f adc r25, r25 + 114a: 62 95 swap r22 + 114c: 66 0f add r22, r22 + 114e: 66 0f add r22, r22 + 1150: 60 7c andi r22, 0xC0 ; 192 + 1152: 99 1f adc r25, r25 + 1154: 99 27 eor r25, r25 + 1156: 99 1f adc r25, r25 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - 10e8: 69 2b or r22, r25 - 10ea: 22 30 cpi r18, 0x02 ; 2 - 10ec: 10 f0 brcs .+4 ; 0x10f2 - 10ee: 96 e0 ldi r25, 0x06 ; 6 - 10f0: 01 c0 rjmp .+2 ; 0x10f4 - 10f2: 92 e0 ldi r25, 0x02 ; 2 + 1158: 69 2b or r22, r25 + 115a: 22 30 cpi r18, 0x02 ; 2 + 115c: 10 f0 brcs .+4 ; 0x1162 + 115e: 96 e0 ldi r25, 0x06 ; 6 + 1160: 01 c0 rjmp .+2 ; 0x1164 + 1162: 92 e0 ldi r25, 0x02 ; 2 static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; uint16_t CheckBytes = 8; - 10f4: 28 e0 ldi r18, 0x08 ; 8 - 10f6: 30 e0 ldi r19, 0x00 ; 0 + 1164: 28 e0 ldi r18, 0x08 ; 8 + 1166: 30 e0 ldi r19, 0x00 ; 0 /* Inline Functions: */ static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; - 10f8: 40 e0 ldi r20, 0x00 ; 0 - 10fa: 03 c0 rjmp .+6 ; 0x1102 + 1168: 40 e0 ldi r20, 0x00 ; 0 + 116a: 03 c0 rjmp .+6 ; 0x1172 uint16_t CheckBytes = 8; while (CheckBytes < Bytes) { MaskVal++; - 10fc: 4f 5f subi r20, 0xFF ; 255 + 116c: 4f 5f subi r20, 0xFF ; 255 CheckBytes <<= 1; - 10fe: 22 0f add r18, r18 - 1100: 33 1f adc r19, r19 + 116e: 22 0f add r18, r18 + 1170: 33 1f adc r19, r19 static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; uint16_t CheckBytes = 8; while (CheckBytes < Bytes) - 1102: 2e 17 cp r18, r30 - 1104: 3f 07 cpc r19, r31 - 1106: d0 f3 brcs .-12 ; 0x10fc + 1172: 2e 17 cp r18, r30 + 1174: 3f 07 cpc r19, r31 + 1176: d0 f3 brcs .-12 ; 0x116c { MaskVal++; CheckBytes <<= 1; } return (MaskVal << EPSIZE0); - 1108: 42 95 swap r20 - 110a: 40 7f andi r20, 0xF0 ; 240 + 1178: 42 95 swap r20 + 117a: 40 7f andi r20, 0xF0 ; 240 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - 110c: 49 2b or r20, r25 - 110e: 95 df rcall .-214 ; 0x103a - 1110: 88 23 and r24, r24 - 1112: 31 f0 breq .+12 ; 0x1120 + 117c: 49 2b or r20, r25 + 117e: 95 df rcall .-214 ; 0x10aa + 1180: 88 23 and r24, r24 + 1182: 31 f0 breq .+12 ; 0x1190 #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { for (uint8_t i = 0; i < Entries; i++) - 1114: 0f 5f subi r16, 0xFF ; 255 - 1116: 25 96 adiw r28, 0x05 ; 5 - 1118: 01 17 cp r16, r17 - 111a: a0 f2 brcs .-88 ; 0x10c4 + 1184: 0f 5f subi r16, 0xFF ; 255 + 1186: 25 96 adiw r28, 0x05 ; 5 + 1188: 01 17 cp r16, r17 + 118a: a0 f2 brcs .-88 ; 0x1134 if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; } return true; - 111c: 81 e0 ldi r24, 0x01 ; 1 - 111e: 01 c0 rjmp .+2 ; 0x1122 + 118c: 81 e0 ldi r24, 0x01 ; 1 + 118e: 01 c0 rjmp .+2 ; 0x1192 { if (!(Table[i].Address)) continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; - 1120: 80 e0 ldi r24, 0x00 ; 0 + 1190: 80 e0 ldi r24, 0x00 ; 0 } return true; } - 1122: df 91 pop r29 - 1124: cf 91 pop r28 - 1126: 1f 91 pop r17 - 1128: 0f 91 pop r16 - 112a: ff 90 pop r15 - 112c: ef 90 pop r14 - 112e: 08 95 ret - -00001130 : + 1192: df 91 pop r29 + 1194: cf 91 pop r28 + 1196: 1f 91 pop r17 + 1198: 0f 91 pop r16 + 119a: ff 90 pop r15 + 119c: ef 90 pop r14 + 119e: 08 95 ret + +000011a0 : } } void Endpoint_ClearStatusStage(void) { if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) - 1130: 80 91 e8 02 lds r24, 0x02E8 - 1134: 87 ff sbrs r24, 7 - 1136: 11 c0 rjmp .+34 ; 0x115a - 1138: 03 c0 rjmp .+6 ; 0x1140 + 11a0: 80 91 cc 02 lds r24, 0x02CC + 11a4: 87 ff sbrs r24, 7 + 11a6: 11 c0 rjmp .+34 ; 0x11ca + 11a8: 03 c0 rjmp .+6 ; 0x11b0 { while (!(Endpoint_IsOUTReceived())) { if (USB_DeviceState == DEVICE_STATE_Unattached) - 113a: 8e b3 in r24, 0x1e ; 30 - 113c: 88 23 and r24, r24 - 113e: b1 f0 breq .+44 ; 0x116c + 11aa: 8e b3 in r24, 0x1e ; 30 + 11ac: 88 23 and r24, r24 + 11ae: b1 f0 breq .+44 ; 0x11dc * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 1140: 80 91 e8 00 lds r24, 0x00E8 + 11b0: 80 91 e8 00 lds r24, 0x00E8 void Endpoint_ClearStatusStage(void) { if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) { while (!(Endpoint_IsOUTReceived())) - 1144: 82 ff sbrs r24, 2 - 1146: f9 cf rjmp .-14 ; 0x113a + 11b4: 82 ff sbrs r24, 2 + 11b6: f9 cf rjmp .-14 ; 0x11aa */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1148: 80 91 e8 00 lds r24, 0x00E8 - 114c: 8b 77 andi r24, 0x7B ; 123 - 114e: 80 93 e8 00 sts 0x00E8, r24 - 1152: 08 95 ret + 11b8: 80 91 e8 00 lds r24, 0x00E8 + 11bc: 8b 77 andi r24, 0x7B ; 123 + 11be: 80 93 e8 00 sts 0x00E8, r24 + 11c2: 08 95 ret } else { while (!(Endpoint_IsINReady())) { if (USB_DeviceState == DEVICE_STATE_Unattached) - 1154: 8e b3 in r24, 0x1e ; 30 - 1156: 88 23 and r24, r24 - 1158: 49 f0 breq .+18 ; 0x116c + 11c4: 8e b3 in r24, 0x1e ; 30 + 11c6: 88 23 and r24, r24 + 11c8: 49 f0 breq .+18 ; 0x11dc * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 115a: 80 91 e8 00 lds r24, 0x00E8 + 11ca: 80 91 e8 00 lds r24, 0x00E8 Endpoint_ClearOUT(); } else { while (!(Endpoint_IsINReady())) - 115e: 80 ff sbrs r24, 0 - 1160: f9 cf rjmp .-14 ; 0x1154 + 11ce: 80 ff sbrs r24, 0 + 11d0: f9 cf rjmp .-14 ; 0x11c4 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 1162: 80 91 e8 00 lds r24, 0x00E8 - 1166: 8e 77 andi r24, 0x7E ; 126 - 1168: 80 93 e8 00 sts 0x00E8, r24 - 116c: 08 95 ret + 11d2: 80 91 e8 00 lds r24, 0x00E8 + 11d6: 8e 77 andi r24, 0x7E ; 126 + 11d8: 80 93 e8 00 sts 0x00E8, r24 + 11dc: 08 95 ret -0000116e : +000011de : * \return Current USB frame number from the USB controller. */ static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint16_t USB_Device_GetFrameNumber(void) { return UDFNUM; - 116e: 80 91 e4 00 lds r24, 0x00E4 - 1172: 90 91 e5 00 lds r25, 0x00E5 + 11de: 80 91 e4 00 lds r24, 0x00E4 + 11e2: 90 91 e5 00 lds r25, 0x00E5 #if !defined(CONTROL_ONLY_DEVICE) uint8_t Endpoint_WaitUntilReady(void) { #if (USB_STREAM_TIMEOUT_MS < 0xFF) uint8_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS; - 1176: 44 e6 ldi r20, 0x64 ; 100 + 11e6: 44 e6 ldi r20, 0x64 ; 100 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - 1178: 20 91 ec 00 lds r18, 0x00EC - 117c: 20 ff sbrs r18, 0 - 117e: 25 c0 rjmp .+74 ; 0x11ca + 11e8: 20 91 ec 00 lds r18, 0x00EC + 11ec: 20 ff sbrs r18, 0 + 11ee: 25 c0 rjmp .+74 ; 0x123a * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 1180: 20 91 e8 00 lds r18, 0x00E8 + 11f0: 20 91 e8 00 lds r18, 0x00E8 for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) { if (Endpoint_IsINReady()) - 1184: 20 fd sbrc r18, 0 - 1186: 15 c0 rjmp .+42 ; 0x11b2 + 11f4: 20 fd sbrc r18, 0 + 11f6: 15 c0 rjmp .+42 ; 0x1222 { if (Endpoint_IsOUTReceived()) return ENDPOINT_READYWAIT_NoError; } uint8_t USB_DeviceState_LCL = USB_DeviceState; - 1188: 2e b3 in r18, 0x1e ; 30 + 11f8: 2e b3 in r18, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 118a: 22 23 and r18, r18 - 118c: a1 f0 breq .+40 ; 0x11b6 + 11fa: 22 23 and r18, r18 + 11fc: a1 f0 breq .+40 ; 0x1226 return ENDPOINT_READYWAIT_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 118e: 25 30 cpi r18, 0x05 ; 5 - 1190: a1 f0 breq .+40 ; 0x11ba + 11fe: 25 30 cpi r18, 0x05 ; 5 + 1200: a1 f0 breq .+40 ; 0x122a * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. */ static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsStalled(void) { return ((UECONX & (1 << STALLRQ)) ? true : false); - 1192: 20 91 eb 00 lds r18, 0x00EB + 1202: 20 91 eb 00 lds r18, 0x00EB return ENDPOINT_READYWAIT_BusSuspended; else if (Endpoint_IsStalled()) - 1196: 25 fd sbrc r18, 5 - 1198: 12 c0 rjmp .+36 ; 0x11be - 119a: 20 91 e4 00 lds r18, 0x00E4 - 119e: 30 91 e5 00 lds r19, 0x00E5 + 1206: 25 fd sbrc r18, 5 + 1208: 12 c0 rjmp .+36 ; 0x122e + 120a: 20 91 e4 00 lds r18, 0x00E4 + 120e: 30 91 e5 00 lds r19, 0x00E5 return ENDPOINT_READYWAIT_EndpointStalled; uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber(); if (CurrentFrameNumber != PreviousFrameNumber) - 11a2: 28 17 cp r18, r24 - 11a4: 39 07 cpc r19, r25 - 11a6: 41 f3 breq .-48 ; 0x1178 + 1212: 28 17 cp r18, r24 + 1214: 39 07 cpc r19, r25 + 1216: 41 f3 breq .-48 ; 0x11e8 { PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) - 11a8: 44 23 and r20, r20 - 11aa: 59 f0 breq .+22 ; 0x11c2 - 11ac: 41 50 subi r20, 0x01 ; 1 - 11ae: c9 01 movw r24, r18 - 11b0: e3 cf rjmp .-58 ; 0x1178 + 1218: 44 23 and r20, r20 + 121a: 59 f0 breq .+22 ; 0x1232 + 121c: 41 50 subi r20, 0x01 ; 1 + 121e: c9 01 movw r24, r18 + 1220: e3 cf rjmp .-58 ; 0x11e8 for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) { if (Endpoint_IsINReady()) return ENDPOINT_READYWAIT_NoError; - 11b2: 80 e0 ldi r24, 0x00 ; 0 - 11b4: 08 95 ret + 1222: 80 e0 ldi r24, 0x00 ; 0 + 1224: 08 95 ret } uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_READYWAIT_DeviceDisconnected; - 11b6: 82 e0 ldi r24, 0x02 ; 2 - 11b8: 08 95 ret + 1226: 82 e0 ldi r24, 0x02 ; 2 + 1228: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_READYWAIT_BusSuspended; - 11ba: 83 e0 ldi r24, 0x03 ; 3 - 11bc: 08 95 ret + 122a: 83 e0 ldi r24, 0x03 ; 3 + 122c: 08 95 ret else if (Endpoint_IsStalled()) return ENDPOINT_READYWAIT_EndpointStalled; - 11be: 81 e0 ldi r24, 0x01 ; 1 - 11c0: 08 95 ret + 122e: 81 e0 ldi r24, 0x01 ; 1 + 1230: 08 95 ret if (CurrentFrameNumber != PreviousFrameNumber) { PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout; - 11c2: 84 e0 ldi r24, 0x04 ; 4 - 11c4: 08 95 ret + 1232: 84 e0 ldi r24, 0x04 ; 4 + 1234: 08 95 ret return ENDPOINT_READYWAIT_NoError; } else { if (Endpoint_IsOUTReceived()) return ENDPOINT_READYWAIT_NoError; - 11c6: 80 e0 ldi r24, 0x00 ; 0 + 1236: 80 e0 ldi r24, 0x00 ; 0 if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout; } } } - 11c8: 08 95 ret + 1238: 08 95 ret * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 11ca: 20 91 e8 00 lds r18, 0x00E8 + 123a: 20 91 e8 00 lds r18, 0x00E8 if (Endpoint_IsINReady()) return ENDPOINT_READYWAIT_NoError; } else { if (Endpoint_IsOUTReceived()) - 11ce: 22 ff sbrs r18, 2 - 11d0: db cf rjmp .-74 ; 0x1188 - 11d2: f9 cf rjmp .-14 ; 0x11c6 + 123e: 22 ff sbrs r18, 2 + 1240: db cf rjmp .-74 ; 0x11f8 + 1242: f9 cf rjmp .-14 ; 0x1236 -000011d4 : +00001244 : { #if defined(USB_CAN_BE_BOTH) bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0); #endif USB_INT_DisableAllInterrupts(); - 11d4: 40 d0 rcall .+128 ; 0x1256 + 1244: 40 d0 rcall .+128 ; 0x12c6 USB_INT_ClearAllInterrupts(); - 11d6: 42 d0 rcall .+132 ; 0x125c + 1246: 42 d0 rcall .+132 ; 0x12cc } static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE; static inline void USB_Controller_Reset(void) { USBCON &= ~(1 << USBE); - 11d8: 80 91 d8 00 lds r24, 0x00D8 - 11dc: 8f 77 andi r24, 0x7F ; 127 - 11de: 80 93 d8 00 sts 0x00D8, r24 + 1248: 80 91 d8 00 lds r24, 0x00D8 + 124c: 8f 77 andi r24, 0x7F ; 127 + 124e: 80 93 d8 00 sts 0x00D8, r24 USBCON |= (1 << USBE); - 11e2: 80 91 d8 00 lds r24, 0x00D8 - 11e6: 80 68 ori r24, 0x80 ; 128 - 11e8: 80 93 d8 00 sts 0x00D8, r24 + 1252: 80 91 d8 00 lds r24, 0x00D8 + 1256: 80 68 ori r24, 0x80 ; 128 + 1258: 80 93 d8 00 sts 0x00D8, r24 } static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Unfreeze(void) { USBCON &= ~(1 << FRZCLK); - 11ec: 80 91 d8 00 lds r24, 0x00D8 - 11f0: 8f 7d andi r24, 0xDF ; 223 - 11f2: 80 93 d8 00 sts 0x00D8, r24 + 125c: 80 91 d8 00 lds r24, 0x00D8 + 1260: 8f 7d andi r24, 0xDF ; 223 + 1262: 80 93 d8 00 sts 0x00D8, r24 /* Inline Functions: */ static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_On(void) { PLLCSR = USB_PLL_PSC; - 11f6: 84 e0 ldi r24, 0x04 ; 4 - 11f8: 89 bd out 0x29, r24 ; 41 + 1266: 84 e0 ldi r24, 0x04 ; 4 + 1268: 89 bd out 0x29, r24 ; 41 PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - 11fa: 86 e0 ldi r24, 0x06 ; 6 - 11fc: 89 bd out 0x29, r24 ; 41 + 126a: 86 e0 ldi r24, 0x06 ; 6 + 126c: 89 bd out 0x29, r24 ; 41 if (!(USB_Options & USB_OPT_MANUAL_PLL)) { #if defined(USB_SERIES_2_AVR) USB_PLL_On(); while (!(USB_PLL_IsReady())); - 11fe: 09 b4 in r0, 0x29 ; 41 - 1200: 00 fe sbrs r0, 0 - 1202: fd cf rjmp .-6 ; 0x11fe + 126e: 09 b4 in r0, 0x29 ; 41 + 1270: 00 fe sbrs r0, 0 + 1272: fd cf rjmp .-6 ; 0x126e } #if defined(USB_CAN_BE_DEVICE) static void USB_Init_Device(void) { USB_DeviceState = DEVICE_STATE_Unattached; - 1204: 1e ba out 0x1e, r1 ; 30 + 1274: 1e ba out 0x1e, r1 ; 30 USB_Device_ConfigurationNumber = 0; - 1206: 10 92 e4 02 sts 0x02E4, r1 + 1276: 10 92 c8 02 sts 0x02C8, r1 #if !defined(NO_DEVICE_REMOTE_WAKEUP) USB_Device_RemoteWakeupEnabled = false; - 120a: 10 92 e6 02 sts 0x02E6, r1 + 127a: 10 92 ca 02 sts 0x02CA, r1 #endif #if !defined(NO_DEVICE_SELF_POWER) USB_Device_CurrentlySelfPowered = false; - 120e: 10 92 e5 02 sts 0x02E5, r1 + 127e: 10 92 c9 02 sts 0x02C9, r1 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - 1212: 80 e0 ldi r24, 0x00 ; 0 - 1214: 60 e0 ldi r22, 0x00 ; 0 - 1216: 42 e0 ldi r20, 0x02 ; 2 - 1218: 10 df rcall .-480 ; 0x103a + 1282: 80 e0 ldi r24, 0x00 ; 0 + 1284: 60 e0 ldi r22, 0x00 ; 0 + 1286: 42 e0 ldi r20, 0x02 ; 2 + 1288: 10 df rcall .-480 ; 0x10aa #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); - 121a: 80 91 e1 00 lds r24, 0x00E1 - 121e: 8e 7f andi r24, 0xFE ; 254 - 1220: 80 93 e1 00 sts 0x00E1, r24 + 128a: 80 91 e1 00 lds r24, 0x00E1 + 128e: 8e 7f andi r24, 0xFE ; 254 + 1290: 80 93 e1 00 sts 0x00E1, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN |= (1 << SUSPE); - 1224: 80 91 e2 00 lds r24, 0x00E2 - 1228: 81 60 ori r24, 0x01 ; 1 - 122a: 80 93 e2 00 sts 0x00E2, r24 + 1294: 80 91 e2 00 lds r24, 0x00E2 + 1298: 81 60 ori r24, 0x01 ; 1 + 129a: 80 93 e2 00 sts 0x00E2, r24 break; case USB_INT_EORSTI: UDIEN |= (1 << EORSTE); - 122e: 80 91 e2 00 lds r24, 0x00E2 - 1232: 88 60 ori r24, 0x08 ; 8 - 1234: 80 93 e2 00 sts 0x00E2, r24 + 129e: 80 91 e2 00 lds r24, 0x00E2 + 12a2: 88 60 ori r24, 0x08 ; 8 + 12a4: 80 93 e2 00 sts 0x00E2, r24 * register and despite the datasheet making no mention of its requirement in host mode. */ static inline void USB_Attach(void) ATTR_ALWAYS_INLINE; static inline void USB_Attach(void) { UDCON &= ~(1 << DETACH); - 1238: 80 91 e0 00 lds r24, 0x00E0 - 123c: 8e 7f andi r24, 0xFE ; 254 - 123e: 80 93 e0 00 sts 0x00E0, r24 + 12a8: 80 91 e0 00 lds r24, 0x00E0 + 12ac: 8e 7f andi r24, 0xFE ; 254 + 12ae: 80 93 e0 00 sts 0x00E0, r24 } #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) USB_OTGPAD_On(); #endif } - 1242: 08 95 ret + 12b2: 08 95 ret -00001244 : +000012b4 : static inline void USB_REG_On(void) { #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) UHWCON |= (1 << UVREGE); #else REGCR &= ~(1 << REGDIS); - 1244: e3 e6 ldi r30, 0x63 ; 99 - 1246: f0 e0 ldi r31, 0x00 ; 0 - 1248: 80 81 ld r24, Z - 124a: 8e 7f andi r24, 0xFE ; 254 - 124c: 80 83 st Z, r24 + 12b4: e3 e6 ldi r30, 0x63 ; 99 + 12b6: f0 e0 ldi r31, 0x00 ; 0 + 12b8: 80 81 ld r24, Z + 12ba: 8e 7f andi r24, 0xFE ; 254 + 12bc: 80 83 st Z, r24 UHWCON &= ~(1 << UIDE); USB_CurrentMode = Mode; } #endif USB_IsInitialized = true; - 124e: 81 e0 ldi r24, 0x01 ; 1 - 1250: 80 93 e7 02 sts 0x02E7, r24 + 12be: 81 e0 ldi r24, 0x01 ; 1 + 12c0: 80 93 cb 02 sts 0x02CB, r24 USB_ResetInterface(); } - 1254: bf cf rjmp .-130 ; 0x11d4 + 12c4: bf cf rjmp .-130 ; 0x1244 -00001256 : +000012c6 : #if defined(USB_CAN_BE_HOST) UHIEN = 0; #endif #if defined(USB_CAN_BE_DEVICE) UDIEN = 0; - 1256: 10 92 e2 00 sts 0x00E2, r1 + 12c6: 10 92 e2 00 sts 0x00E2, r1 #endif } - 125a: 08 95 ret + 12ca: 08 95 ret -0000125c : +000012cc : #if defined(USB_CAN_BE_HOST) UHINT = 0; #endif #if defined(USB_CAN_BE_DEVICE) UDINT = 0; - 125c: 10 92 e1 00 sts 0x00E1, r1 + 12cc: 10 92 e1 00 sts 0x00E1, r1 #endif } - 1260: 08 95 ret + 12d0: 08 95 ret -00001262 <__vector_11>: +000012d2 <__vector_11>: ISR(USB_GEN_vect, ISR_BLOCK) { - 1262: 1f 92 push r1 - 1264: 0f 92 push r0 - 1266: 0f b6 in r0, 0x3f ; 63 - 1268: 0f 92 push r0 - 126a: 11 24 eor r1, r1 - 126c: 2f 93 push r18 - 126e: 3f 93 push r19 - 1270: 4f 93 push r20 - 1272: 5f 93 push r21 - 1274: 6f 93 push r22 - 1276: 7f 93 push r23 - 1278: 8f 93 push r24 - 127a: 9f 93 push r25 - 127c: af 93 push r26 - 127e: bf 93 push r27 - 1280: ef 93 push r30 - 1282: ff 93 push r31 + 12d2: 1f 92 push r1 + 12d4: 0f 92 push r0 + 12d6: 0f b6 in r0, 0x3f ; 63 + 12d8: 0f 92 push r0 + 12da: 11 24 eor r1, r1 + 12dc: 2f 93 push r18 + 12de: 3f 93 push r19 + 12e0: 4f 93 push r20 + 12e2: 5f 93 push r21 + 12e4: 6f 93 push r22 + 12e6: 7f 93 push r23 + 12e8: 8f 93 push r24 + 12ea: 9f 93 push r25 + 12ec: af 93 push r26 + 12ee: bf 93 push r27 + 12f0: ef 93 push r30 + 12f2: ff 93 push r31 case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); case USB_INT_EORSTI: return (UDINT & (1 << EORSTI)); case USB_INT_SOFI: return (UDINT & (1 << SOFI)); - 1284: 80 91 e1 00 lds r24, 0x00E1 + 12f4: 80 91 e1 00 lds r24, 0x00E1 #if defined(USB_CAN_BE_DEVICE) #if !defined(NO_SOF_EVENTS) if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI)) - 1288: 82 ff sbrs r24, 2 - 128a: 0a c0 rjmp .+20 ; 0x12a0 <__vector_11+0x3e> + 12f8: 82 ff sbrs r24, 2 + 12fa: 0a c0 rjmp .+20 ; 0x1310 <__vector_11+0x3e> case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); case USB_INT_EORSTI: return (UDIEN & (1 << EORSTE)); case USB_INT_SOFI: return (UDIEN & (1 << SOFE)); - 128c: 80 91 e2 00 lds r24, 0x00E2 - 1290: 82 ff sbrs r24, 2 - 1292: 06 c0 rjmp .+12 ; 0x12a0 <__vector_11+0x3e> + 12fc: 80 91 e2 00 lds r24, 0x00E2 + 1300: 82 ff sbrs r24, 2 + 1302: 06 c0 rjmp .+12 ; 0x1310 <__vector_11+0x3e> break; case USB_INT_EORSTI: UDINT &= ~(1 << EORSTI); break; case USB_INT_SOFI: UDINT &= ~(1 << SOFI); - 1294: 80 91 e1 00 lds r24, 0x00E1 - 1298: 8b 7f andi r24, 0xFB ; 251 - 129a: 80 93 e1 00 sts 0x00E1, r24 + 1304: 80 91 e1 00 lds r24, 0x00E1 + 1308: 8b 7f andi r24, 0xFB ; 251 + 130a: 80 93 e1 00 sts 0x00E1, r24 { USB_INT_Clear(USB_INT_SOFI); EVENT_USB_Device_StartOfFrame(); - 129e: 22 d2 rcall .+1092 ; 0x16e4 + 130e: 22 d2 rcall .+1092 ; 0x1754 #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); - 12a0: 80 91 e1 00 lds r24, 0x00E1 + 1310: 80 91 e1 00 lds r24, 0x00E1 EVENT_USB_Device_Disconnect(); } } #endif if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI)) - 12a4: 80 ff sbrs r24, 0 - 12a6: 16 c0 rjmp .+44 ; 0x12d4 <__vector_11+0x72> + 1314: 80 ff sbrs r24, 0 + 1316: 16 c0 rjmp .+44 ; 0x1344 <__vector_11+0x72> #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); - 12a8: 80 91 e2 00 lds r24, 0x00E2 - 12ac: 80 ff sbrs r24, 0 - 12ae: 12 c0 rjmp .+36 ; 0x12d4 <__vector_11+0x72> + 1318: 80 91 e2 00 lds r24, 0x00E2 + 131c: 80 ff sbrs r24, 0 + 131e: 12 c0 rjmp .+36 ; 0x1344 <__vector_11+0x72> #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN &= ~(1 << SUSPE); - 12b0: 80 91 e2 00 lds r24, 0x00E2 - 12b4: 8e 7f andi r24, 0xFE ; 254 - 12b6: 80 93 e2 00 sts 0x00E2, r24 + 1320: 80 91 e2 00 lds r24, 0x00E2 + 1324: 8e 7f andi r24, 0xFE ; 254 + 1326: 80 93 e2 00 sts 0x00E2, r24 USBCON |= (1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); - 12ba: 80 91 e2 00 lds r24, 0x00E2 - 12be: 80 61 ori r24, 0x10 ; 16 - 12c0: 80 93 e2 00 sts 0x00E2, r24 + 132a: 80 91 e2 00 lds r24, 0x00E2 + 132e: 80 61 ori r24, 0x10 ; 16 + 1330: 80 93 e2 00 sts 0x00E2, r24 #endif static inline void USB_CLK_Freeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Freeze(void) { USBCON |= (1 << FRZCLK); - 12c4: 80 91 d8 00 lds r24, 0x00D8 - 12c8: 80 62 ori r24, 0x20 ; 32 - 12ca: 80 93 d8 00 sts 0x00D8, r24 + 1334: 80 91 d8 00 lds r24, 0x00D8 + 1338: 80 62 ori r24, 0x20 ; 32 + 133a: 80 93 d8 00 sts 0x00D8, r24 } static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_Off(void) { PLLCSR = 0; - 12ce: 19 bc out 0x29, r1 ; 41 + 133e: 19 bc out 0x29, r1 ; 41 if (!(USB_Options & USB_OPT_MANUAL_PLL)) USB_PLL_Off(); #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) USB_DeviceState = DEVICE_STATE_Unattached; - 12d0: 1e ba out 0x1e, r1 ; 30 + 1340: 1e ba out 0x1e, r1 ; 30 EVENT_USB_Device_Disconnect(); - 12d2: df d9 rcall .-3138 ; 0x692 + 1342: a7 d9 rcall .-3250 ; 0x692 case USB_INT_IDTI: return (USBINT & (1 << IDTI)); #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); - 12d4: 80 91 e1 00 lds r24, 0x00E1 + 1344: 80 91 e1 00 lds r24, 0x00E1 USB_DeviceState = DEVICE_STATE_Suspended; EVENT_USB_Device_Suspend(); #endif } if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI)) - 12d8: 84 ff sbrs r24, 4 - 12da: 2c c0 rjmp .+88 ; 0x1334 <__vector_11+0xd2> + 1348: 84 ff sbrs r24, 4 + 134a: 2c c0 rjmp .+88 ; 0x13a4 <__vector_11+0xd2> case USB_INT_IDTI: return (USBCON & (1 << IDTE)); #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); - 12dc: 80 91 e2 00 lds r24, 0x00E2 - 12e0: 84 ff sbrs r24, 4 - 12e2: 28 c0 rjmp .+80 ; 0x1334 <__vector_11+0xd2> + 134c: 80 91 e2 00 lds r24, 0x00E2 + 1350: 84 ff sbrs r24, 4 + 1352: 28 c0 rjmp .+80 ; 0x13a4 <__vector_11+0xd2> /* Inline Functions: */ static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_On(void) { PLLCSR = USB_PLL_PSC; - 12e4: 84 e0 ldi r24, 0x04 ; 4 - 12e6: 89 bd out 0x29, r24 ; 41 + 1354: 84 e0 ldi r24, 0x04 ; 4 + 1356: 89 bd out 0x29, r24 ; 41 PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - 12e8: 86 e0 ldi r24, 0x06 ; 6 - 12ea: 89 bd out 0x29, r24 ; 41 + 1358: 86 e0 ldi r24, 0x06 ; 6 + 135a: 89 bd out 0x29, r24 ; 41 { if (!(USB_Options & USB_OPT_MANUAL_PLL)) { USB_PLL_On(); while (!(USB_PLL_IsReady())); - 12ec: 09 b4 in r0, 0x29 ; 41 - 12ee: 00 fe sbrs r0, 0 - 12f0: fd cf rjmp .-6 ; 0x12ec <__vector_11+0x8a> + 135c: 09 b4 in r0, 0x29 ; 41 + 135e: 00 fe sbrs r0, 0 + 1360: fd cf rjmp .-6 ; 0x135c <__vector_11+0x8a> } static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Unfreeze(void) { USBCON &= ~(1 << FRZCLK); - 12f2: 80 91 d8 00 lds r24, 0x00D8 - 12f6: 8f 7d andi r24, 0xDF ; 223 - 12f8: 80 93 d8 00 sts 0x00D8, r24 + 1362: 80 91 d8 00 lds r24, 0x00D8 + 1366: 8f 7d andi r24, 0xDF ; 223 + 1368: 80 93 d8 00 sts 0x00D8, r24 USBINT &= ~(1 << IDTI); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); - 12fc: 80 91 e1 00 lds r24, 0x00E1 - 1300: 8f 7e andi r24, 0xEF ; 239 - 1302: 80 93 e1 00 sts 0x00E1, r24 + 136c: 80 91 e1 00 lds r24, 0x00E1 + 1370: 8f 7e andi r24, 0xEF ; 239 + 1372: 80 93 e1 00 sts 0x00E1, r24 USBCON &= ~(1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); - 1306: 80 91 e2 00 lds r24, 0x00E2 - 130a: 8f 7e andi r24, 0xEF ; 239 - 130c: 80 93 e2 00 sts 0x00E2, r24 + 1376: 80 91 e2 00 lds r24, 0x00E2 + 137a: 8f 7e andi r24, 0xEF ; 239 + 137c: 80 93 e2 00 sts 0x00E2, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN |= (1 << SUSPE); - 1310: 80 91 e2 00 lds r24, 0x00E2 - 1314: 81 60 ori r24, 0x01 ; 1 - 1316: 80 93 e2 00 sts 0x00E2, r24 + 1380: 80 91 e2 00 lds r24, 0x00E2 + 1384: 81 60 ori r24, 0x01 ; 1 + 1386: 80 93 e2 00 sts 0x00E2, r24 USB_INT_Clear(USB_INT_WAKEUPI); USB_INT_Disable(USB_INT_WAKEUPI); USB_INT_Enable(USB_INT_SUSPI); if (USB_Device_ConfigurationNumber) - 131a: 80 91 e4 02 lds r24, 0x02E4 - 131e: 88 23 and r24, r24 - 1320: 21 f4 brne .+8 ; 0x132a <__vector_11+0xc8> + 138a: 80 91 c8 02 lds r24, 0x02C8 + 138e: 88 23 and r24, r24 + 1390: 21 f4 brne .+8 ; 0x139a <__vector_11+0xc8> } static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline bool USB_Device_IsAddressSet(void) { return (UDADDR & (1 << ADDEN)); - 1322: 80 91 e3 00 lds r24, 0x00E3 + 1392: 80 91 e3 00 lds r24, 0x00E3 USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - 1326: 87 ff sbrs r24, 7 - 1328: 02 c0 rjmp .+4 ; 0x132e <__vector_11+0xcc> - 132a: 84 e0 ldi r24, 0x04 ; 4 - 132c: 01 c0 rjmp .+2 ; 0x1330 <__vector_11+0xce> - 132e: 81 e0 ldi r24, 0x01 ; 1 - 1330: 8e bb out 0x1e, r24 ; 30 + 1396: 87 ff sbrs r24, 7 + 1398: 02 c0 rjmp .+4 ; 0x139e <__vector_11+0xcc> + 139a: 84 e0 ldi r24, 0x04 ; 4 + 139c: 01 c0 rjmp .+2 ; 0x13a0 <__vector_11+0xce> + 139e: 81 e0 ldi r24, 0x01 ; 1 + 13a0: 8e bb out 0x1e, r24 ; 30 #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) EVENT_USB_Device_Connect(); - 1332: ae d9 rcall .-3236 ; 0x690 + 13a2: 76 d9 rcall .-3348 ; 0x690 case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); case USB_INT_EORSTI: return (UDINT & (1 << EORSTI)); - 1334: 80 91 e1 00 lds r24, 0x00E1 + 13a4: 80 91 e1 00 lds r24, 0x00E1 #else EVENT_USB_Device_WakeUp(); #endif } if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI)) - 1338: 83 ff sbrs r24, 3 - 133a: 26 c0 rjmp .+76 ; 0x1388 <__vector_11+0x126> + 13a8: 83 ff sbrs r24, 3 + 13aa: 26 c0 rjmp .+76 ; 0x13f8 <__vector_11+0x126> case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); case USB_INT_EORSTI: return (UDIEN & (1 << EORSTE)); - 133c: 80 91 e2 00 lds r24, 0x00E2 - 1340: 83 ff sbrs r24, 3 - 1342: 22 c0 rjmp .+68 ; 0x1388 <__vector_11+0x126> + 13ac: 80 91 e2 00 lds r24, 0x00E2 + 13b0: 83 ff sbrs r24, 3 + 13b2: 22 c0 rjmp .+68 ; 0x13f8 <__vector_11+0x126> break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); break; case USB_INT_EORSTI: UDINT &= ~(1 << EORSTI); - 1344: 80 91 e1 00 lds r24, 0x00E1 - 1348: 87 7f andi r24, 0xF7 ; 247 - 134a: 80 93 e1 00 sts 0x00E1, r24 + 13b4: 80 91 e1 00 lds r24, 0x00E1 + 13b8: 87 7f andi r24, 0xF7 ; 247 + 13ba: 80 93 e1 00 sts 0x00E1, r24 { USB_INT_Clear(USB_INT_EORSTI); USB_DeviceState = DEVICE_STATE_Default; - 134e: 82 e0 ldi r24, 0x02 ; 2 - 1350: 8e bb out 0x1e, r24 ; 30 + 13be: 82 e0 ldi r24, 0x02 ; 2 + 13c0: 8e bb out 0x1e, r24 ; 30 USB_Device_ConfigurationNumber = 0; - 1352: 10 92 e4 02 sts 0x02E4, r1 + 13c2: 10 92 c8 02 sts 0x02C8, r1 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); - 1356: 80 91 e1 00 lds r24, 0x00E1 - 135a: 8e 7f andi r24, 0xFE ; 254 - 135c: 80 93 e1 00 sts 0x00E1, r24 + 13c6: 80 91 e1 00 lds r24, 0x00E1 + 13ca: 8e 7f andi r24, 0xFE ; 254 + 13cc: 80 93 e1 00 sts 0x00E1, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN &= ~(1 << SUSPE); - 1360: 80 91 e2 00 lds r24, 0x00E2 - 1364: 8e 7f andi r24, 0xFE ; 254 - 1366: 80 93 e2 00 sts 0x00E2, r24 + 13d0: 80 91 e2 00 lds r24, 0x00E2 + 13d4: 8e 7f andi r24, 0xFE ; 254 + 13d6: 80 93 e2 00 sts 0x00E2, r24 USBCON |= (1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); - 136a: 80 91 e2 00 lds r24, 0x00E2 - 136e: 80 61 ori r24, 0x10 ; 16 - 1370: 80 93 e2 00 sts 0x00E2, r24 + 13da: 80 91 e2 00 lds r24, 0x00E2 + 13de: 80 61 ori r24, 0x10 ; 16 + 13e0: 80 93 e2 00 sts 0x00E2, r24 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - 1374: 80 e0 ldi r24, 0x00 ; 0 - 1376: 60 e0 ldi r22, 0x00 ; 0 - 1378: 42 e0 ldi r20, 0x02 ; 2 - 137a: 5f de rcall .-834 ; 0x103a + 13e4: 80 e0 ldi r24, 0x00 ; 0 + 13e6: 60 e0 ldi r22, 0x00 ; 0 + 13e8: 42 e0 ldi r20, 0x02 ; 2 + 13ea: 5f de rcall .-834 ; 0x10aa break; case USB_INT_SOFI: UDIEN |= (1 << SOFE); break; case USB_INT_RXSTPI: UEIENX |= (1 << RXSTPE); - 137c: 80 91 f0 00 lds r24, 0x00F0 - 1380: 88 60 ori r24, 0x08 ; 8 - 1382: 80 93 f0 00 sts 0x00F0, r24 + 13ec: 80 91 f0 00 lds r24, 0x00F0 + 13f0: 88 60 ori r24, 0x08 ; 8 + 13f2: 80 93 f0 00 sts 0x00F0, r24 #if defined(INTERRUPT_CONTROL_ENDPOINT) USB_INT_Enable(USB_INT_RXSTPI); #endif EVENT_USB_Device_Reset(); - 1386: ae d1 rcall .+860 ; 0x16e4 + 13f6: ae d1 rcall .+860 ; 0x1754 USB_ResetInterface(); EVENT_USB_UIDChange(); } #endif } - 1388: ff 91 pop r31 - 138a: ef 91 pop r30 - 138c: bf 91 pop r27 - 138e: af 91 pop r26 - 1390: 9f 91 pop r25 - 1392: 8f 91 pop r24 - 1394: 7f 91 pop r23 - 1396: 6f 91 pop r22 - 1398: 5f 91 pop r21 - 139a: 4f 91 pop r20 - 139c: 3f 91 pop r19 - 139e: 2f 91 pop r18 - 13a0: 0f 90 pop r0 - 13a2: 0f be out 0x3f, r0 ; 63 - 13a4: 0f 90 pop r0 - 13a6: 1f 90 pop r1 - 13a8: 18 95 reti - -000013aa <__vector_12>: + 13f8: ff 91 pop r31 + 13fa: ef 91 pop r30 + 13fc: bf 91 pop r27 + 13fe: af 91 pop r26 + 1400: 9f 91 pop r25 + 1402: 8f 91 pop r24 + 1404: 7f 91 pop r23 + 1406: 6f 91 pop r22 + 1408: 5f 91 pop r21 + 140a: 4f 91 pop r20 + 140c: 3f 91 pop r19 + 140e: 2f 91 pop r18 + 1410: 0f 90 pop r0 + 1412: 0f be out 0x3f, r0 ; 63 + 1414: 0f 90 pop r0 + 1416: 1f 90 pop r1 + 1418: 18 95 reti + +0000141a <__vector_12>: #if defined(INTERRUPT_CONTROL_ENDPOINT) && defined(USB_CAN_BE_DEVICE) ISR(USB_COM_vect, ISR_BLOCK) { - 13aa: 1f 92 push r1 - 13ac: 0f 92 push r0 - 13ae: 0f b6 in r0, 0x3f ; 63 - 13b0: 0f 92 push r0 - 13b2: 11 24 eor r1, r1 - 13b4: 1f 93 push r17 - 13b6: 2f 93 push r18 - 13b8: 3f 93 push r19 - 13ba: 4f 93 push r20 - 13bc: 5f 93 push r21 - 13be: 6f 93 push r22 - 13c0: 7f 93 push r23 - 13c2: 8f 93 push r24 - 13c4: 9f 93 push r25 - 13c6: af 93 push r26 - 13c8: bf 93 push r27 - 13ca: ef 93 push r30 - 13cc: ff 93 push r31 + 141a: 1f 92 push r1 + 141c: 0f 92 push r0 + 141e: 0f b6 in r0, 0x3f ; 63 + 1420: 0f 92 push r0 + 1422: 11 24 eor r1, r1 + 1424: 1f 93 push r17 + 1426: 2f 93 push r18 + 1428: 3f 93 push r19 + 142a: 4f 93 push r20 + 142c: 5f 93 push r21 + 142e: 6f 93 push r22 + 1430: 7f 93 push r23 + 1432: 8f 93 push r24 + 1434: 9f 93 push r25 + 1436: af 93 push r26 + 1438: bf 93 push r27 + 143a: ef 93 push r30 + 143c: ff 93 push r31 */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 13ce: 10 91 e9 00 lds r17, 0x00E9 - 13d2: 1f 70 andi r17, 0x0F ; 15 + 143e: 10 91 e9 00 lds r17, 0x00E9 + 1442: 1f 70 andi r17, 0x0F ; 15 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - 13d4: 80 91 ec 00 lds r24, 0x00EC + 1444: 80 91 ec 00 lds r24, 0x00EC */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 13d8: 10 92 e9 00 sts 0x00E9, r1 + 1448: 10 92 e9 00 sts 0x00E9, r1 break; case USB_INT_SOFI: UDIEN &= ~(1 << SOFE); break; case USB_INT_RXSTPI: UEIENX &= ~(1 << RXSTPE); - 13dc: 80 91 f0 00 lds r24, 0x00F0 - 13e0: 87 7f andi r24, 0xF7 ; 247 - 13e2: 80 93 f0 00 sts 0x00F0, r24 + 144c: 80 91 f0 00 lds r24, 0x00F0 + 1450: 87 7f andi r24, 0xF7 ; 247 + 1452: 80 93 f0 00 sts 0x00F0, r24 static inline void GlobalInterruptEnable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) sei(); - 13e6: 78 94 sei + 1456: 78 94 sei Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); USB_INT_Disable(USB_INT_RXSTPI); GlobalInterruptEnable(); USB_Device_ProcessControlRequest(); - 13e8: 1b d0 rcall .+54 ; 0x1420 - 13ea: 10 92 e9 00 sts 0x00E9, r1 + 1458: 1b d0 rcall .+54 ; 0x1490 + 145a: 10 92 e9 00 sts 0x00E9, r1 break; case USB_INT_SOFI: UDIEN |= (1 << SOFE); break; case USB_INT_RXSTPI: UEIENX |= (1 << RXSTPE); - 13ee: 80 91 f0 00 lds r24, 0x00F0 - 13f2: 88 60 ori r24, 0x08 ; 8 - 13f4: 80 93 f0 00 sts 0x00F0, r24 - 13f8: 10 93 e9 00 sts 0x00E9, r17 + 145e: 80 91 f0 00 lds r24, 0x00F0 + 1462: 88 60 ori r24, 0x08 ; 8 + 1464: 80 93 f0 00 sts 0x00F0, r24 + 1468: 10 93 e9 00 sts 0x00E9, r17 Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); USB_INT_Enable(USB_INT_RXSTPI); Endpoint_SelectEndpoint(PrevSelectedEndpoint); } - 13fc: ff 91 pop r31 - 13fe: ef 91 pop r30 - 1400: bf 91 pop r27 - 1402: af 91 pop r26 - 1404: 9f 91 pop r25 - 1406: 8f 91 pop r24 - 1408: 7f 91 pop r23 - 140a: 6f 91 pop r22 - 140c: 5f 91 pop r21 - 140e: 4f 91 pop r20 - 1410: 3f 91 pop r19 - 1412: 2f 91 pop r18 - 1414: 1f 91 pop r17 - 1416: 0f 90 pop r0 - 1418: 0f be out 0x3f, r0 ; 63 - 141a: 0f 90 pop r0 - 141c: 1f 90 pop r1 - 141e: 18 95 reti - -00001420 : + 146c: ff 91 pop r31 + 146e: ef 91 pop r30 + 1470: bf 91 pop r27 + 1472: af 91 pop r26 + 1474: 9f 91 pop r25 + 1476: 8f 91 pop r24 + 1478: 7f 91 pop r23 + 147a: 6f 91 pop r22 + 147c: 5f 91 pop r21 + 147e: 4f 91 pop r20 + 1480: 3f 91 pop r19 + 1482: 2f 91 pop r18 + 1484: 1f 91 pop r17 + 1486: 0f 90 pop r0 + 1488: 0f be out 0x3f, r0 ; 63 + 148a: 0f 90 pop r0 + 148c: 1f 90 pop r1 + 148e: 18 95 reti + +00001490 : #if !defined(NO_DEVICE_REMOTE_WAKEUP) bool USB_Device_RemoteWakeupEnabled; #endif void USB_Device_ProcessControlRequest(void) { - 1420: 1f 93 push r17 - 1422: df 93 push r29 - 1424: cf 93 push r28 - 1426: cd b7 in r28, 0x3d ; 61 - 1428: de b7 in r29, 0x3e ; 62 - 142a: ac 97 sbiw r28, 0x2c ; 44 - 142c: 0f b6 in r0, 0x3f ; 63 - 142e: f8 94 cli - 1430: de bf out 0x3e, r29 ; 62 - 1432: 0f be out 0x3f, r0 ; 63 - 1434: cd bf out 0x3d, r28 ; 61 + 1490: 1f 93 push r17 + 1492: df 93 push r29 + 1494: cf 93 push r28 + 1496: cd b7 in r28, 0x3d ; 61 + 1498: de b7 in r29, 0x3e ; 62 + 149a: ac 97 sbiw r28, 0x2c ; 44 + 149c: 0f b6 in r0, 0x3f ; 63 + 149e: f8 94 cli + 14a0: de bf out 0x3e, r29 ; 62 + 14a2: 0f be out 0x3f, r0 ; 63 + 14a4: cd bf out 0x3d, r28 ; 61 USB_ControlRequest.bRequest = Endpoint_Read_8(); USB_ControlRequest.wValue = Endpoint_Read_16_LE(); USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); USB_ControlRequest.wLength = Endpoint_Read_16_LE(); #else uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; - 1436: e8 ee ldi r30, 0xE8 ; 232 - 1438: f2 e0 ldi r31, 0x02 ; 2 + 14a6: ec ec ldi r30, 0xCC ; 204 + 14a8: f2 e0 ldi r31, 0x02 ; 2 * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - 143a: 80 91 f1 00 lds r24, 0x00F1 + 14aa: 80 91 f1 00 lds r24, 0x00F1 for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) *(RequestHeader++) = Endpoint_Read_8(); - 143e: 81 93 st Z+, r24 + 14ae: 81 93 st Z+, r24 USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); USB_ControlRequest.wLength = Endpoint_Read_16_LE(); #else uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) - 1440: 22 e0 ldi r18, 0x02 ; 2 - 1442: e0 3f cpi r30, 0xF0 ; 240 - 1444: f2 07 cpc r31, r18 - 1446: c9 f7 brne .-14 ; 0x143a + 14b0: 22 e0 ldi r18, 0x02 ; 2 + 14b2: e4 3d cpi r30, 0xD4 ; 212 + 14b4: f2 07 cpc r31, r18 + 14b6: c9 f7 brne .-14 ; 0x14aa *(RequestHeader++) = Endpoint_Read_8(); #endif EVENT_USB_Device_ControlRequest(); - 1448: 29 d9 rcall .-3502 ; 0x69c + 14b8: f1 d8 rcall .-3614 ; 0x69c * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 144a: 80 91 e8 00 lds r24, 0x00E8 + 14ba: 80 91 e8 00 lds r24, 0x00E8 if (Endpoint_IsSETUPReceived()) - 144e: 83 ff sbrs r24, 3 - 1450: 31 c1 rjmp .+610 ; 0x16b4 + 14be: 83 ff sbrs r24, 3 + 14c0: 31 c1 rjmp .+610 ; 0x1724 { uint8_t bmRequestType = USB_ControlRequest.bmRequestType; - 1452: 80 91 e8 02 lds r24, 0x02E8 + 14c2: 80 91 cc 02 lds r24, 0x02CC switch (USB_ControlRequest.bRequest) - 1456: 20 91 e9 02 lds r18, 0x02E9 - 145a: 25 30 cpi r18, 0x05 ; 5 - 145c: 09 f4 brne .+2 ; 0x1460 - 145e: 84 c0 rjmp .+264 ; 0x1568 - 1460: 26 30 cpi r18, 0x06 ; 6 - 1462: 40 f4 brcc .+16 ; 0x1474 - 1464: 21 30 cpi r18, 0x01 ; 1 - 1466: a1 f1 breq .+104 ; 0x14d0 - 1468: 21 30 cpi r18, 0x01 ; 1 - 146a: 70 f0 brcs .+28 ; 0x1488 - 146c: 23 30 cpi r18, 0x03 ; 3 - 146e: 09 f0 breq .+2 ; 0x1472 - 1470: 21 c1 rjmp .+578 ; 0x16b4 - 1472: 2e c0 rjmp .+92 ; 0x14d0 - 1474: 28 30 cpi r18, 0x08 ; 8 - 1476: 09 f4 brne .+2 ; 0x147a - 1478: ef c0 rjmp .+478 ; 0x1658 - 147a: 29 30 cpi r18, 0x09 ; 9 - 147c: 09 f4 brne .+2 ; 0x1480 - 147e: fe c0 rjmp .+508 ; 0x167c - 1480: 26 30 cpi r18, 0x06 ; 6 - 1482: 09 f0 breq .+2 ; 0x1486 - 1484: 17 c1 rjmp .+558 ; 0x16b4 - 1486: 92 c0 rjmp .+292 ; 0x15ac + 14c6: 20 91 cd 02 lds r18, 0x02CD + 14ca: 25 30 cpi r18, 0x05 ; 5 + 14cc: 09 f4 brne .+2 ; 0x14d0 + 14ce: 84 c0 rjmp .+264 ; 0x15d8 + 14d0: 26 30 cpi r18, 0x06 ; 6 + 14d2: 40 f4 brcc .+16 ; 0x14e4 + 14d4: 21 30 cpi r18, 0x01 ; 1 + 14d6: a1 f1 breq .+104 ; 0x1540 + 14d8: 21 30 cpi r18, 0x01 ; 1 + 14da: 70 f0 brcs .+28 ; 0x14f8 + 14dc: 23 30 cpi r18, 0x03 ; 3 + 14de: 09 f0 breq .+2 ; 0x14e2 + 14e0: 21 c1 rjmp .+578 ; 0x1724 + 14e2: 2e c0 rjmp .+92 ; 0x1540 + 14e4: 28 30 cpi r18, 0x08 ; 8 + 14e6: 09 f4 brne .+2 ; 0x14ea + 14e8: ef c0 rjmp .+478 ; 0x16c8 + 14ea: 29 30 cpi r18, 0x09 ; 9 + 14ec: 09 f4 brne .+2 ; 0x14f0 + 14ee: fe c0 rjmp .+508 ; 0x16ec + 14f0: 26 30 cpi r18, 0x06 ; 6 + 14f2: 09 f0 breq .+2 ; 0x14f6 + 14f4: 17 c1 rjmp .+558 ; 0x1724 + 14f6: 92 c0 rjmp .+292 ; 0x161c { case REQ_GetStatus: if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - 1488: 80 38 cpi r24, 0x80 ; 128 - 148a: 21 f0 breq .+8 ; 0x1494 - 148c: 82 38 cpi r24, 0x82 ; 130 - 148e: 09 f0 breq .+2 ; 0x1492 - 1490: 11 c1 rjmp .+546 ; 0x16b4 - 1492: 08 c0 rjmp .+16 ; 0x14a4 + 14f8: 80 38 cpi r24, 0x80 ; 128 + 14fa: 21 f0 breq .+8 ; 0x1504 + 14fc: 82 38 cpi r24, 0x82 ; 130 + 14fe: 09 f0 breq .+2 ; 0x1502 + 1500: 11 c1 rjmp .+546 ; 0x1724 + 1502: 08 c0 rjmp .+16 ; 0x1514 Endpoint_ClearOUT(); } static void USB_Device_GetStatus(void) { uint8_t CurrentStatus = 0; - 1494: 80 91 e5 02 lds r24, 0x02E5 + 1504: 80 91 c9 02 lds r24, 0x02C9 if (USB_Device_CurrentlySelfPowered) CurrentStatus |= FEATURE_SELFPOWERED_ENABLED; #endif #if !defined(NO_DEVICE_REMOTE_WAKEUP) if (USB_Device_RemoteWakeupEnabled) - 1498: 90 91 e6 02 lds r25, 0x02E6 - 149c: 99 23 and r25, r25 - 149e: 71 f0 breq .+28 ; 0x14bc + 1508: 90 91 ca 02 lds r25, 0x02CA + 150c: 99 23 and r25, r25 + 150e: 71 f0 breq .+28 ; 0x152c CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED; - 14a0: 82 60 ori r24, 0x02 ; 2 - 14a2: 0c c0 rjmp .+24 ; 0x14bc + 1510: 82 60 ori r24, 0x02 ; 2 + 1512: 0c c0 rjmp .+24 ; 0x152c */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 14a4: 80 91 ec 02 lds r24, 0x02EC - 14a8: 8f 70 andi r24, 0x0F ; 15 - 14aa: 80 93 e9 00 sts 0x00E9, r24 + 1514: 80 91 d0 02 lds r24, 0x02D0 + 1518: 8f 70 andi r24, 0x0F ; 15 + 151a: 80 93 e9 00 sts 0x00E9, r24 * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. */ static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsStalled(void) { return ((UECONX & (1 << STALLRQ)) ? true : false); - 14ae: 90 91 eb 00 lds r25, 0x00EB + 151e: 90 91 eb 00 lds r25, 0x00EB break; case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT): #if !defined(CONTROL_ONLY_DEVICE) Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); CurrentStatus = Endpoint_IsStalled(); - 14b2: 81 e0 ldi r24, 0x01 ; 1 - 14b4: 95 ff sbrs r25, 5 - 14b6: 80 e0 ldi r24, 0x00 ; 0 + 1522: 81 e0 ldi r24, 0x01 ; 1 + 1524: 95 ff sbrs r25, 5 + 1526: 80 e0 ldi r24, 0x00 ; 0 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 14b8: 10 92 e9 00 sts 0x00E9, r1 + 1528: 10 92 e9 00 sts 0x00E9, r1 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 14bc: 90 91 e8 00 lds r25, 0x00E8 - 14c0: 97 7f andi r25, 0xF7 ; 247 - 14c2: 90 93 e8 00 sts 0x00E8, r25 + 152c: 90 91 e8 00 lds r25, 0x00E8 + 1530: 97 7f andi r25, 0xF7 ; 247 + 1532: 90 93 e8 00 sts 0x00E8, r25 * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_16_LE(const uint16_t Data) { UEDATX = (Data & 0xFF); - 14c6: 80 93 f1 00 sts 0x00F1, r24 + 1536: 80 93 f1 00 sts 0x00F1, r24 UEDATX = (Data >> 8); - 14ca: 10 92 f1 00 sts 0x00F1, r1 - 14ce: cf c0 rjmp .+414 ; 0x166e + 153a: 10 92 f1 00 sts 0x00F1, r1 + 153e: cf c0 rjmp .+414 ; 0x16de } break; case REQ_ClearFeature: case REQ_SetFeature: if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) || - 14d0: 88 23 and r24, r24 - 14d2: 19 f0 breq .+6 ; 0x14da - 14d4: 82 30 cpi r24, 0x02 ; 2 - 14d6: 09 f0 breq .+2 ; 0x14da - 14d8: ed c0 rjmp .+474 ; 0x16b4 + 1540: 88 23 and r24, r24 + 1542: 19 f0 breq .+6 ; 0x154a + 1544: 82 30 cpi r24, 0x02 ; 2 + 1546: 09 f0 breq .+2 ; 0x154a + 1548: ed c0 rjmp .+474 ; 0x1724 Endpoint_ClearStatusStage(); } static void USB_Device_ClearSetFeature(void) { switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT) - 14da: 90 e0 ldi r25, 0x00 ; 0 - 14dc: 8f 71 andi r24, 0x1F ; 31 - 14de: 90 70 andi r25, 0x00 ; 0 - 14e0: 00 97 sbiw r24, 0x00 ; 0 - 14e2: 29 f0 breq .+10 ; 0x14ee - 14e4: 82 30 cpi r24, 0x02 ; 2 - 14e6: 91 05 cpc r25, r1 - 14e8: 09 f0 breq .+2 ; 0x14ec - 14ea: e4 c0 rjmp .+456 ; 0x16b4 - 14ec: 0b c0 rjmp .+22 ; 0x1504 + 154a: 90 e0 ldi r25, 0x00 ; 0 + 154c: 8f 71 andi r24, 0x1F ; 31 + 154e: 90 70 andi r25, 0x00 ; 0 + 1550: 00 97 sbiw r24, 0x00 ; 0 + 1552: 29 f0 breq .+10 ; 0x155e + 1554: 82 30 cpi r24, 0x02 ; 2 + 1556: 91 05 cpc r25, r1 + 1558: 09 f0 breq .+2 ; 0x155c + 155a: e4 c0 rjmp .+456 ; 0x1724 + 155c: 0b c0 rjmp .+22 ; 0x1574 { #if !defined(NO_DEVICE_REMOTE_WAKEUP) case REQREC_DEVICE: if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup) - 14ee: 80 91 ea 02 lds r24, 0x02EA - 14f2: 81 30 cpi r24, 0x01 ; 1 - 14f4: 09 f0 breq .+2 ; 0x14f8 - 14f6: de c0 rjmp .+444 ; 0x16b4 + 155e: 80 91 ce 02 lds r24, 0x02CE + 1562: 81 30 cpi r24, 0x01 ; 1 + 1564: 09 f0 breq .+2 ; 0x1568 + 1566: de c0 rjmp .+444 ; 0x1724 USB_Device_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature); - 14f8: 23 30 cpi r18, 0x03 ; 3 - 14fa: 09 f0 breq .+2 ; 0x14fe - 14fc: 80 e0 ldi r24, 0x00 ; 0 - 14fe: 80 93 e6 02 sts 0x02E6, r24 - 1502: 2c c0 rjmp .+88 ; 0x155c + 1568: 23 30 cpi r18, 0x03 ; 3 + 156a: 09 f0 breq .+2 ; 0x156e + 156c: 80 e0 ldi r24, 0x00 ; 0 + 156e: 80 93 ca 02 sts 0x02CA, r24 + 1572: 2c c0 rjmp .+88 ; 0x15cc break; #endif #if !defined(CONTROL_ONLY_DEVICE) case REQREC_ENDPOINT: if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt) - 1504: 80 91 ea 02 lds r24, 0x02EA - 1508: 88 23 and r24, r24 - 150a: 41 f5 brne .+80 ; 0x155c + 1574: 80 91 ce 02 lds r24, 0x02CE + 1578: 88 23 and r24, r24 + 157a: 41 f5 brne .+80 ; 0x15cc { uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); - 150c: 20 91 ec 02 lds r18, 0x02EC - 1510: 2f 70 andi r18, 0x0F ; 15 + 157c: 20 91 d0 02 lds r18, 0x02D0 + 1580: 2f 70 andi r18, 0x0F ; 15 if (EndpointIndex == ENDPOINT_CONTROLEP) - 1512: 09 f4 brne .+2 ; 0x1516 - 1514: cf c0 rjmp .+414 ; 0x16b4 + 1582: 09 f4 brne .+2 ; 0x1586 + 1584: cf c0 rjmp .+414 ; 0x1724 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1516: 20 93 e9 00 sts 0x00E9, r18 + 1586: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the currently selected endpoint is enabled, \c false otherwise. */ static inline bool Endpoint_IsEnabled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsEnabled(void) { return ((UECONX & (1 << EPEN)) ? true : false); - 151a: 80 91 eb 00 lds r24, 0x00EB + 158a: 80 91 eb 00 lds r24, 0x00EB return; Endpoint_SelectEndpoint(EndpointIndex); if (Endpoint_IsEnabled()) - 151e: 80 ff sbrs r24, 0 - 1520: 1d c0 rjmp .+58 ; 0x155c + 158e: 80 ff sbrs r24, 0 + 1590: 1d c0 rjmp .+58 ; 0x15cc { if (USB_ControlRequest.bRequest == REQ_SetFeature) - 1522: 80 91 e9 02 lds r24, 0x02E9 - 1526: 83 30 cpi r24, 0x03 ; 3 - 1528: 21 f4 brne .+8 ; 0x1532 + 1592: 80 91 cd 02 lds r24, 0x02CD + 1596: 83 30 cpi r24, 0x03 ; 3 + 1598: 21 f4 brne .+8 ; 0x15a2 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_StallTransaction(void) { UECONX |= (1 << STALLRQ); - 152a: 80 91 eb 00 lds r24, 0x00EB - 152e: 80 62 ori r24, 0x20 ; 32 - 1530: 13 c0 rjmp .+38 ; 0x1558 + 159a: 80 91 eb 00 lds r24, 0x00EB + 159e: 80 62 ori r24, 0x20 ; 32 + 15a0: 13 c0 rjmp .+38 ; 0x15c8 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearStall(void) { UECONX |= (1 << STALLRQC); - 1532: 80 91 eb 00 lds r24, 0x00EB - 1536: 80 61 ori r24, 0x10 ; 16 - 1538: 80 93 eb 00 sts 0x00EB, r24 + 15a2: 80 91 eb 00 lds r24, 0x00EB + 15a6: 80 61 ori r24, 0x10 ; 16 + 15a8: 80 93 eb 00 sts 0x00EB, r24 * \param[in] Address Endpoint address whose FIFO buffers are to be reset. */ static inline void Endpoint_ResetEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_ResetEndpoint(const uint8_t Address) { UERST = (1 << (Address & ENDPOINT_EPNUM_MASK)); - 153c: 81 e0 ldi r24, 0x01 ; 1 - 153e: 90 e0 ldi r25, 0x00 ; 0 - 1540: 02 c0 rjmp .+4 ; 0x1546 - 1542: 88 0f add r24, r24 - 1544: 99 1f adc r25, r25 - 1546: 2a 95 dec r18 - 1548: e2 f7 brpl .-8 ; 0x1542 - 154a: 80 93 ea 00 sts 0x00EA, r24 + 15ac: 81 e0 ldi r24, 0x01 ; 1 + 15ae: 90 e0 ldi r25, 0x00 ; 0 + 15b0: 02 c0 rjmp .+4 ; 0x15b6 + 15b2: 88 0f add r24, r24 + 15b4: 99 1f adc r25, r25 + 15b6: 2a 95 dec r18 + 15b8: e2 f7 brpl .-8 ; 0x15b2 + 15ba: 80 93 ea 00 sts 0x00EA, r24 UERST = 0; - 154e: 10 92 ea 00 sts 0x00EA, r1 + 15be: 10 92 ea 00 sts 0x00EA, r1 /** Resets the data toggle of the currently selected endpoint. */ static inline void Endpoint_ResetDataToggle(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ResetDataToggle(void) { UECONX |= (1 << RSTDT); - 1552: 80 91 eb 00 lds r24, 0x00EB - 1556: 88 60 ori r24, 0x08 ; 8 - 1558: 80 93 eb 00 sts 0x00EB, r24 + 15c2: 80 91 eb 00 lds r24, 0x00EB + 15c6: 88 60 ori r24, 0x08 ; 8 + 15c8: 80 93 eb 00 sts 0x00EB, r24 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 155c: 10 92 e9 00 sts 0x00E9, r1 + 15cc: 10 92 e9 00 sts 0x00E9, r1 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 1560: 80 91 e8 00 lds r24, 0x00E8 - 1564: 87 7f andi r24, 0xF7 ; 247 - 1566: 86 c0 rjmp .+268 ; 0x1674 + 15d0: 80 91 e8 00 lds r24, 0x00E8 + 15d4: 87 7f andi r24, 0xF7 ; 247 + 15d6: 86 c0 rjmp .+268 ; 0x16e4 USB_Device_ClearSetFeature(); } break; case REQ_SetAddress: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - 1568: 88 23 and r24, r24 - 156a: 09 f0 breq .+2 ; 0x156e - 156c: a3 c0 rjmp .+326 ; 0x16b4 + 15d8: 88 23 and r24, r24 + 15da: 09 f0 breq .+2 ; 0x15de + 15dc: a3 c0 rjmp .+326 ; 0x1724 } } static void USB_Device_SetAddress(void) { uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F); - 156e: 10 91 ea 02 lds r17, 0x02EA - 1572: 1f 77 andi r17, 0x7F ; 127 + 15de: 10 91 ce 02 lds r17, 0x02CE + 15e2: 1f 77 andi r17, 0x7F ; 127 #endif static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void USB_Device_SetDeviceAddress(const uint8_t Address) { UDADDR = (UDADDR & (1 << ADDEN)) | (Address & 0x7F); - 1574: 80 91 e3 00 lds r24, 0x00E3 - 1578: 80 78 andi r24, 0x80 ; 128 - 157a: 81 2b or r24, r17 - 157c: 80 93 e3 00 sts 0x00E3, r24 - 1580: 80 91 e8 00 lds r24, 0x00E8 - 1584: 87 7f andi r24, 0xF7 ; 247 - 1586: 80 93 e8 00 sts 0x00E8, r24 + 15e4: 80 91 e3 00 lds r24, 0x00E3 + 15e8: 80 78 andi r24, 0x80 ; 128 + 15ea: 81 2b or r24, r17 + 15ec: 80 93 e3 00 sts 0x00E3, r24 + 15f0: 80 91 e8 00 lds r24, 0x00E8 + 15f4: 87 7f andi r24, 0xF7 ; 247 + 15f6: 80 93 e8 00 sts 0x00E8, r24 USB_Device_SetDeviceAddress(DeviceAddress); Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 158a: d2 dd rcall .-1116 ; 0x1130 + 15fa: d2 dd rcall .-1116 ; 0x11a0 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 158c: 80 91 e8 00 lds r24, 0x00E8 + 15fc: 80 91 e8 00 lds r24, 0x00E8 while (!(Endpoint_IsINReady())); - 1590: 80 ff sbrs r24, 0 - 1592: fc cf rjmp .-8 ; 0x158c + 1600: 80 ff sbrs r24, 0 + 1602: fc cf rjmp .-8 ; 0x15fc static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) { (void)Address; UDADDR |= (1 << ADDEN); - 1594: 80 91 e3 00 lds r24, 0x00E3 - 1598: 80 68 ori r24, 0x80 ; 128 - 159a: 80 93 e3 00 sts 0x00E3, r24 + 1604: 80 91 e3 00 lds r24, 0x00E3 + 1608: 80 68 ori r24, 0x80 ; 128 + 160a: 80 93 e3 00 sts 0x00E3, r24 USB_Device_EnableDeviceAddress(DeviceAddress); USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default; - 159e: 11 23 and r17, r17 - 15a0: 11 f0 breq .+4 ; 0x15a6 - 15a2: 83 e0 ldi r24, 0x03 ; 3 - 15a4: 01 c0 rjmp .+2 ; 0x15a8 - 15a6: 82 e0 ldi r24, 0x02 ; 2 - 15a8: 8e bb out 0x1e, r24 ; 30 - 15aa: 84 c0 rjmp .+264 ; 0x16b4 + 160e: 11 23 and r17, r17 + 1610: 11 f0 breq .+4 ; 0x1616 + 1612: 83 e0 ldi r24, 0x03 ; 3 + 1614: 01 c0 rjmp .+2 ; 0x1618 + 1616: 82 e0 ldi r24, 0x02 ; 2 + 1618: 8e bb out 0x1e, r24 ; 30 + 161a: 84 c0 rjmp .+264 ; 0x1724 if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) USB_Device_SetAddress(); break; case REQ_GetDescriptor: if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - 15ac: 80 58 subi r24, 0x80 ; 128 - 15ae: 82 30 cpi r24, 0x02 ; 2 - 15b0: 08 f0 brcs .+2 ; 0x15b4 - 15b2: 80 c0 rjmp .+256 ; 0x16b4 + 161c: 80 58 subi r24, 0x80 ; 128 + 161e: 82 30 cpi r24, 0x02 ; 2 + 1620: 08 f0 brcs .+2 ; 0x1624 + 1622: 80 c0 rjmp .+256 ; 0x1724 !(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS)) uint8_t DescriptorAddressSpace; #endif #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR) if (USB_ControlRequest.wValue == ((DTYPE_String << 8) | USE_INTERNAL_SERIAL)) - 15b4: 80 91 ea 02 lds r24, 0x02EA - 15b8: 90 91 eb 02 lds r25, 0x02EB - 15bc: 23 e0 ldi r18, 0x03 ; 3 - 15be: 8c 3d cpi r24, 0xDC ; 220 - 15c0: 92 07 cpc r25, r18 - 15c2: 91 f5 brne .+100 ; 0x1628 + 1624: 80 91 ce 02 lds r24, 0x02CE + 1628: 90 91 cf 02 lds r25, 0x02CF + 162c: 23 e0 ldi r18, 0x03 ; 3 + 162e: 8c 3d cpi r24, 0xDC ; 220 + 1630: 92 07 cpc r25, r18 + 1632: 91 f5 brne .+100 ; 0x1698 { USB_Descriptor_Header_t Header; uint16_t UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4]; } SignatureDescriptor; SignatureDescriptor.Header.Type = DTYPE_String; - 15c4: 83 e0 ldi r24, 0x03 ; 3 - 15c6: 8c 83 std Y+4, r24 ; 0x04 + 1634: 83 e0 ldi r24, 0x03 ; 3 + 1636: 8c 83 std Y+4, r24 ; 0x04 SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4); - 15c8: 8a e2 ldi r24, 0x2A ; 42 - 15ca: 8b 83 std Y+3, r24 ; 0x03 + 1638: 8a e2 ldi r24, 0x2A ; 42 + 163a: 8b 83 std Y+3, r24 ; 0x03 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 15cc: 5f b7 in r21, 0x3f ; 63 + 163c: 5f b7 in r21, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 15ce: f8 94 cli + 163e: f8 94 cli __builtin_ssrf(AVR32_SR_GM_OFFSET); #elif (ARCH == ARCH_XMEGA) cli(); #endif GCC_MEMORY_BARRIER(); - 15d0: de 01 movw r26, r28 - 15d2: 15 96 adiw r26, 0x05 ; 5 - 15d4: 80 e0 ldi r24, 0x00 ; 0 - 15d6: 90 e0 ldi r25, 0x00 ; 0 + 1640: de 01 movw r26, r28 + 1642: 15 96 adiw r26, 0x05 ; 5 + 1644: 80 e0 ldi r24, 0x00 ; 0 + 1646: 90 e0 ldi r25, 0x00 ; 0 static inline void USB_Device_GetSerialString(uint16_t* const UnicodeString) { uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS; - 15d8: 4e e0 ldi r20, 0x0E ; 14 + 1648: 4e e0 ldi r20, 0x0E ; 14 for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) { uint8_t SerialByte = boot_signature_byte_get(SigReadAddress); - 15da: 61 e2 ldi r22, 0x21 ; 33 - 15dc: e4 2f mov r30, r20 - 15de: f0 e0 ldi r31, 0x00 ; 0 - 15e0: 60 93 57 00 sts 0x0057, r22 - 15e4: e4 91 lpm r30, Z+ + 164a: 61 e2 ldi r22, 0x21 ; 33 + 164c: e4 2f mov r30, r20 + 164e: f0 e0 ldi r31, 0x00 ; 0 + 1650: 60 93 57 00 sts 0x0057, r22 + 1654: e4 91 lpm r30, Z+ if (SerialCharNum & 0x01) - 15e6: 80 ff sbrs r24, 0 - 15e8: 03 c0 rjmp .+6 ; 0x15f0 + 1656: 80 ff sbrs r24, 0 + 1658: 03 c0 rjmp .+6 ; 0x1660 { SerialByte >>= 4; - 15ea: e2 95 swap r30 - 15ec: ef 70 andi r30, 0x0F ; 15 + 165a: e2 95 swap r30 + 165c: ef 70 andi r30, 0x0F ; 15 SigReadAddress++; - 15ee: 4f 5f subi r20, 0xFF ; 255 + 165e: 4f 5f subi r20, 0xFF ; 255 } SerialByte &= 0x0F; - 15f0: ef 70 andi r30, 0x0F ; 15 - 15f2: 2e 2f mov r18, r30 - 15f4: 30 e0 ldi r19, 0x00 ; 0 + 1660: ef 70 andi r30, 0x0F ; 15 + 1662: 2e 2f mov r18, r30 + 1664: 30 e0 ldi r19, 0x00 ; 0 UnicodeString[SerialCharNum] = cpu_to_le16((SerialByte >= 10) ? - 15f6: ea 30 cpi r30, 0x0A ; 10 - 15f8: 18 f0 brcs .+6 ; 0x1600 - 15fa: 29 5c subi r18, 0xC9 ; 201 - 15fc: 3f 4f sbci r19, 0xFF ; 255 - 15fe: 02 c0 rjmp .+4 ; 0x1604 - 1600: 20 5d subi r18, 0xD0 ; 208 - 1602: 3f 4f sbci r19, 0xFF ; 255 - 1604: 2d 93 st X+, r18 - 1606: 3d 93 st X+, r19 - 1608: 01 96 adiw r24, 0x01 ; 1 + 1666: ea 30 cpi r30, 0x0A ; 10 + 1668: 18 f0 brcs .+6 ; 0x1670 + 166a: 29 5c subi r18, 0xC9 ; 201 + 166c: 3f 4f sbci r19, 0xFF ; 255 + 166e: 02 c0 rjmp .+4 ; 0x1674 + 1670: 20 5d subi r18, 0xD0 ; 208 + 1672: 3f 4f sbci r19, 0xFF ; 255 + 1674: 2d 93 st X+, r18 + 1676: 3d 93 st X+, r19 + 1678: 01 96 adiw r24, 0x01 ; 1 uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS; for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) - 160a: 84 31 cpi r24, 0x14 ; 20 - 160c: 91 05 cpc r25, r1 - 160e: 31 f7 brne .-52 ; 0x15dc + 167a: 84 31 cpi r24, 0x14 ; 20 + 167c: 91 05 cpc r25, r1 + 167e: 31 f7 brne .-52 ; 0x164c static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 1610: 5f bf out 0x3f, r21 ; 63 + 1680: 5f bf out 0x3f, r21 ; 63 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 1612: 80 91 e8 00 lds r24, 0x00E8 - 1616: 87 7f andi r24, 0xF7 ; 247 - 1618: 80 93 e8 00 sts 0x00E8, r24 + 1682: 80 91 e8 00 lds r24, 0x00E8 + 1686: 87 7f andi r24, 0xF7 ; 247 + 1688: 80 93 e8 00 sts 0x00E8, r24 USB_Device_GetSerialString(SignatureDescriptor.UnicodeString); Endpoint_ClearSETUP(); Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor)); - 161c: ce 01 movw r24, r28 - 161e: 03 96 adiw r24, 0x03 ; 3 - 1620: 6a e2 ldi r22, 0x2A ; 42 - 1622: 70 e0 ldi r23, 0x00 ; 0 - 1624: 55 dc rcall .-1878 ; 0xed0 - 1626: 12 c0 rjmp .+36 ; 0x164c + 168c: ce 01 movw r24, r28 + 168e: 03 96 adiw r24, 0x03 ; 3 + 1690: 6a e2 ldi r22, 0x2A ; 42 + 1692: 70 e0 ldi r23, 0x00 ; 0 + 1694: 55 dc rcall .-1878 ; 0xf40 + 1696: 12 c0 rjmp .+36 ; 0x16bc USB_Device_GetInternalSerialDescriptor(); return; } #endif if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex, - 1628: 60 91 ec 02 lds r22, 0x02EC - 162c: ae 01 movw r20, r28 - 162e: 4f 5f subi r20, 0xFF ; 255 - 1630: 5f 4f sbci r21, 0xFF ; 255 - 1632: 21 dc rcall .-1982 ; 0xe76 - 1634: bc 01 movw r22, r24 - 1636: 00 97 sbiw r24, 0x00 ; 0 - 1638: 09 f4 brne .+2 ; 0x163c - 163a: 3c c0 rjmp .+120 ; 0x16b4 - 163c: 80 91 e8 00 lds r24, 0x00E8 - 1640: 87 7f andi r24, 0xF7 ; 247 - 1642: 80 93 e8 00 sts 0x00E8, r24 + 1698: 60 91 d0 02 lds r22, 0x02D0 + 169c: ae 01 movw r20, r28 + 169e: 4f 5f subi r20, 0xFF ; 255 + 16a0: 5f 4f sbci r21, 0xFF ; 255 + 16a2: 21 dc rcall .-1982 ; 0xee6 + 16a4: bc 01 movw r22, r24 + 16a6: 00 97 sbiw r24, 0x00 ; 0 + 16a8: 09 f4 brne .+2 ; 0x16ac + 16aa: 3c c0 rjmp .+120 ; 0x1724 + 16ac: 80 91 e8 00 lds r24, 0x00E8 + 16b0: 87 7f andi r24, 0xF7 ; 247 + 16b2: 80 93 e8 00 sts 0x00E8, r24 #if defined(USE_RAM_DESCRIPTORS) || !defined(ARCH_HAS_MULTI_ADDRESS_SPACE) Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize); #elif defined(USE_EEPROM_DESCRIPTORS) Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize); #elif defined(USE_FLASH_DESCRIPTORS) Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize); - 1646: 89 81 ldd r24, Y+1 ; 0x01 - 1648: 9a 81 ldd r25, Y+2 ; 0x02 - 164a: 9c dc rcall .-1736 ; 0xf84 + 16b6: 89 81 ldd r24, Y+1 ; 0x01 + 16b8: 9a 81 ldd r25, Y+2 ; 0x02 + 16ba: 9c dc rcall .-1736 ; 0xff4 */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 164c: 80 91 e8 00 lds r24, 0x00E8 - 1650: 8b 77 andi r24, 0x7B ; 123 - 1652: 80 93 e8 00 sts 0x00E8, r24 - 1656: 2e c0 rjmp .+92 ; 0x16b4 + 16bc: 80 91 e8 00 lds r24, 0x00E8 + 16c0: 8b 77 andi r24, 0x7B ; 123 + 16c2: 80 93 e8 00 sts 0x00E8, r24 + 16c6: 2e c0 rjmp .+92 ; 0x1724 USB_Device_GetDescriptor(); } break; case REQ_GetConfiguration: if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) - 1658: 80 38 cpi r24, 0x80 ; 128 - 165a: 61 f5 brne .+88 ; 0x16b4 + 16c8: 80 38 cpi r24, 0x80 ; 128 + 16ca: 61 f5 brne .+88 ; 0x1724 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 165c: 80 91 e8 00 lds r24, 0x00E8 - 1660: 87 7f andi r24, 0xF7 ; 247 - 1662: 80 93 e8 00 sts 0x00E8, r24 + 16cc: 80 91 e8 00 lds r24, 0x00E8 + 16d0: 87 7f andi r24, 0xF7 ; 247 + 16d2: 80 93 e8 00 sts 0x00E8, r24 static void USB_Device_GetConfiguration(void) { Endpoint_ClearSETUP(); Endpoint_Write_8(USB_Device_ConfigurationNumber); - 1666: 80 91 e4 02 lds r24, 0x02E4 + 16d6: 80 91 c8 02 lds r24, 0x02C8 * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 166a: 80 93 f1 00 sts 0x00F1, r24 + 16da: 80 93 f1 00 sts 0x00F1, r24 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 166e: 80 91 e8 00 lds r24, 0x00E8 - 1672: 8e 77 andi r24, 0x7E ; 126 - 1674: 80 93 e8 00 sts 0x00E8, r24 + 16de: 80 91 e8 00 lds r24, 0x00E8 + 16e2: 8e 77 andi r24, 0x7E ; 126 + 16e4: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearIN(); Endpoint_ClearStatusStage(); - 1678: 5b dd rcall .-1354 ; 0x1130 - 167a: 1c c0 rjmp .+56 ; 0x16b4 + 16e8: 5b dd rcall .-1354 ; 0x11a0 + 16ea: 1c c0 rjmp .+56 ; 0x1724 if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) USB_Device_GetConfiguration(); break; case REQ_SetConfiguration: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - 167c: 88 23 and r24, r24 - 167e: d1 f4 brne .+52 ; 0x16b4 + 16ec: 88 23 and r24, r24 + 16ee: d1 f4 brne .+52 ; 0x1724 } static void USB_Device_SetConfiguration(void) { #if defined(FIXED_NUM_CONFIGURATIONS) if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS) - 1680: 90 91 ea 02 lds r25, 0x02EA - 1684: 92 30 cpi r25, 0x02 ; 2 - 1686: b0 f4 brcc .+44 ; 0x16b4 + 16f0: 90 91 ce 02 lds r25, 0x02CE + 16f4: 92 30 cpi r25, 0x02 ; 2 + 16f6: b0 f4 brcc .+44 ; 0x1724 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 1688: 80 91 e8 00 lds r24, 0x00E8 - 168c: 87 7f andi r24, 0xF7 ; 247 - 168e: 80 93 e8 00 sts 0x00E8, r24 + 16f8: 80 91 e8 00 lds r24, 0x00E8 + 16fc: 87 7f andi r24, 0xF7 ; 247 + 16fe: 80 93 e8 00 sts 0x00E8, r24 #endif #endif Endpoint_ClearSETUP(); USB_Device_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue; - 1692: 90 93 e4 02 sts 0x02E4, r25 + 1702: 90 93 c8 02 sts 0x02C8, r25 Endpoint_ClearStatusStage(); - 1696: 4c dd rcall .-1384 ; 0x1130 + 1706: 4c dd rcall .-1384 ; 0x11a0 if (USB_Device_ConfigurationNumber) - 1698: 80 91 e4 02 lds r24, 0x02E4 - 169c: 88 23 and r24, r24 - 169e: 21 f4 brne .+8 ; 0x16a8 + 1708: 80 91 c8 02 lds r24, 0x02C8 + 170c: 88 23 and r24, r24 + 170e: 21 f4 brne .+8 ; 0x1718 } static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline bool USB_Device_IsAddressSet(void) { return (UDADDR & (1 << ADDEN)); - 16a0: 80 91 e3 00 lds r24, 0x00E3 + 1710: 80 91 e3 00 lds r24, 0x00E3 USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - 16a4: 87 ff sbrs r24, 7 - 16a6: 02 c0 rjmp .+4 ; 0x16ac - 16a8: 84 e0 ldi r24, 0x04 ; 4 - 16aa: 01 c0 rjmp .+2 ; 0x16ae - 16ac: 81 e0 ldi r24, 0x01 ; 1 - 16ae: 8e bb out 0x1e, r24 ; 30 + 1714: 87 ff sbrs r24, 7 + 1716: 02 c0 rjmp .+4 ; 0x171c + 1718: 84 e0 ldi r24, 0x04 ; 4 + 171a: 01 c0 rjmp .+2 ; 0x171e + 171c: 81 e0 ldi r24, 0x01 ; 1 + 171e: 8e bb out 0x1e, r24 ; 30 EVENT_USB_Device_ConfigurationChanged(); - 16b0: 0e 94 4a 03 call 0x694 ; 0x694 + 1720: 0e 94 4a 03 call 0x694 ; 0x694 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 16b4: 80 91 e8 00 lds r24, 0x00E8 + 1724: 80 91 e8 00 lds r24, 0x00E8 default: break; } } if (Endpoint_IsSETUPReceived()) - 16b8: 83 ff sbrs r24, 3 - 16ba: 0a c0 rjmp .+20 ; 0x16d0 + 1728: 83 ff sbrs r24, 3 + 172a: 0a c0 rjmp .+20 ; 0x1740 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 16bc: 80 91 e8 00 lds r24, 0x00E8 - 16c0: 87 7f andi r24, 0xF7 ; 247 - 16c2: 80 93 e8 00 sts 0x00E8, r24 + 172c: 80 91 e8 00 lds r24, 0x00E8 + 1730: 87 7f andi r24, 0xF7 ; 247 + 1732: 80 93 e8 00 sts 0x00E8, r24 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_StallTransaction(void) { UECONX |= (1 << STALLRQ); - 16c6: 80 91 eb 00 lds r24, 0x00EB - 16ca: 80 62 ori r24, 0x20 ; 32 - 16cc: 80 93 eb 00 sts 0x00EB, r24 + 1736: 80 91 eb 00 lds r24, 0x00EB + 173a: 80 62 ori r24, 0x20 ; 32 + 173c: 80 93 eb 00 sts 0x00EB, r24 { Endpoint_ClearSETUP(); Endpoint_StallTransaction(); } } - 16d0: ac 96 adiw r28, 0x2c ; 44 - 16d2: 0f b6 in r0, 0x3f ; 63 - 16d4: f8 94 cli - 16d6: de bf out 0x3e, r29 ; 62 - 16d8: 0f be out 0x3f, r0 ; 63 - 16da: cd bf out 0x3d, r28 ; 61 - 16dc: cf 91 pop r28 - 16de: df 91 pop r29 - 16e0: 1f 91 pop r17 - 16e2: 08 95 ret - -000016e4 : + 1740: ac 96 adiw r28, 0x2c ; 44 + 1742: 0f b6 in r0, 0x3f ; 63 + 1744: f8 94 cli + 1746: de bf out 0x3e, r29 ; 62 + 1748: 0f be out 0x3f, r0 ; 63 + 174a: cd bf out 0x3d, r28 ; 61 + 174c: cf 91 pop r28 + 174e: df 91 pop r29 + 1750: 1f 91 pop r17 + 1752: 08 95 ret + +00001754 : #include "Events.h" void USB_Event_Stub(void) { } - 16e4: 08 95 ret + 1754: 08 95 ret -000016e6 : +00001756 : #if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR) volatile uint8_t USB_DeviceState; #endif void USB_USBTask(void) { - 16e6: 1f 93 push r17 + 1756: 1f 93 push r17 } #if defined(USB_CAN_BE_DEVICE) static void USB_DeviceTask(void) { if (USB_DeviceState == DEVICE_STATE_Unattached) - 16e8: 8e b3 in r24, 0x1e ; 30 - 16ea: 88 23 and r24, r24 - 16ec: a9 f0 breq .+42 ; 0x1718 + 1758: 8e b3 in r24, 0x1e ; 30 + 175a: 88 23 and r24, r24 + 175c: a9 f0 breq .+42 ; 0x1788 */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 16ee: 80 91 e9 00 lds r24, 0x00E9 - 16f2: 8f 70 andi r24, 0x0F ; 15 + 175e: 80 91 e9 00 lds r24, 0x00E9 + 1762: 8f 70 andi r24, 0x0F ; 15 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - 16f4: 90 91 ec 00 lds r25, 0x00EC - 16f8: 90 ff sbrs r25, 0 - 16fa: 02 c0 rjmp .+4 ; 0x1700 - 16fc: 10 e8 ldi r17, 0x80 ; 128 - 16fe: 01 c0 rjmp .+2 ; 0x1702 - 1700: 10 e0 ldi r17, 0x00 ; 0 + 1764: 90 91 ec 00 lds r25, 0x00EC + 1768: 90 ff sbrs r25, 0 + 176a: 02 c0 rjmp .+4 ; 0x1770 + 176c: 10 e8 ldi r17, 0x80 ; 128 + 176e: 01 c0 rjmp .+2 ; 0x1772 + 1770: 10 e0 ldi r17, 0x00 ; 0 */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 1702: 18 2b or r17, r24 + 1772: 18 2b or r17, r24 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1704: 10 92 e9 00 sts 0x00E9, r1 + 1774: 10 92 e9 00 sts 0x00E9, r1 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 1708: 80 91 e8 00 lds r24, 0x00E8 + 1778: 80 91 e8 00 lds r24, 0x00E8 uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); if (Endpoint_IsSETUPReceived()) - 170c: 83 ff sbrs r24, 3 - 170e: 01 c0 rjmp .+2 ; 0x1712 + 177c: 83 ff sbrs r24, 3 + 177e: 01 c0 rjmp .+2 ; 0x1782 USB_Device_ProcessControlRequest(); - 1710: 87 de rcall .-754 ; 0x1420 + 1780: 87 de rcall .-754 ; 0x1490 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1712: 1f 70 andi r17, 0x0F ; 15 - 1714: 10 93 e9 00 sts 0x00E9, r17 + 1782: 1f 70 andi r17, 0x0F ; 15 + 1784: 10 93 e9 00 sts 0x00E9, r17 #elif defined(USB_CAN_BE_HOST) USB_HostTask(); #elif defined(USB_CAN_BE_DEVICE) USB_DeviceTask(); #endif } - 1718: 1f 91 pop r17 - 171a: 08 95 ret + 1788: 1f 91 pop r17 + 178a: 08 95 ret -0000171c : +0000178c : #define __INCLUDE_FROM_CDC_DRIVER #define __INCLUDE_FROM_CDC_DEVICE_C #include "CDCClassDevice.h" void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 171c: cf 93 push r28 - 171e: df 93 push r29 - 1720: ec 01 movw r28, r24 + 178c: cf 93 push r28 + 178e: df 93 push r29 + 1790: ec 01 movw r28, r24 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 1722: 80 91 e8 00 lds r24, 0x00E8 + 1792: 80 91 e8 00 lds r24, 0x00E8 if (!(Endpoint_IsSETUPReceived())) - 1726: 83 ff sbrs r24, 3 - 1728: a3 c0 rjmp .+326 ; 0x1870 + 1796: 83 ff sbrs r24, 3 + 1798: a3 c0 rjmp .+326 ; 0x18e0 return; if (USB_ControlRequest.wIndex != CDCInterfaceInfo->Config.ControlInterfaceNumber) - 172a: 88 81 ld r24, Y - 172c: 90 e0 ldi r25, 0x00 ; 0 - 172e: 20 91 ec 02 lds r18, 0x02EC - 1732: 30 91 ed 02 lds r19, 0x02ED - 1736: 28 17 cp r18, r24 - 1738: 39 07 cpc r19, r25 - 173a: 09 f0 breq .+2 ; 0x173e - 173c: 99 c0 rjmp .+306 ; 0x1870 + 179a: 88 81 ld r24, Y + 179c: 90 e0 ldi r25, 0x00 ; 0 + 179e: 20 91 d0 02 lds r18, 0x02D0 + 17a2: 30 91 d1 02 lds r19, 0x02D1 + 17a6: 28 17 cp r18, r24 + 17a8: 39 07 cpc r19, r25 + 17aa: 09 f0 breq .+2 ; 0x17ae + 17ac: 99 c0 rjmp .+306 ; 0x18e0 return; switch (USB_ControlRequest.bRequest) - 173e: 80 91 e9 02 lds r24, 0x02E9 - 1742: 81 32 cpi r24, 0x21 ; 33 - 1744: 69 f0 breq .+26 ; 0x1760 - 1746: 82 32 cpi r24, 0x22 ; 34 - 1748: 20 f4 brcc .+8 ; 0x1752 - 174a: 80 32 cpi r24, 0x20 ; 32 - 174c: 09 f0 breq .+2 ; 0x1750 - 174e: 90 c0 rjmp .+288 ; 0x1870 - 1750: 3c c0 rjmp .+120 ; 0x17ca - 1752: 82 32 cpi r24, 0x22 ; 34 - 1754: 09 f4 brne .+2 ; 0x1758 - 1756: 6b c0 rjmp .+214 ; 0x182e - 1758: 83 32 cpi r24, 0x23 ; 35 - 175a: 09 f0 breq .+2 ; 0x175e - 175c: 89 c0 rjmp .+274 ; 0x1870 - 175e: 7a c0 rjmp .+244 ; 0x1854 + 17ae: 80 91 cd 02 lds r24, 0x02CD + 17b2: 81 32 cpi r24, 0x21 ; 33 + 17b4: 69 f0 breq .+26 ; 0x17d0 + 17b6: 82 32 cpi r24, 0x22 ; 34 + 17b8: 20 f4 brcc .+8 ; 0x17c2 + 17ba: 80 32 cpi r24, 0x20 ; 32 + 17bc: 09 f0 breq .+2 ; 0x17c0 + 17be: 90 c0 rjmp .+288 ; 0x18e0 + 17c0: 3c c0 rjmp .+120 ; 0x183a + 17c2: 82 32 cpi r24, 0x22 ; 34 + 17c4: 09 f4 brne .+2 ; 0x17c8 + 17c6: 6b c0 rjmp .+214 ; 0x189e + 17c8: 83 32 cpi r24, 0x23 ; 35 + 17ca: 09 f0 breq .+2 ; 0x17ce + 17cc: 89 c0 rjmp .+274 ; 0x18e0 + 17ce: 7a c0 rjmp .+244 ; 0x18c4 { case CDC_REQ_GetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - 1760: 80 91 e8 02 lds r24, 0x02E8 - 1764: 81 3a cpi r24, 0xA1 ; 161 - 1766: 09 f0 breq .+2 ; 0x176a - 1768: 83 c0 rjmp .+262 ; 0x1870 + 17d0: 80 91 cc 02 lds r24, 0x02CC + 17d4: 81 3a cpi r24, 0xA1 ; 161 + 17d6: 09 f0 breq .+2 ; 0x17da + 17d8: 83 c0 rjmp .+262 ; 0x18e0 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 176a: 80 91 e8 00 lds r24, 0x00E8 - 176e: 87 7f andi r24, 0xF7 ; 247 - 1770: 80 93 e8 00 sts 0x00E8, r24 + 17da: 80 91 e8 00 lds r24, 0x00E8 + 17de: 87 7f andi r24, 0xF7 ; 247 + 17e0: 80 93 e8 00 sts 0x00E8, r24 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 1774: 80 91 e8 00 lds r24, 0x00E8 + 17e4: 80 91 e8 00 lds r24, 0x00E8 { Endpoint_ClearSETUP(); while (!(Endpoint_IsINReady())); - 1778: 80 ff sbrs r24, 0 - 177a: fc cf rjmp .-8 ; 0x1774 + 17e8: 80 ff sbrs r24, 0 + 17ea: fc cf rjmp .-8 ; 0x17e4 Endpoint_Write_32_LE(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 177c: 8c 89 ldd r24, Y+20 ; 0x14 - 177e: 9d 89 ldd r25, Y+21 ; 0x15 - 1780: ae 89 ldd r26, Y+22 ; 0x16 - 1782: bf 89 ldd r27, Y+23 ; 0x17 + 17ec: 8c 89 ldd r24, Y+20 ; 0x14 + 17ee: 9d 89 ldd r25, Y+21 ; 0x15 + 17f0: ae 89 ldd r26, Y+22 ; 0x16 + 17f2: bf 89 ldd r27, Y+23 ; 0x17 * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_32_LE(const uint32_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_32_LE(const uint32_t Data) { UEDATX = (Data & 0xFF); - 1784: 80 93 f1 00 sts 0x00F1, r24 + 17f4: 80 93 f1 00 sts 0x00F1, r24 UEDATX = (Data >> 8); - 1788: 29 2f mov r18, r25 - 178a: 3a 2f mov r19, r26 - 178c: 4b 2f mov r20, r27 - 178e: 55 27 eor r21, r21 - 1790: 20 93 f1 00 sts 0x00F1, r18 + 17f8: 29 2f mov r18, r25 + 17fa: 3a 2f mov r19, r26 + 17fc: 4b 2f mov r20, r27 + 17fe: 55 27 eor r21, r21 + 1800: 20 93 f1 00 sts 0x00F1, r18 UEDATX = (Data >> 16); - 1794: 9d 01 movw r18, r26 - 1796: 44 27 eor r20, r20 - 1798: 55 27 eor r21, r21 - 179a: 20 93 f1 00 sts 0x00F1, r18 + 1804: 9d 01 movw r18, r26 + 1806: 44 27 eor r20, r20 + 1808: 55 27 eor r21, r21 + 180a: 20 93 f1 00 sts 0x00F1, r18 UEDATX = (Data >> 24); - 179e: 8b 2f mov r24, r27 - 17a0: 99 27 eor r25, r25 - 17a2: aa 27 eor r26, r26 - 17a4: bb 27 eor r27, r27 - 17a6: 80 93 f1 00 sts 0x00F1, r24 + 180e: 8b 2f mov r24, r27 + 1810: 99 27 eor r25, r25 + 1812: aa 27 eor r26, r26 + 1814: bb 27 eor r27, r27 + 1816: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.CharFormat); - 17aa: 88 8d ldd r24, Y+24 ; 0x18 + 181a: 88 8d ldd r24, Y+24 ; 0x18 * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 17ac: 80 93 f1 00 sts 0x00F1, r24 + 181c: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.ParityType); - 17b0: 89 8d ldd r24, Y+25 ; 0x19 - 17b2: 80 93 f1 00 sts 0x00F1, r24 + 1820: 89 8d ldd r24, Y+25 ; 0x19 + 1822: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.DataBits); - 17b6: 8a 8d ldd r24, Y+26 ; 0x1a - 17b8: 80 93 f1 00 sts 0x00F1, r24 + 1826: 8a 8d ldd r24, Y+26 ; 0x1a + 1828: 80 93 f1 00 sts 0x00F1, r24 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 17bc: 80 91 e8 00 lds r24, 0x00E8 - 17c0: 8e 77 andi r24, 0x7E ; 126 - 17c2: 80 93 e8 00 sts 0x00E8, r24 + 182c: 80 91 e8 00 lds r24, 0x00E8 + 1830: 8e 77 andi r24, 0x7E ; 126 + 1832: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearIN(); Endpoint_ClearStatusStage(); - 17c6: b4 dc rcall .-1688 ; 0x1130 - 17c8: 53 c0 rjmp .+166 ; 0x1870 + 1836: b4 dc rcall .-1688 ; 0x11a0 + 1838: 53 c0 rjmp .+166 ; 0x18e0 } break; case CDC_REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 17ca: 80 91 e8 02 lds r24, 0x02E8 - 17ce: 81 32 cpi r24, 0x21 ; 33 - 17d0: 09 f0 breq .+2 ; 0x17d4 - 17d2: 4e c0 rjmp .+156 ; 0x1870 + 183a: 80 91 cc 02 lds r24, 0x02CC + 183e: 81 32 cpi r24, 0x21 ; 33 + 1840: 09 f0 breq .+2 ; 0x1844 + 1842: 4e c0 rjmp .+156 ; 0x18e0 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 17d4: 80 91 e8 00 lds r24, 0x00E8 - 17d8: 87 7f andi r24, 0xF7 ; 247 - 17da: 80 93 e8 00 sts 0x00E8, r24 + 1844: 80 91 e8 00 lds r24, 0x00E8 + 1848: 87 7f andi r24, 0xF7 ; 247 + 184a: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); while (!(Endpoint_IsOUTReceived())) - 17de: 04 c0 rjmp .+8 ; 0x17e8 + 184e: 04 c0 rjmp .+8 ; 0x1858 { if (USB_DeviceState == DEVICE_STATE_Unattached) - 17e0: 8e b3 in r24, 0x1e ; 30 - 17e2: 88 23 and r24, r24 - 17e4: 09 f4 brne .+2 ; 0x17e8 - 17e6: 44 c0 rjmp .+136 ; 0x1870 + 1850: 8e b3 in r24, 0x1e ; 30 + 1852: 88 23 and r24, r24 + 1854: 09 f4 brne .+2 ; 0x1858 + 1856: 44 c0 rjmp .+136 ; 0x18e0 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 17e8: 80 91 e8 00 lds r24, 0x00E8 + 1858: 80 91 e8 00 lds r24, 0x00E8 case CDC_REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); while (!(Endpoint_IsOUTReceived())) - 17ec: 82 ff sbrs r24, 2 - 17ee: f8 cf rjmp .-16 ; 0x17e0 + 185c: 82 ff sbrs r24, 2 + 185e: f8 cf rjmp .-16 ; 0x1850 { uint32_t Value; uint8_t Bytes[4]; } Data; Data.Bytes[0] = UEDATX; - 17f0: 30 91 f1 00 lds r19, 0x00F1 + 1860: 30 91 f1 00 lds r19, 0x00F1 Data.Bytes[1] = UEDATX; - 17f4: 20 91 f1 00 lds r18, 0x00F1 + 1864: 20 91 f1 00 lds r18, 0x00F1 Data.Bytes[2] = UEDATX; - 17f8: 90 91 f1 00 lds r25, 0x00F1 + 1868: 90 91 f1 00 lds r25, 0x00F1 Data.Bytes[3] = UEDATX; - 17fc: 80 91 f1 00 lds r24, 0x00F1 + 186c: 80 91 f1 00 lds r24, 0x00F1 { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } CDCInterfaceInfo->State.LineEncoding.BaudRateBPS = Endpoint_Read_32_LE(); - 1800: 3c 8b std Y+20, r19 ; 0x14 - 1802: 2d 8b std Y+21, r18 ; 0x15 - 1804: 9e 8b std Y+22, r25 ; 0x16 - 1806: 8f 8b std Y+23, r24 ; 0x17 + 1870: 3c 8b std Y+20, r19 ; 0x14 + 1872: 2d 8b std Y+21, r18 ; 0x15 + 1874: 9e 8b std Y+22, r25 ; 0x16 + 1876: 8f 8b std Y+23, r24 ; 0x17 * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - 1808: 80 91 f1 00 lds r24, 0x00F1 + 1878: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.CharFormat = Endpoint_Read_8(); - 180c: 88 8f std Y+24, r24 ; 0x18 - 180e: 80 91 f1 00 lds r24, 0x00F1 + 187c: 88 8f std Y+24, r24 ; 0x18 + 187e: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.ParityType = Endpoint_Read_8(); - 1812: 89 8f std Y+25, r24 ; 0x19 - 1814: 80 91 f1 00 lds r24, 0x00F1 + 1882: 89 8f std Y+25, r24 ; 0x19 + 1884: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.DataBits = Endpoint_Read_8(); - 1818: 8a 8f std Y+26, r24 ; 0x1a + 1888: 8a 8f std Y+26, r24 ; 0x1a */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 181a: 80 91 e8 00 lds r24, 0x00E8 - 181e: 8b 77 andi r24, 0x7B ; 123 - 1820: 80 93 e8 00 sts 0x00E8, r24 + 188a: 80 91 e8 00 lds r24, 0x00E8 + 188e: 8b 77 andi r24, 0x7B ; 123 + 1890: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearOUT(); Endpoint_ClearStatusStage(); - 1824: 85 dc rcall .-1782 ; 0x1130 + 1894: 85 dc rcall .-1782 ; 0x11a0 EVENT_CDC_Device_LineEncodingChanged(CDCInterfaceInfo); - 1826: ce 01 movw r24, r28 - 1828: 0e 94 7c 03 call 0x6f8 ; 0x6f8 - 182c: 21 c0 rjmp .+66 ; 0x1870 + 1896: ce 01 movw r24, r28 + 1898: 0e 94 7c 03 call 0x6f8 ; 0x6f8 + 189c: 21 c0 rjmp .+66 ; 0x18e0 } break; case CDC_REQ_SetControlLineState: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 182e: 80 91 e8 02 lds r24, 0x02E8 - 1832: 81 32 cpi r24, 0x21 ; 33 - 1834: e9 f4 brne .+58 ; 0x1870 + 189e: 80 91 cc 02 lds r24, 0x02CC + 18a2: 81 32 cpi r24, 0x21 ; 33 + 18a4: e9 f4 brne .+58 ; 0x18e0 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 1836: 80 91 e8 00 lds r24, 0x00E8 - 183a: 87 7f andi r24, 0xF7 ; 247 - 183c: 80 93 e8 00 sts 0x00E8, r24 + 18a6: 80 91 e8 00 lds r24, 0x00E8 + 18aa: 87 7f andi r24, 0xF7 ; 247 + 18ac: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 1840: 77 dc rcall .-1810 ; 0x1130 + 18b0: 77 dc rcall .-1810 ; 0x11a0 CDCInterfaceInfo->State.ControlLineStates.HostToDevice = USB_ControlRequest.wValue; - 1842: 80 91 ea 02 lds r24, 0x02EA - 1846: 90 91 eb 02 lds r25, 0x02EB - 184a: 99 8b std Y+17, r25 ; 0x11 - 184c: 88 8b std Y+16, r24 ; 0x10 + 18b2: 80 91 ce 02 lds r24, 0x02CE + 18b6: 90 91 cf 02 lds r25, 0x02CF + 18ba: 99 8b std Y+17, r25 ; 0x11 + 18bc: 88 8b std Y+16, r24 ; 0x10 EVENT_CDC_Device_ControLineStateChanged(CDCInterfaceInfo); - 184e: ce 01 movw r24, r28 - 1850: d4 d0 rcall .+424 ; 0x19fa - 1852: 0e c0 rjmp .+28 ; 0x1870 + 18be: ce 01 movw r24, r28 + 18c0: d4 d0 rcall .+424 ; 0x1a6a + 18c2: 0e c0 rjmp .+28 ; 0x18e0 } break; case CDC_REQ_SendBreak: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 1854: 80 91 e8 02 lds r24, 0x02E8 - 1858: 81 32 cpi r24, 0x21 ; 33 - 185a: 51 f4 brne .+20 ; 0x1870 - 185c: 80 91 e8 00 lds r24, 0x00E8 - 1860: 87 7f andi r24, 0xF7 ; 247 - 1862: 80 93 e8 00 sts 0x00E8, r24 + 18c4: 80 91 cc 02 lds r24, 0x02CC + 18c8: 81 32 cpi r24, 0x21 ; 33 + 18ca: 51 f4 brne .+20 ; 0x18e0 + 18cc: 80 91 e8 00 lds r24, 0x00E8 + 18d0: 87 7f andi r24, 0xF7 ; 247 + 18d2: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 1866: 64 dc rcall .-1848 ; 0x1130 + 18d6: 64 dc rcall .-1848 ; 0x11a0 EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue); - 1868: ce 01 movw r24, r28 - 186a: 60 91 ea 02 lds r22, 0x02EA - 186e: c5 d0 rcall .+394 ; 0x19fa + 18d8: ce 01 movw r24, r28 + 18da: 60 91 ce 02 lds r22, 0x02CE + 18de: c5 d0 rcall .+394 ; 0x1a6a } break; } } - 1870: df 91 pop r29 - 1872: cf 91 pop r28 - 1874: 08 95 ret + 18e0: df 91 pop r29 + 18e2: cf 91 pop r28 + 18e4: 08 95 ret -00001876 : +000018e6 : bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 1876: cf 93 push r28 - 1878: df 93 push r29 - 187a: ec 01 movw r28, r24 + 18e6: cf 93 push r28 + 18e8: df 93 push r29 + 18ea: ec 01 movw r28, r24 memset(&CDCInterfaceInfo->State, 0x00, sizeof(CDCInterfaceInfo->State)); - 187c: 40 96 adiw r24, 0x10 ; 16 - 187e: fc 01 movw r30, r24 - 1880: 8b e0 ldi r24, 0x0B ; 11 - 1882: df 01 movw r26, r30 - 1884: 1d 92 st X+, r1 - 1886: 8a 95 dec r24 - 1888: e9 f7 brne .-6 ; 0x1884 + 18ec: 40 96 adiw r24, 0x10 ; 16 + 18ee: fc 01 movw r30, r24 + 18f0: 8b e0 ldi r24, 0x0B ; 11 + 18f2: df 01 movw r26, r30 + 18f4: 1d 92 st X+, r1 + 18f6: 8a 95 dec r24 + 18f8: e9 f7 brne .-6 ; 0x18f4 CDCInterfaceInfo->Config.DataINEndpoint.Type = EP_TYPE_BULK; - 188a: 82 e0 ldi r24, 0x02 ; 2 - 188c: 8c 83 std Y+4, r24 ; 0x04 + 18fa: 82 e0 ldi r24, 0x02 ; 2 + 18fc: 8c 83 std Y+4, r24 ; 0x04 CDCInterfaceInfo->Config.DataOUTEndpoint.Type = EP_TYPE_BULK; - 188e: 89 87 std Y+9, r24 ; 0x09 + 18fe: 89 87 std Y+9, r24 ; 0x09 CDCInterfaceInfo->Config.NotificationEndpoint.Type = EP_TYPE_INTERRUPT; - 1890: 83 e0 ldi r24, 0x03 ; 3 - 1892: 8e 87 std Y+14, r24 ; 0x0e + 1900: 83 e0 ldi r24, 0x03 ; 3 + 1902: 8e 87 std Y+14, r24 ; 0x0e if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) - 1894: ce 01 movw r24, r28 - 1896: 01 96 adiw r24, 0x01 ; 1 - 1898: 61 e0 ldi r22, 0x01 ; 1 - 189a: 06 dc rcall .-2036 ; 0x10a8 - 189c: 88 23 and r24, r24 - 189e: 59 f0 breq .+22 ; 0x18b6 + 1904: ce 01 movw r24, r28 + 1906: 01 96 adiw r24, 0x01 ; 1 + 1908: 61 e0 ldi r22, 0x01 ; 1 + 190a: 06 dc rcall .-2036 ; 0x1118 + 190c: 88 23 and r24, r24 + 190e: 59 f0 breq .+22 ; 0x1926 return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) - 18a0: ce 01 movw r24, r28 - 18a2: 06 96 adiw r24, 0x06 ; 6 - 18a4: 61 e0 ldi r22, 0x01 ; 1 - 18a6: 00 dc rcall .-2048 ; 0x10a8 - 18a8: 88 23 and r24, r24 - 18aa: 29 f0 breq .+10 ; 0x18b6 + 1910: ce 01 movw r24, r28 + 1912: 06 96 adiw r24, 0x06 ; 6 + 1914: 61 e0 ldi r22, 0x01 ; 1 + 1916: 00 dc rcall .-2048 ; 0x1118 + 1918: 88 23 and r24, r24 + 191a: 29 f0 breq .+10 ; 0x1926 return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) - 18ac: ce 01 movw r24, r28 - 18ae: 0b 96 adiw r24, 0x0b ; 11 - 18b0: 61 e0 ldi r22, 0x01 ; 1 - 18b2: fa db rcall .-2060 ; 0x10a8 - 18b4: 01 c0 rjmp .+2 ; 0x18b8 + 191c: ce 01 movw r24, r28 + 191e: 0b 96 adiw r24, 0x0b ; 11 + 1920: 61 e0 ldi r22, 0x01 ; 1 + 1922: fa db rcall .-2060 ; 0x1118 + 1924: 01 c0 rjmp .+2 ; 0x1928 if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) return false; - 18b6: 80 e0 ldi r24, 0x00 ; 0 + 1926: 80 e0 ldi r24, 0x00 ; 0 if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) return false; return true; } - 18b8: df 91 pop r29 - 18ba: cf 91 pop r28 - 18bc: 08 95 ret + 1928: df 91 pop r29 + 192a: cf 91 pop r28 + 192c: 08 95 ret -000018be : +0000192e : return Endpoint_Write_Stream_LE(Buffer, Length, NULL); } uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data) { - 18be: df 93 push r29 - 18c0: cf 93 push r28 - 18c2: 0f 92 push r0 - 18c4: cd b7 in r28, 0x3d ; 61 - 18c6: de b7 in r29, 0x3e ; 62 - 18c8: fc 01 movw r30, r24 + 192e: df 93 push r29 + 1930: cf 93 push r28 + 1932: 0f 92 push r0 + 1934: cd b7 in r28, 0x3d ; 61 + 1936: de b7 in r29, 0x3e ; 62 + 1938: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 18ca: 8e b3 in r24, 0x1e ; 30 - 18cc: 84 30 cpi r24, 0x04 ; 4 - 18ce: f9 f4 brne .+62 ; 0x190e - 18d0: 24 89 ldd r18, Z+20 ; 0x14 - 18d2: 35 89 ldd r19, Z+21 ; 0x15 - 18d4: 46 89 ldd r20, Z+22 ; 0x16 - 18d6: 57 89 ldd r21, Z+23 ; 0x17 - 18d8: 21 15 cp r18, r1 - 18da: 31 05 cpc r19, r1 - 18dc: 41 05 cpc r20, r1 - 18de: 51 05 cpc r21, r1 - 18e0: b1 f0 breq .+44 ; 0x190e + 193a: 8e b3 in r24, 0x1e ; 30 + 193c: 84 30 cpi r24, 0x04 ; 4 + 193e: f9 f4 brne .+62 ; 0x197e + 1940: 24 89 ldd r18, Z+20 ; 0x14 + 1942: 35 89 ldd r19, Z+21 ; 0x15 + 1944: 46 89 ldd r20, Z+22 ; 0x16 + 1946: 57 89 ldd r21, Z+23 ; 0x17 + 1948: 21 15 cp r18, r1 + 194a: 31 05 cpc r19, r1 + 194c: 41 05 cpc r20, r1 + 194e: 51 05 cpc r21, r1 + 1950: b1 f0 breq .+44 ; 0x197e */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 18e2: 81 81 ldd r24, Z+1 ; 0x01 - 18e4: 8f 70 andi r24, 0x0F ; 15 - 18e6: 80 93 e9 00 sts 0x00E9, r24 + 1952: 81 81 ldd r24, Z+1 ; 0x01 + 1954: 8f 70 andi r24, 0x0F ; 15 + 1956: 80 93 e9 00 sts 0x00E9, r24 * on its direction. */ static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsReadWriteAllowed(void) { return ((UEINTX & (1 << RWAL)) ? true : false); - 18ea: 80 91 e8 00 lds r24, 0x00E8 + 195a: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWSTREAM_DeviceDisconnected; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_IsReadWriteAllowed())) - 18ee: 85 fd sbrc r24, 5 - 18f0: 0a c0 rjmp .+20 ; 0x1906 + 195e: 85 fd sbrc r24, 5 + 1960: 0a c0 rjmp .+20 ; 0x1976 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 18f2: 80 91 e8 00 lds r24, 0x00E8 - 18f6: 8e 77 andi r24, 0x7E ; 126 - 18f8: 80 93 e8 00 sts 0x00E8, r24 + 1962: 80 91 e8 00 lds r24, 0x00E8 + 1966: 8e 77 andi r24, 0x7E ; 126 + 1968: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearIN(); uint8_t ErrorCode; if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 18fc: 69 83 std Y+1, r22 ; 0x01 - 18fe: 37 dc rcall .-1938 ; 0x116e - 1900: 69 81 ldd r22, Y+1 ; 0x01 - 1902: 88 23 and r24, r24 - 1904: 29 f4 brne .+10 ; 0x1910 + 196c: 69 83 std Y+1, r22 ; 0x01 + 196e: 37 dc rcall .-1938 ; 0x11de + 1970: 69 81 ldd r22, Y+1 ; 0x01 + 1972: 88 23 and r24, r24 + 1974: 29 f4 brne .+10 ; 0x1980 * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 1906: 60 93 f1 00 sts 0x00F1, r22 + 1976: 60 93 f1 00 sts 0x00F1, r22 return ErrorCode; } Endpoint_Write_8(Data); return ENDPOINT_READYWAIT_NoError; - 190a: 80 e0 ldi r24, 0x00 ; 0 - 190c: 01 c0 rjmp .+2 ; 0x1910 + 197a: 80 e0 ldi r24, 0x00 ; 0 + 197c: 01 c0 rjmp .+2 ; 0x1980 uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return ENDPOINT_RWSTREAM_DeviceDisconnected; - 190e: 82 e0 ldi r24, 0x02 ; 2 + 197e: 82 e0 ldi r24, 0x02 ; 2 return ErrorCode; } Endpoint_Write_8(Data); return ENDPOINT_READYWAIT_NoError; } - 1910: 0f 90 pop r0 - 1912: cf 91 pop r28 - 1914: df 91 pop r29 - 1916: 08 95 ret + 1980: 0f 90 pop r0 + 1982: cf 91 pop r28 + 1984: df 91 pop r29 + 1986: 08 95 ret -00001918 : +00001988 : uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 1918: fc 01 movw r30, r24 + 1988: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 191a: 8e b3 in r24, 0x1e ; 30 - 191c: 84 30 cpi r24, 0x04 ; 4 - 191e: 19 f5 brne .+70 ; 0x1966 - 1920: 24 89 ldd r18, Z+20 ; 0x14 - 1922: 35 89 ldd r19, Z+21 ; 0x15 - 1924: 46 89 ldd r20, Z+22 ; 0x16 - 1926: 57 89 ldd r21, Z+23 ; 0x17 - 1928: 21 15 cp r18, r1 - 192a: 31 05 cpc r19, r1 - 192c: 41 05 cpc r20, r1 - 192e: 51 05 cpc r21, r1 - 1930: d1 f0 breq .+52 ; 0x1966 + 198a: 8e b3 in r24, 0x1e ; 30 + 198c: 84 30 cpi r24, 0x04 ; 4 + 198e: 19 f5 brne .+70 ; 0x19d6 + 1990: 24 89 ldd r18, Z+20 ; 0x14 + 1992: 35 89 ldd r19, Z+21 ; 0x15 + 1994: 46 89 ldd r20, Z+22 ; 0x16 + 1996: 57 89 ldd r21, Z+23 ; 0x17 + 1998: 21 15 cp r18, r1 + 199a: 31 05 cpc r19, r1 + 199c: 41 05 cpc r20, r1 + 199e: 51 05 cpc r21, r1 + 19a0: d1 f0 breq .+52 ; 0x19d6 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1932: 81 81 ldd r24, Z+1 ; 0x01 - 1934: 8f 70 andi r24, 0x0F ; 15 - 1936: 80 93 e9 00 sts 0x00E9, r24 + 19a2: 81 81 ldd r24, Z+1 ; 0x01 + 19a4: 8f 70 andi r24, 0x0F ; 15 + 19a6: 80 93 e9 00 sts 0x00E9, r24 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 193a: 80 91 f2 00 lds r24, 0x00F2 + 19aa: 80 91 f2 00 lds r24, 0x00F2 uint8_t ErrorCode; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_BytesInEndpoint())) - 193e: 88 23 and r24, r24 - 1940: a1 f0 breq .+40 ; 0x196a + 19ae: 88 23 and r24, r24 + 19b0: a1 f0 breq .+40 ; 0x19da * on its direction. */ static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsReadWriteAllowed(void) { return ((UEINTX & (1 << RWAL)) ? true : false); - 1942: 90 91 e8 00 lds r25, 0x00E8 + 19b2: 90 91 e8 00 lds r25, 0x00E8 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 1946: 80 91 e8 00 lds r24, 0x00E8 - 194a: 8e 77 andi r24, 0x7E ; 126 - 194c: 80 93 e8 00 sts 0x00E8, r24 + 19b6: 80 91 e8 00 lds r24, 0x00E8 + 19ba: 8e 77 andi r24, 0x7E ; 126 + 19bc: 80 93 e8 00 sts 0x00E8, r24 bool BankFull = !(Endpoint_IsReadWriteAllowed()); Endpoint_ClearIN(); if (BankFull) - 1950: 95 fd sbrc r25, 5 - 1952: 0d c0 rjmp .+26 ; 0x196e + 19c0: 95 fd sbrc r25, 5 + 19c2: 0d c0 rjmp .+26 ; 0x19de { if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 1954: 0c dc rcall .-2024 ; 0x116e - 1956: 88 23 and r24, r24 - 1958: 59 f4 brne .+22 ; 0x1970 - 195a: 90 91 e8 00 lds r25, 0x00E8 - 195e: 9e 77 andi r25, 0x7E ; 126 - 1960: 90 93 e8 00 sts 0x00E8, r25 - 1964: 08 95 ret + 19c4: 0c dc rcall .-2024 ; 0x11de + 19c6: 88 23 and r24, r24 + 19c8: 59 f4 brne .+22 ; 0x19e0 + 19ca: 90 91 e8 00 lds r25, 0x00E8 + 19ce: 9e 77 andi r25, 0x7E ; 126 + 19d0: 90 93 e8 00 sts 0x00E8, r25 + 19d4: 08 95 ret } uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return ENDPOINT_RWSTREAM_DeviceDisconnected; - 1966: 82 e0 ldi r24, 0x02 ; 2 - 1968: 08 95 ret + 19d6: 82 e0 ldi r24, 0x02 ; 2 + 19d8: 08 95 ret uint8_t ErrorCode; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_BytesInEndpoint())) return ENDPOINT_READYWAIT_NoError; - 196a: 80 e0 ldi r24, 0x00 ; 0 - 196c: 08 95 ret + 19da: 80 e0 ldi r24, 0x00 ; 0 + 19dc: 08 95 ret return ErrorCode; Endpoint_ClearIN(); } return ENDPOINT_READYWAIT_NoError; - 196e: 80 e0 ldi r24, 0x00 ; 0 + 19de: 80 e0 ldi r24, 0x00 ; 0 } - 1970: 08 95 ret + 19e0: 08 95 ret -00001972 : +000019e2 : return true; } void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1972: 2e b3 in r18, 0x1e ; 30 - 1974: 24 30 cpi r18, 0x04 ; 4 - 1976: 99 f4 brne .+38 ; 0x199e - 1978: fc 01 movw r30, r24 - 197a: 24 89 ldd r18, Z+20 ; 0x14 - 197c: 35 89 ldd r19, Z+21 ; 0x15 - 197e: 46 89 ldd r20, Z+22 ; 0x16 - 1980: 57 89 ldd r21, Z+23 ; 0x17 - 1982: 21 15 cp r18, r1 - 1984: 31 05 cpc r19, r1 - 1986: 41 05 cpc r20, r1 - 1988: 51 05 cpc r21, r1 - 198a: 49 f0 breq .+18 ; 0x199e + 19e2: 2e b3 in r18, 0x1e ; 30 + 19e4: 24 30 cpi r18, 0x04 ; 4 + 19e6: 99 f4 brne .+38 ; 0x1a0e + 19e8: fc 01 movw r30, r24 + 19ea: 24 89 ldd r18, Z+20 ; 0x14 + 19ec: 35 89 ldd r19, Z+21 ; 0x15 + 19ee: 46 89 ldd r20, Z+22 ; 0x16 + 19f0: 57 89 ldd r21, Z+23 ; 0x17 + 19f2: 21 15 cp r18, r1 + 19f4: 31 05 cpc r19, r1 + 19f6: 41 05 cpc r20, r1 + 19f8: 51 05 cpc r21, r1 + 19fa: 49 f0 breq .+18 ; 0x1a0e */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 198c: 21 81 ldd r18, Z+1 ; 0x01 - 198e: 2f 70 andi r18, 0x0F ; 15 - 1990: 20 93 e9 00 sts 0x00E9, r18 + 19fc: 21 81 ldd r18, Z+1 ; 0x01 + 19fe: 2f 70 andi r18, 0x0F ; 15 + 1a00: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 1994: 20 91 e8 00 lds r18, 0x00E8 + 1a04: 20 91 e8 00 lds r18, 0x00E8 return; #if !defined(NO_CLASS_DRIVER_AUTOFLUSH) Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (Endpoint_IsINReady()) - 1998: 20 ff sbrs r18, 0 - 199a: 01 c0 rjmp .+2 ; 0x199e + 1a08: 20 ff sbrs r18, 0 + 1a0a: 01 c0 rjmp .+2 ; 0x1a0e CDC_Device_Flush(CDCInterfaceInfo); - 199c: bd cf rjmp .-134 ; 0x1918 - 199e: 08 95 ret + 1a0c: bd cf rjmp .-134 ; 0x1988 + 1a0e: 08 95 ret -000019a0 : +00001a10 : return 0; } } int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 19a0: fc 01 movw r30, r24 + 1a10: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 19a2: 8e b3 in r24, 0x1e ; 30 - 19a4: 84 30 cpi r24, 0x04 ; 4 - 19a6: 29 f5 brne .+74 ; 0x19f2 - 19a8: 24 89 ldd r18, Z+20 ; 0x14 - 19aa: 35 89 ldd r19, Z+21 ; 0x15 - 19ac: 46 89 ldd r20, Z+22 ; 0x16 - 19ae: 57 89 ldd r21, Z+23 ; 0x17 - 19b0: 21 15 cp r18, r1 - 19b2: 31 05 cpc r19, r1 - 19b4: 41 05 cpc r20, r1 - 19b6: 51 05 cpc r21, r1 - 19b8: e1 f0 breq .+56 ; 0x19f2 + 1a12: 8e b3 in r24, 0x1e ; 30 + 1a14: 84 30 cpi r24, 0x04 ; 4 + 1a16: 29 f5 brne .+74 ; 0x1a62 + 1a18: 24 89 ldd r18, Z+20 ; 0x14 + 1a1a: 35 89 ldd r19, Z+21 ; 0x15 + 1a1c: 46 89 ldd r20, Z+22 ; 0x16 + 1a1e: 57 89 ldd r21, Z+23 ; 0x17 + 1a20: 21 15 cp r18, r1 + 1a22: 31 05 cpc r19, r1 + 1a24: 41 05 cpc r20, r1 + 1a26: 51 05 cpc r21, r1 + 1a28: e1 f0 breq .+56 ; 0x1a62 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 19ba: 86 81 ldd r24, Z+6 ; 0x06 - 19bc: 8f 70 andi r24, 0x0F ; 15 - 19be: 80 93 e9 00 sts 0x00E9, r24 + 1a2a: 86 81 ldd r24, Z+6 ; 0x06 + 1a2c: 8f 70 andi r24, 0x0F ; 15 + 1a2e: 80 93 e9 00 sts 0x00E9, r24 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 19c2: 80 91 e8 00 lds r24, 0x00E8 + 1a32: 80 91 e8 00 lds r24, 0x00E8 int16_t ReceivedByte = -1; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpoint.Address); if (Endpoint_IsOUTReceived()) - 19c6: 82 ff sbrs r24, 2 - 19c8: 14 c0 rjmp .+40 ; 0x19f2 + 1a36: 82 ff sbrs r24, 2 + 1a38: 14 c0 rjmp .+40 ; 0x1a62 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 19ca: 80 91 f2 00 lds r24, 0x00F2 + 1a3a: 80 91 f2 00 lds r24, 0x00F2 { if (Endpoint_BytesInEndpoint()) - 19ce: 88 23 and r24, r24 - 19d0: 21 f0 breq .+8 ; 0x19da + 1a3e: 88 23 and r24, r24 + 1a40: 21 f0 breq .+8 ; 0x1a4a * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - 19d2: 20 91 f1 00 lds r18, 0x00F1 + 1a42: 20 91 f1 00 lds r18, 0x00F1 ReceivedByte = Endpoint_Read_8(); - 19d6: 30 e0 ldi r19, 0x00 ; 0 - 19d8: 02 c0 rjmp .+4 ; 0x19de + 1a46: 30 e0 ldi r19, 0x00 ; 0 + 1a48: 02 c0 rjmp .+4 ; 0x1a4e int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return -1; int16_t ReceivedByte = -1; - 19da: 2f ef ldi r18, 0xFF ; 255 - 19dc: 3f ef ldi r19, 0xFF ; 255 + 1a4a: 2f ef ldi r18, 0xFF ; 255 + 1a4c: 3f ef ldi r19, 0xFF ; 255 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 19de: 80 91 f2 00 lds r24, 0x00F2 + 1a4e: 80 91 f2 00 lds r24, 0x00F2 if (Endpoint_IsOUTReceived()) { if (Endpoint_BytesInEndpoint()) ReceivedByte = Endpoint_Read_8(); if (!(Endpoint_BytesInEndpoint())) - 19e2: 88 23 and r24, r24 - 19e4: 41 f4 brne .+16 ; 0x19f6 + 1a52: 88 23 and r24, r24 + 1a54: 41 f4 brne .+16 ; 0x1a66 */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 19e6: 80 91 e8 00 lds r24, 0x00E8 - 19ea: 8b 77 andi r24, 0x7B ; 123 - 19ec: 80 93 e8 00 sts 0x00E8, r24 - 19f0: 02 c0 rjmp .+4 ; 0x19f6 + 1a56: 80 91 e8 00 lds r24, 0x00E8 + 1a5a: 8b 77 andi r24, 0x7B ; 123 + 1a5c: 80 93 e8 00 sts 0x00E8, r24 + 1a60: 02 c0 rjmp .+4 ; 0x1a66 int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return -1; int16_t ReceivedByte = -1; - 19f2: 2f ef ldi r18, 0xFF ; 255 - 19f4: 3f ef ldi r19, 0xFF ; 255 + 1a62: 2f ef ldi r18, 0xFF ; 255 + 1a64: 3f ef ldi r19, 0xFF ; 255 if (!(Endpoint_BytesInEndpoint())) Endpoint_ClearOUT(); } return ReceivedByte; } - 19f6: c9 01 movw r24, r18 - 19f8: 08 95 ret + 1a66: c9 01 movw r24, r18 + 1a68: 08 95 ret -000019fa : +00001a6a : #endif void CDC_Device_Event_Stub(void) { } - 19fa: 08 95 ret - -000019fc <__subsf3>: - 19fc: 50 58 subi r21, 0x80 ; 128 - -000019fe <__addsf3>: - 19fe: bb 27 eor r27, r27 - 1a00: aa 27 eor r26, r26 - 1a02: 0e d0 rcall .+28 ; 0x1a20 <__addsf3x> - 1a04: 70 c1 rjmp .+736 ; 0x1ce6 <__fp_round> - 1a06: 61 d1 rcall .+706 ; 0x1cca <__fp_pscA> - 1a08: 30 f0 brcs .+12 ; 0x1a16 <__addsf3+0x18> - 1a0a: 66 d1 rcall .+716 ; 0x1cd8 <__fp_pscB> - 1a0c: 20 f0 brcs .+8 ; 0x1a16 <__addsf3+0x18> - 1a0e: 31 f4 brne .+12 ; 0x1a1c <__addsf3+0x1e> - 1a10: 9f 3f cpi r25, 0xFF ; 255 - 1a12: 11 f4 brne .+4 ; 0x1a18 <__addsf3+0x1a> - 1a14: 1e f4 brtc .+6 ; 0x1a1c <__addsf3+0x1e> - 1a16: 56 c1 rjmp .+684 ; 0x1cc4 <__fp_nan> - 1a18: 0e f4 brtc .+2 ; 0x1a1c <__addsf3+0x1e> - 1a1a: e0 95 com r30 - 1a1c: e7 fb bst r30, 7 - 1a1e: 4c c1 rjmp .+664 ; 0x1cb8 <__fp_inf> - -00001a20 <__addsf3x>: - 1a20: e9 2f mov r30, r25 - 1a22: 72 d1 rcall .+740 ; 0x1d08 <__fp_split3> - 1a24: 80 f3 brcs .-32 ; 0x1a06 <__addsf3+0x8> - 1a26: ba 17 cp r27, r26 - 1a28: 62 07 cpc r22, r18 - 1a2a: 73 07 cpc r23, r19 - 1a2c: 84 07 cpc r24, r20 - 1a2e: 95 07 cpc r25, r21 - 1a30: 18 f0 brcs .+6 ; 0x1a38 <__addsf3x+0x18> - 1a32: 71 f4 brne .+28 ; 0x1a50 <__addsf3x+0x30> - 1a34: 9e f5 brtc .+102 ; 0x1a9c <__addsf3x+0x7c> - 1a36: 8a c1 rjmp .+788 ; 0x1d4c <__fp_zero> - 1a38: 0e f4 brtc .+2 ; 0x1a3c <__addsf3x+0x1c> - 1a3a: e0 95 com r30 - 1a3c: 0b 2e mov r0, r27 - 1a3e: ba 2f mov r27, r26 - 1a40: a0 2d mov r26, r0 - 1a42: 0b 01 movw r0, r22 - 1a44: b9 01 movw r22, r18 - 1a46: 90 01 movw r18, r0 - 1a48: 0c 01 movw r0, r24 - 1a4a: ca 01 movw r24, r20 - 1a4c: a0 01 movw r20, r0 - 1a4e: 11 24 eor r1, r1 - 1a50: ff 27 eor r31, r31 - 1a52: 59 1b sub r21, r25 - 1a54: 99 f0 breq .+38 ; 0x1a7c <__addsf3x+0x5c> - 1a56: 59 3f cpi r21, 0xF9 ; 249 - 1a58: 50 f4 brcc .+20 ; 0x1a6e <__addsf3x+0x4e> - 1a5a: 50 3e cpi r21, 0xE0 ; 224 - 1a5c: 68 f1 brcs .+90 ; 0x1ab8 <__addsf3x+0x98> - 1a5e: 1a 16 cp r1, r26 - 1a60: f0 40 sbci r31, 0x00 ; 0 - 1a62: a2 2f mov r26, r18 - 1a64: 23 2f mov r18, r19 - 1a66: 34 2f mov r19, r20 - 1a68: 44 27 eor r20, r20 - 1a6a: 58 5f subi r21, 0xF8 ; 248 - 1a6c: f3 cf rjmp .-26 ; 0x1a54 <__addsf3x+0x34> - 1a6e: 46 95 lsr r20 - 1a70: 37 95 ror r19 - 1a72: 27 95 ror r18 - 1a74: a7 95 ror r26 - 1a76: f0 40 sbci r31, 0x00 ; 0 - 1a78: 53 95 inc r21 - 1a7a: c9 f7 brne .-14 ; 0x1a6e <__addsf3x+0x4e> - 1a7c: 7e f4 brtc .+30 ; 0x1a9c <__addsf3x+0x7c> - 1a7e: 1f 16 cp r1, r31 - 1a80: ba 0b sbc r27, r26 - 1a82: 62 0b sbc r22, r18 - 1a84: 73 0b sbc r23, r19 - 1a86: 84 0b sbc r24, r20 - 1a88: ba f0 brmi .+46 ; 0x1ab8 <__addsf3x+0x98> - 1a8a: 91 50 subi r25, 0x01 ; 1 - 1a8c: a1 f0 breq .+40 ; 0x1ab6 <__addsf3x+0x96> - 1a8e: ff 0f add r31, r31 - 1a90: bb 1f adc r27, r27 - 1a92: 66 1f adc r22, r22 - 1a94: 77 1f adc r23, r23 - 1a96: 88 1f adc r24, r24 - 1a98: c2 f7 brpl .-16 ; 0x1a8a <__addsf3x+0x6a> - 1a9a: 0e c0 rjmp .+28 ; 0x1ab8 <__addsf3x+0x98> - 1a9c: ba 0f add r27, r26 - 1a9e: 62 1f adc r22, r18 - 1aa0: 73 1f adc r23, r19 - 1aa2: 84 1f adc r24, r20 - 1aa4: 48 f4 brcc .+18 ; 0x1ab8 <__addsf3x+0x98> - 1aa6: 87 95 ror r24 - 1aa8: 77 95 ror r23 - 1aaa: 67 95 ror r22 - 1aac: b7 95 ror r27 - 1aae: f7 95 ror r31 - 1ab0: 9e 3f cpi r25, 0xFE ; 254 - 1ab2: 08 f0 brcs .+2 ; 0x1ab6 <__addsf3x+0x96> - 1ab4: b3 cf rjmp .-154 ; 0x1a1c <__addsf3+0x1e> - 1ab6: 93 95 inc r25 - 1ab8: 88 0f add r24, r24 - 1aba: 08 f0 brcs .+2 ; 0x1abe <__addsf3x+0x9e> - 1abc: 99 27 eor r25, r25 - 1abe: ee 0f add r30, r30 - 1ac0: 97 95 ror r25 - 1ac2: 87 95 ror r24 - 1ac4: 08 95 ret - -00001ac6 <__cmpsf2>: - 1ac6: d4 d0 rcall .+424 ; 0x1c70 <__fp_cmp> - 1ac8: 08 f4 brcc .+2 ; 0x1acc <__cmpsf2+0x6> - 1aca: 81 e0 ldi r24, 0x01 ; 1 - 1acc: 08 95 ret - -00001ace <__divsf3>: - 1ace: 0c d0 rcall .+24 ; 0x1ae8 <__divsf3x> - 1ad0: 0a c1 rjmp .+532 ; 0x1ce6 <__fp_round> - 1ad2: 02 d1 rcall .+516 ; 0x1cd8 <__fp_pscB> - 1ad4: 40 f0 brcs .+16 ; 0x1ae6 <__divsf3+0x18> - 1ad6: f9 d0 rcall .+498 ; 0x1cca <__fp_pscA> - 1ad8: 30 f0 brcs .+12 ; 0x1ae6 <__divsf3+0x18> - 1ada: 21 f4 brne .+8 ; 0x1ae4 <__divsf3+0x16> - 1adc: 5f 3f cpi r21, 0xFF ; 255 - 1ade: 19 f0 breq .+6 ; 0x1ae6 <__divsf3+0x18> - 1ae0: eb c0 rjmp .+470 ; 0x1cb8 <__fp_inf> - 1ae2: 51 11 cpse r21, r1 - 1ae4: 34 c1 rjmp .+616 ; 0x1d4e <__fp_szero> - 1ae6: ee c0 rjmp .+476 ; 0x1cc4 <__fp_nan> - -00001ae8 <__divsf3x>: - 1ae8: 0f d1 rcall .+542 ; 0x1d08 <__fp_split3> - 1aea: 98 f3 brcs .-26 ; 0x1ad2 <__divsf3+0x4> - -00001aec <__divsf3_pse>: - 1aec: 99 23 and r25, r25 - 1aee: c9 f3 breq .-14 ; 0x1ae2 <__divsf3+0x14> - 1af0: 55 23 and r21, r21 - 1af2: b1 f3 breq .-20 ; 0x1ae0 <__divsf3+0x12> - 1af4: 95 1b sub r25, r21 - 1af6: 55 0b sbc r21, r21 - 1af8: bb 27 eor r27, r27 - 1afa: aa 27 eor r26, r26 - 1afc: 62 17 cp r22, r18 - 1afe: 73 07 cpc r23, r19 - 1b00: 84 07 cpc r24, r20 - 1b02: 38 f0 brcs .+14 ; 0x1b12 <__divsf3_pse+0x26> - 1b04: 9f 5f subi r25, 0xFF ; 255 - 1b06: 5f 4f sbci r21, 0xFF ; 255 - 1b08: 22 0f add r18, r18 - 1b0a: 33 1f adc r19, r19 - 1b0c: 44 1f adc r20, r20 - 1b0e: aa 1f adc r26, r26 - 1b10: a9 f3 breq .-22 ; 0x1afc <__divsf3_pse+0x10> - 1b12: 33 d0 rcall .+102 ; 0x1b7a <__divsf3_pse+0x8e> - 1b14: 0e 2e mov r0, r30 - 1b16: 3a f0 brmi .+14 ; 0x1b26 <__divsf3_pse+0x3a> - 1b18: e0 e8 ldi r30, 0x80 ; 128 - 1b1a: 30 d0 rcall .+96 ; 0x1b7c <__divsf3_pse+0x90> - 1b1c: 91 50 subi r25, 0x01 ; 1 - 1b1e: 50 40 sbci r21, 0x00 ; 0 - 1b20: e6 95 lsr r30 - 1b22: 00 1c adc r0, r0 - 1b24: ca f7 brpl .-14 ; 0x1b18 <__divsf3_pse+0x2c> - 1b26: 29 d0 rcall .+82 ; 0x1b7a <__divsf3_pse+0x8e> - 1b28: fe 2f mov r31, r30 - 1b2a: 27 d0 rcall .+78 ; 0x1b7a <__divsf3_pse+0x8e> - 1b2c: 66 0f add r22, r22 - 1b2e: 77 1f adc r23, r23 - 1b30: 88 1f adc r24, r24 - 1b32: bb 1f adc r27, r27 - 1b34: 26 17 cp r18, r22 - 1b36: 37 07 cpc r19, r23 - 1b38: 48 07 cpc r20, r24 - 1b3a: ab 07 cpc r26, r27 - 1b3c: b0 e8 ldi r27, 0x80 ; 128 - 1b3e: 09 f0 breq .+2 ; 0x1b42 <__divsf3_pse+0x56> - 1b40: bb 0b sbc r27, r27 - 1b42: 80 2d mov r24, r0 - 1b44: bf 01 movw r22, r30 - 1b46: ff 27 eor r31, r31 - 1b48: 93 58 subi r25, 0x83 ; 131 - 1b4a: 5f 4f sbci r21, 0xFF ; 255 - 1b4c: 2a f0 brmi .+10 ; 0x1b58 <__divsf3_pse+0x6c> - 1b4e: 9e 3f cpi r25, 0xFE ; 254 - 1b50: 51 05 cpc r21, r1 - 1b52: 68 f0 brcs .+26 ; 0x1b6e <__divsf3_pse+0x82> - 1b54: b1 c0 rjmp .+354 ; 0x1cb8 <__fp_inf> - 1b56: fb c0 rjmp .+502 ; 0x1d4e <__fp_szero> - 1b58: 5f 3f cpi r21, 0xFF ; 255 - 1b5a: ec f3 brlt .-6 ; 0x1b56 <__divsf3_pse+0x6a> - 1b5c: 98 3e cpi r25, 0xE8 ; 232 - 1b5e: dc f3 brlt .-10 ; 0x1b56 <__divsf3_pse+0x6a> - 1b60: 86 95 lsr r24 - 1b62: 77 95 ror r23 - 1b64: 67 95 ror r22 - 1b66: b7 95 ror r27 - 1b68: f7 95 ror r31 - 1b6a: 9f 5f subi r25, 0xFF ; 255 - 1b6c: c9 f7 brne .-14 ; 0x1b60 <__divsf3_pse+0x74> - 1b6e: 88 0f add r24, r24 - 1b70: 91 1d adc r25, r1 - 1b72: 96 95 lsr r25 - 1b74: 87 95 ror r24 - 1b76: 97 f9 bld r25, 7 - 1b78: 08 95 ret - 1b7a: e1 e0 ldi r30, 0x01 ; 1 - 1b7c: 66 0f add r22, r22 - 1b7e: 77 1f adc r23, r23 - 1b80: 88 1f adc r24, r24 - 1b82: bb 1f adc r27, r27 - 1b84: 62 17 cp r22, r18 - 1b86: 73 07 cpc r23, r19 - 1b88: 84 07 cpc r24, r20 - 1b8a: ba 07 cpc r27, r26 - 1b8c: 20 f0 brcs .+8 ; 0x1b96 <__divsf3_pse+0xaa> - 1b8e: 62 1b sub r22, r18 - 1b90: 73 0b sbc r23, r19 - 1b92: 84 0b sbc r24, r20 - 1b94: ba 0b sbc r27, r26 - 1b96: ee 1f adc r30, r30 - 1b98: 88 f7 brcc .-30 ; 0x1b7c <__divsf3_pse+0x90> - 1b9a: e0 95 com r30 - 1b9c: 08 95 ret - -00001b9e <__fixunssfsi>: - 1b9e: bc d0 rcall .+376 ; 0x1d18 <__fp_splitA> - 1ba0: 88 f0 brcs .+34 ; 0x1bc4 <__fixunssfsi+0x26> - 1ba2: 9f 57 subi r25, 0x7F ; 127 - 1ba4: 90 f0 brcs .+36 ; 0x1bca <__fixunssfsi+0x2c> - 1ba6: b9 2f mov r27, r25 - 1ba8: 99 27 eor r25, r25 - 1baa: b7 51 subi r27, 0x17 ; 23 - 1bac: a0 f0 brcs .+40 ; 0x1bd6 <__fixunssfsi+0x38> - 1bae: d1 f0 breq .+52 ; 0x1be4 <__fixunssfsi+0x46> - 1bb0: 66 0f add r22, r22 - 1bb2: 77 1f adc r23, r23 - 1bb4: 88 1f adc r24, r24 - 1bb6: 99 1f adc r25, r25 - 1bb8: 1a f0 brmi .+6 ; 0x1bc0 <__fixunssfsi+0x22> - 1bba: ba 95 dec r27 - 1bbc: c9 f7 brne .-14 ; 0x1bb0 <__fixunssfsi+0x12> - 1bbe: 12 c0 rjmp .+36 ; 0x1be4 <__fixunssfsi+0x46> - 1bc0: b1 30 cpi r27, 0x01 ; 1 - 1bc2: 81 f0 breq .+32 ; 0x1be4 <__fixunssfsi+0x46> - 1bc4: c3 d0 rcall .+390 ; 0x1d4c <__fp_zero> - 1bc6: b1 e0 ldi r27, 0x01 ; 1 - 1bc8: 08 95 ret - 1bca: c0 c0 rjmp .+384 ; 0x1d4c <__fp_zero> - 1bcc: 67 2f mov r22, r23 - 1bce: 78 2f mov r23, r24 - 1bd0: 88 27 eor r24, r24 - 1bd2: b8 5f subi r27, 0xF8 ; 248 - 1bd4: 39 f0 breq .+14 ; 0x1be4 <__fixunssfsi+0x46> - 1bd6: b9 3f cpi r27, 0xF9 ; 249 - 1bd8: cc f3 brlt .-14 ; 0x1bcc <__fixunssfsi+0x2e> - 1bda: 86 95 lsr r24 - 1bdc: 77 95 ror r23 - 1bde: 67 95 ror r22 - 1be0: b3 95 inc r27 - 1be2: d9 f7 brne .-10 ; 0x1bda <__fixunssfsi+0x3c> - 1be4: 3e f4 brtc .+14 ; 0x1bf4 <__fixunssfsi+0x56> - 1be6: 90 95 com r25 - 1be8: 80 95 com r24 - 1bea: 70 95 com r23 - 1bec: 61 95 neg r22 - 1bee: 7f 4f sbci r23, 0xFF ; 255 - 1bf0: 8f 4f sbci r24, 0xFF ; 255 - 1bf2: 9f 4f sbci r25, 0xFF ; 255 - 1bf4: 08 95 ret - -00001bf6 <__floatunsisf>: - 1bf6: e8 94 clt - 1bf8: 09 c0 rjmp .+18 ; 0x1c0c <__floatsisf+0x12> - -00001bfa <__floatsisf>: - 1bfa: 97 fb bst r25, 7 - 1bfc: 3e f4 brtc .+14 ; 0x1c0c <__floatsisf+0x12> - 1bfe: 90 95 com r25 - 1c00: 80 95 com r24 - 1c02: 70 95 com r23 - 1c04: 61 95 neg r22 - 1c06: 7f 4f sbci r23, 0xFF ; 255 - 1c08: 8f 4f sbci r24, 0xFF ; 255 - 1c0a: 9f 4f sbci r25, 0xFF ; 255 - 1c0c: 99 23 and r25, r25 - 1c0e: a9 f0 breq .+42 ; 0x1c3a <__floatsisf+0x40> - 1c10: f9 2f mov r31, r25 - 1c12: 96 e9 ldi r25, 0x96 ; 150 - 1c14: bb 27 eor r27, r27 - 1c16: 93 95 inc r25 - 1c18: f6 95 lsr r31 - 1c1a: 87 95 ror r24 - 1c1c: 77 95 ror r23 - 1c1e: 67 95 ror r22 - 1c20: b7 95 ror r27 - 1c22: f1 11 cpse r31, r1 - 1c24: f8 cf rjmp .-16 ; 0x1c16 <__floatsisf+0x1c> - 1c26: fa f4 brpl .+62 ; 0x1c66 <__floatsisf+0x6c> - 1c28: bb 0f add r27, r27 - 1c2a: 11 f4 brne .+4 ; 0x1c30 <__floatsisf+0x36> - 1c2c: 60 ff sbrs r22, 0 - 1c2e: 1b c0 rjmp .+54 ; 0x1c66 <__floatsisf+0x6c> - 1c30: 6f 5f subi r22, 0xFF ; 255 - 1c32: 7f 4f sbci r23, 0xFF ; 255 - 1c34: 8f 4f sbci r24, 0xFF ; 255 - 1c36: 9f 4f sbci r25, 0xFF ; 255 - 1c38: 16 c0 rjmp .+44 ; 0x1c66 <__floatsisf+0x6c> - 1c3a: 88 23 and r24, r24 - 1c3c: 11 f0 breq .+4 ; 0x1c42 <__floatsisf+0x48> - 1c3e: 96 e9 ldi r25, 0x96 ; 150 - 1c40: 11 c0 rjmp .+34 ; 0x1c64 <__floatsisf+0x6a> - 1c42: 77 23 and r23, r23 - 1c44: 21 f0 breq .+8 ; 0x1c4e <__floatsisf+0x54> - 1c46: 9e e8 ldi r25, 0x8E ; 142 - 1c48: 87 2f mov r24, r23 - 1c4a: 76 2f mov r23, r22 - 1c4c: 05 c0 rjmp .+10 ; 0x1c58 <__floatsisf+0x5e> - 1c4e: 66 23 and r22, r22 - 1c50: 71 f0 breq .+28 ; 0x1c6e <__floatsisf+0x74> - 1c52: 96 e8 ldi r25, 0x86 ; 134 - 1c54: 86 2f mov r24, r22 - 1c56: 70 e0 ldi r23, 0x00 ; 0 - 1c58: 60 e0 ldi r22, 0x00 ; 0 - 1c5a: 2a f0 brmi .+10 ; 0x1c66 <__floatsisf+0x6c> - 1c5c: 9a 95 dec r25 - 1c5e: 66 0f add r22, r22 - 1c60: 77 1f adc r23, r23 - 1c62: 88 1f adc r24, r24 - 1c64: da f7 brpl .-10 ; 0x1c5c <__floatsisf+0x62> - 1c66: 88 0f add r24, r24 - 1c68: 96 95 lsr r25 - 1c6a: 87 95 ror r24 - 1c6c: 97 f9 bld r25, 7 - 1c6e: 08 95 ret - -00001c70 <__fp_cmp>: - 1c70: 99 0f add r25, r25 - 1c72: 00 08 sbc r0, r0 - 1c74: 55 0f add r21, r21 - 1c76: aa 0b sbc r26, r26 - 1c78: e0 e8 ldi r30, 0x80 ; 128 - 1c7a: fe ef ldi r31, 0xFE ; 254 - 1c7c: 16 16 cp r1, r22 - 1c7e: 17 06 cpc r1, r23 - 1c80: e8 07 cpc r30, r24 - 1c82: f9 07 cpc r31, r25 - 1c84: c0 f0 brcs .+48 ; 0x1cb6 <__fp_cmp+0x46> - 1c86: 12 16 cp r1, r18 - 1c88: 13 06 cpc r1, r19 - 1c8a: e4 07 cpc r30, r20 - 1c8c: f5 07 cpc r31, r21 - 1c8e: 98 f0 brcs .+38 ; 0x1cb6 <__fp_cmp+0x46> - 1c90: 62 1b sub r22, r18 - 1c92: 73 0b sbc r23, r19 - 1c94: 84 0b sbc r24, r20 - 1c96: 95 0b sbc r25, r21 - 1c98: 39 f4 brne .+14 ; 0x1ca8 <__fp_cmp+0x38> - 1c9a: 0a 26 eor r0, r26 - 1c9c: 61 f0 breq .+24 ; 0x1cb6 <__fp_cmp+0x46> - 1c9e: 23 2b or r18, r19 - 1ca0: 24 2b or r18, r20 - 1ca2: 25 2b or r18, r21 - 1ca4: 21 f4 brne .+8 ; 0x1cae <__fp_cmp+0x3e> - 1ca6: 08 95 ret - 1ca8: 0a 26 eor r0, r26 - 1caa: 09 f4 brne .+2 ; 0x1cae <__fp_cmp+0x3e> - 1cac: a1 40 sbci r26, 0x01 ; 1 - 1cae: a6 95 lsr r26 - 1cb0: 8f ef ldi r24, 0xFF ; 255 - 1cb2: 81 1d adc r24, r1 - 1cb4: 81 1d adc r24, r1 - 1cb6: 08 95 ret - -00001cb8 <__fp_inf>: - 1cb8: 97 f9 bld r25, 7 - 1cba: 9f 67 ori r25, 0x7F ; 127 - 1cbc: 80 e8 ldi r24, 0x80 ; 128 - 1cbe: 70 e0 ldi r23, 0x00 ; 0 - 1cc0: 60 e0 ldi r22, 0x00 ; 0 - 1cc2: 08 95 ret - -00001cc4 <__fp_nan>: - 1cc4: 9f ef ldi r25, 0xFF ; 255 - 1cc6: 80 ec ldi r24, 0xC0 ; 192 - 1cc8: 08 95 ret - -00001cca <__fp_pscA>: - 1cca: 00 24 eor r0, r0 - 1ccc: 0a 94 dec r0 - 1cce: 16 16 cp r1, r22 - 1cd0: 17 06 cpc r1, r23 - 1cd2: 18 06 cpc r1, r24 - 1cd4: 09 06 cpc r0, r25 - 1cd6: 08 95 ret - -00001cd8 <__fp_pscB>: - 1cd8: 00 24 eor r0, r0 - 1cda: 0a 94 dec r0 - 1cdc: 12 16 cp r1, r18 - 1cde: 13 06 cpc r1, r19 - 1ce0: 14 06 cpc r1, r20 - 1ce2: 05 06 cpc r0, r21 - 1ce4: 08 95 ret - -00001ce6 <__fp_round>: - 1ce6: 09 2e mov r0, r25 - 1ce8: 03 94 inc r0 - 1cea: 00 0c add r0, r0 - 1cec: 11 f4 brne .+4 ; 0x1cf2 <__fp_round+0xc> - 1cee: 88 23 and r24, r24 - 1cf0: 52 f0 brmi .+20 ; 0x1d06 <__fp_round+0x20> - 1cf2: bb 0f add r27, r27 - 1cf4: 40 f4 brcc .+16 ; 0x1d06 <__fp_round+0x20> - 1cf6: bf 2b or r27, r31 - 1cf8: 11 f4 brne .+4 ; 0x1cfe <__fp_round+0x18> - 1cfa: 60 ff sbrs r22, 0 - 1cfc: 04 c0 rjmp .+8 ; 0x1d06 <__fp_round+0x20> - 1cfe: 6f 5f subi r22, 0xFF ; 255 - 1d00: 7f 4f sbci r23, 0xFF ; 255 - 1d02: 8f 4f sbci r24, 0xFF ; 255 - 1d04: 9f 4f sbci r25, 0xFF ; 255 - 1d06: 08 95 ret - -00001d08 <__fp_split3>: - 1d08: 57 fd sbrc r21, 7 - 1d0a: 90 58 subi r25, 0x80 ; 128 - 1d0c: 44 0f add r20, r20 - 1d0e: 55 1f adc r21, r21 - 1d10: 59 f0 breq .+22 ; 0x1d28 <__fp_splitA+0x10> - 1d12: 5f 3f cpi r21, 0xFF ; 255 - 1d14: 71 f0 breq .+28 ; 0x1d32 <__fp_splitA+0x1a> - 1d16: 47 95 ror r20 - -00001d18 <__fp_splitA>: - 1d18: 88 0f add r24, r24 - 1d1a: 97 fb bst r25, 7 - 1d1c: 99 1f adc r25, r25 - 1d1e: 61 f0 breq .+24 ; 0x1d38 <__fp_splitA+0x20> - 1d20: 9f 3f cpi r25, 0xFF ; 255 - 1d22: 79 f0 breq .+30 ; 0x1d42 <__fp_splitA+0x2a> - 1d24: 87 95 ror r24 + 1a6a: 08 95 ret + +00001a6c <__subsf3>: + 1a6c: 50 58 subi r21, 0x80 ; 128 + +00001a6e <__addsf3>: + 1a6e: bb 27 eor r27, r27 + 1a70: aa 27 eor r26, r26 + 1a72: 0e d0 rcall .+28 ; 0x1a90 <__addsf3x> + 1a74: 70 c1 rjmp .+736 ; 0x1d56 <__fp_round> + 1a76: 61 d1 rcall .+706 ; 0x1d3a <__fp_pscA> + 1a78: 30 f0 brcs .+12 ; 0x1a86 <__addsf3+0x18> + 1a7a: 66 d1 rcall .+716 ; 0x1d48 <__fp_pscB> + 1a7c: 20 f0 brcs .+8 ; 0x1a86 <__addsf3+0x18> + 1a7e: 31 f4 brne .+12 ; 0x1a8c <__addsf3+0x1e> + 1a80: 9f 3f cpi r25, 0xFF ; 255 + 1a82: 11 f4 brne .+4 ; 0x1a88 <__addsf3+0x1a> + 1a84: 1e f4 brtc .+6 ; 0x1a8c <__addsf3+0x1e> + 1a86: 56 c1 rjmp .+684 ; 0x1d34 <__fp_nan> + 1a88: 0e f4 brtc .+2 ; 0x1a8c <__addsf3+0x1e> + 1a8a: e0 95 com r30 + 1a8c: e7 fb bst r30, 7 + 1a8e: 4c c1 rjmp .+664 ; 0x1d28 <__fp_inf> + +00001a90 <__addsf3x>: + 1a90: e9 2f mov r30, r25 + 1a92: 72 d1 rcall .+740 ; 0x1d78 <__fp_split3> + 1a94: 80 f3 brcs .-32 ; 0x1a76 <__addsf3+0x8> + 1a96: ba 17 cp r27, r26 + 1a98: 62 07 cpc r22, r18 + 1a9a: 73 07 cpc r23, r19 + 1a9c: 84 07 cpc r24, r20 + 1a9e: 95 07 cpc r25, r21 + 1aa0: 18 f0 brcs .+6 ; 0x1aa8 <__addsf3x+0x18> + 1aa2: 71 f4 brne .+28 ; 0x1ac0 <__addsf3x+0x30> + 1aa4: 9e f5 brtc .+102 ; 0x1b0c <__addsf3x+0x7c> + 1aa6: 8a c1 rjmp .+788 ; 0x1dbc <__fp_zero> + 1aa8: 0e f4 brtc .+2 ; 0x1aac <__addsf3x+0x1c> + 1aaa: e0 95 com r30 + 1aac: 0b 2e mov r0, r27 + 1aae: ba 2f mov r27, r26 + 1ab0: a0 2d mov r26, r0 + 1ab2: 0b 01 movw r0, r22 + 1ab4: b9 01 movw r22, r18 + 1ab6: 90 01 movw r18, r0 + 1ab8: 0c 01 movw r0, r24 + 1aba: ca 01 movw r24, r20 + 1abc: a0 01 movw r20, r0 + 1abe: 11 24 eor r1, r1 + 1ac0: ff 27 eor r31, r31 + 1ac2: 59 1b sub r21, r25 + 1ac4: 99 f0 breq .+38 ; 0x1aec <__addsf3x+0x5c> + 1ac6: 59 3f cpi r21, 0xF9 ; 249 + 1ac8: 50 f4 brcc .+20 ; 0x1ade <__addsf3x+0x4e> + 1aca: 50 3e cpi r21, 0xE0 ; 224 + 1acc: 68 f1 brcs .+90 ; 0x1b28 <__addsf3x+0x98> + 1ace: 1a 16 cp r1, r26 + 1ad0: f0 40 sbci r31, 0x00 ; 0 + 1ad2: a2 2f mov r26, r18 + 1ad4: 23 2f mov r18, r19 + 1ad6: 34 2f mov r19, r20 + 1ad8: 44 27 eor r20, r20 + 1ada: 58 5f subi r21, 0xF8 ; 248 + 1adc: f3 cf rjmp .-26 ; 0x1ac4 <__addsf3x+0x34> + 1ade: 46 95 lsr r20 + 1ae0: 37 95 ror r19 + 1ae2: 27 95 ror r18 + 1ae4: a7 95 ror r26 + 1ae6: f0 40 sbci r31, 0x00 ; 0 + 1ae8: 53 95 inc r21 + 1aea: c9 f7 brne .-14 ; 0x1ade <__addsf3x+0x4e> + 1aec: 7e f4 brtc .+30 ; 0x1b0c <__addsf3x+0x7c> + 1aee: 1f 16 cp r1, r31 + 1af0: ba 0b sbc r27, r26 + 1af2: 62 0b sbc r22, r18 + 1af4: 73 0b sbc r23, r19 + 1af6: 84 0b sbc r24, r20 + 1af8: ba f0 brmi .+46 ; 0x1b28 <__addsf3x+0x98> + 1afa: 91 50 subi r25, 0x01 ; 1 + 1afc: a1 f0 breq .+40 ; 0x1b26 <__addsf3x+0x96> + 1afe: ff 0f add r31, r31 + 1b00: bb 1f adc r27, r27 + 1b02: 66 1f adc r22, r22 + 1b04: 77 1f adc r23, r23 + 1b06: 88 1f adc r24, r24 + 1b08: c2 f7 brpl .-16 ; 0x1afa <__addsf3x+0x6a> + 1b0a: 0e c0 rjmp .+28 ; 0x1b28 <__addsf3x+0x98> + 1b0c: ba 0f add r27, r26 + 1b0e: 62 1f adc r22, r18 + 1b10: 73 1f adc r23, r19 + 1b12: 84 1f adc r24, r20 + 1b14: 48 f4 brcc .+18 ; 0x1b28 <__addsf3x+0x98> + 1b16: 87 95 ror r24 + 1b18: 77 95 ror r23 + 1b1a: 67 95 ror r22 + 1b1c: b7 95 ror r27 + 1b1e: f7 95 ror r31 + 1b20: 9e 3f cpi r25, 0xFE ; 254 + 1b22: 08 f0 brcs .+2 ; 0x1b26 <__addsf3x+0x96> + 1b24: b3 cf rjmp .-154 ; 0x1a8c <__addsf3+0x1e> + 1b26: 93 95 inc r25 + 1b28: 88 0f add r24, r24 + 1b2a: 08 f0 brcs .+2 ; 0x1b2e <__addsf3x+0x9e> + 1b2c: 99 27 eor r25, r25 + 1b2e: ee 0f add r30, r30 + 1b30: 97 95 ror r25 + 1b32: 87 95 ror r24 + 1b34: 08 95 ret + +00001b36 <__cmpsf2>: + 1b36: d4 d0 rcall .+424 ; 0x1ce0 <__fp_cmp> + 1b38: 08 f4 brcc .+2 ; 0x1b3c <__cmpsf2+0x6> + 1b3a: 81 e0 ldi r24, 0x01 ; 1 + 1b3c: 08 95 ret + +00001b3e <__divsf3>: + 1b3e: 0c d0 rcall .+24 ; 0x1b58 <__divsf3x> + 1b40: 0a c1 rjmp .+532 ; 0x1d56 <__fp_round> + 1b42: 02 d1 rcall .+516 ; 0x1d48 <__fp_pscB> + 1b44: 40 f0 brcs .+16 ; 0x1b56 <__divsf3+0x18> + 1b46: f9 d0 rcall .+498 ; 0x1d3a <__fp_pscA> + 1b48: 30 f0 brcs .+12 ; 0x1b56 <__divsf3+0x18> + 1b4a: 21 f4 brne .+8 ; 0x1b54 <__divsf3+0x16> + 1b4c: 5f 3f cpi r21, 0xFF ; 255 + 1b4e: 19 f0 breq .+6 ; 0x1b56 <__divsf3+0x18> + 1b50: eb c0 rjmp .+470 ; 0x1d28 <__fp_inf> + 1b52: 51 11 cpse r21, r1 + 1b54: 34 c1 rjmp .+616 ; 0x1dbe <__fp_szero> + 1b56: ee c0 rjmp .+476 ; 0x1d34 <__fp_nan> + +00001b58 <__divsf3x>: + 1b58: 0f d1 rcall .+542 ; 0x1d78 <__fp_split3> + 1b5a: 98 f3 brcs .-26 ; 0x1b42 <__divsf3+0x4> + +00001b5c <__divsf3_pse>: + 1b5c: 99 23 and r25, r25 + 1b5e: c9 f3 breq .-14 ; 0x1b52 <__divsf3+0x14> + 1b60: 55 23 and r21, r21 + 1b62: b1 f3 breq .-20 ; 0x1b50 <__divsf3+0x12> + 1b64: 95 1b sub r25, r21 + 1b66: 55 0b sbc r21, r21 + 1b68: bb 27 eor r27, r27 + 1b6a: aa 27 eor r26, r26 + 1b6c: 62 17 cp r22, r18 + 1b6e: 73 07 cpc r23, r19 + 1b70: 84 07 cpc r24, r20 + 1b72: 38 f0 brcs .+14 ; 0x1b82 <__divsf3_pse+0x26> + 1b74: 9f 5f subi r25, 0xFF ; 255 + 1b76: 5f 4f sbci r21, 0xFF ; 255 + 1b78: 22 0f add r18, r18 + 1b7a: 33 1f adc r19, r19 + 1b7c: 44 1f adc r20, r20 + 1b7e: aa 1f adc r26, r26 + 1b80: a9 f3 breq .-22 ; 0x1b6c <__divsf3_pse+0x10> + 1b82: 33 d0 rcall .+102 ; 0x1bea <__divsf3_pse+0x8e> + 1b84: 0e 2e mov r0, r30 + 1b86: 3a f0 brmi .+14 ; 0x1b96 <__divsf3_pse+0x3a> + 1b88: e0 e8 ldi r30, 0x80 ; 128 + 1b8a: 30 d0 rcall .+96 ; 0x1bec <__divsf3_pse+0x90> + 1b8c: 91 50 subi r25, 0x01 ; 1 + 1b8e: 50 40 sbci r21, 0x00 ; 0 + 1b90: e6 95 lsr r30 + 1b92: 00 1c adc r0, r0 + 1b94: ca f7 brpl .-14 ; 0x1b88 <__divsf3_pse+0x2c> + 1b96: 29 d0 rcall .+82 ; 0x1bea <__divsf3_pse+0x8e> + 1b98: fe 2f mov r31, r30 + 1b9a: 27 d0 rcall .+78 ; 0x1bea <__divsf3_pse+0x8e> + 1b9c: 66 0f add r22, r22 + 1b9e: 77 1f adc r23, r23 + 1ba0: 88 1f adc r24, r24 + 1ba2: bb 1f adc r27, r27 + 1ba4: 26 17 cp r18, r22 + 1ba6: 37 07 cpc r19, r23 + 1ba8: 48 07 cpc r20, r24 + 1baa: ab 07 cpc r26, r27 + 1bac: b0 e8 ldi r27, 0x80 ; 128 + 1bae: 09 f0 breq .+2 ; 0x1bb2 <__divsf3_pse+0x56> + 1bb0: bb 0b sbc r27, r27 + 1bb2: 80 2d mov r24, r0 + 1bb4: bf 01 movw r22, r30 + 1bb6: ff 27 eor r31, r31 + 1bb8: 93 58 subi r25, 0x83 ; 131 + 1bba: 5f 4f sbci r21, 0xFF ; 255 + 1bbc: 2a f0 brmi .+10 ; 0x1bc8 <__divsf3_pse+0x6c> + 1bbe: 9e 3f cpi r25, 0xFE ; 254 + 1bc0: 51 05 cpc r21, r1 + 1bc2: 68 f0 brcs .+26 ; 0x1bde <__divsf3_pse+0x82> + 1bc4: b1 c0 rjmp .+354 ; 0x1d28 <__fp_inf> + 1bc6: fb c0 rjmp .+502 ; 0x1dbe <__fp_szero> + 1bc8: 5f 3f cpi r21, 0xFF ; 255 + 1bca: ec f3 brlt .-6 ; 0x1bc6 <__divsf3_pse+0x6a> + 1bcc: 98 3e cpi r25, 0xE8 ; 232 + 1bce: dc f3 brlt .-10 ; 0x1bc6 <__divsf3_pse+0x6a> + 1bd0: 86 95 lsr r24 + 1bd2: 77 95 ror r23 + 1bd4: 67 95 ror r22 + 1bd6: b7 95 ror r27 + 1bd8: f7 95 ror r31 + 1bda: 9f 5f subi r25, 0xFF ; 255 + 1bdc: c9 f7 brne .-14 ; 0x1bd0 <__divsf3_pse+0x74> + 1bde: 88 0f add r24, r24 + 1be0: 91 1d adc r25, r1 + 1be2: 96 95 lsr r25 + 1be4: 87 95 ror r24 + 1be6: 97 f9 bld r25, 7 + 1be8: 08 95 ret + 1bea: e1 e0 ldi r30, 0x01 ; 1 + 1bec: 66 0f add r22, r22 + 1bee: 77 1f adc r23, r23 + 1bf0: 88 1f adc r24, r24 + 1bf2: bb 1f adc r27, r27 + 1bf4: 62 17 cp r22, r18 + 1bf6: 73 07 cpc r23, r19 + 1bf8: 84 07 cpc r24, r20 + 1bfa: ba 07 cpc r27, r26 + 1bfc: 20 f0 brcs .+8 ; 0x1c06 <__divsf3_pse+0xaa> + 1bfe: 62 1b sub r22, r18 + 1c00: 73 0b sbc r23, r19 + 1c02: 84 0b sbc r24, r20 + 1c04: ba 0b sbc r27, r26 + 1c06: ee 1f adc r30, r30 + 1c08: 88 f7 brcc .-30 ; 0x1bec <__divsf3_pse+0x90> + 1c0a: e0 95 com r30 + 1c0c: 08 95 ret + +00001c0e <__fixunssfsi>: + 1c0e: bc d0 rcall .+376 ; 0x1d88 <__fp_splitA> + 1c10: 88 f0 brcs .+34 ; 0x1c34 <__fixunssfsi+0x26> + 1c12: 9f 57 subi r25, 0x7F ; 127 + 1c14: 90 f0 brcs .+36 ; 0x1c3a <__fixunssfsi+0x2c> + 1c16: b9 2f mov r27, r25 + 1c18: 99 27 eor r25, r25 + 1c1a: b7 51 subi r27, 0x17 ; 23 + 1c1c: a0 f0 brcs .+40 ; 0x1c46 <__fixunssfsi+0x38> + 1c1e: d1 f0 breq .+52 ; 0x1c54 <__fixunssfsi+0x46> + 1c20: 66 0f add r22, r22 + 1c22: 77 1f adc r23, r23 + 1c24: 88 1f adc r24, r24 + 1c26: 99 1f adc r25, r25 + 1c28: 1a f0 brmi .+6 ; 0x1c30 <__fixunssfsi+0x22> + 1c2a: ba 95 dec r27 + 1c2c: c9 f7 brne .-14 ; 0x1c20 <__fixunssfsi+0x12> + 1c2e: 12 c0 rjmp .+36 ; 0x1c54 <__fixunssfsi+0x46> + 1c30: b1 30 cpi r27, 0x01 ; 1 + 1c32: 81 f0 breq .+32 ; 0x1c54 <__fixunssfsi+0x46> + 1c34: c3 d0 rcall .+390 ; 0x1dbc <__fp_zero> + 1c36: b1 e0 ldi r27, 0x01 ; 1 + 1c38: 08 95 ret + 1c3a: c0 c0 rjmp .+384 ; 0x1dbc <__fp_zero> + 1c3c: 67 2f mov r22, r23 + 1c3e: 78 2f mov r23, r24 + 1c40: 88 27 eor r24, r24 + 1c42: b8 5f subi r27, 0xF8 ; 248 + 1c44: 39 f0 breq .+14 ; 0x1c54 <__fixunssfsi+0x46> + 1c46: b9 3f cpi r27, 0xF9 ; 249 + 1c48: cc f3 brlt .-14 ; 0x1c3c <__fixunssfsi+0x2e> + 1c4a: 86 95 lsr r24 + 1c4c: 77 95 ror r23 + 1c4e: 67 95 ror r22 + 1c50: b3 95 inc r27 + 1c52: d9 f7 brne .-10 ; 0x1c4a <__fixunssfsi+0x3c> + 1c54: 3e f4 brtc .+14 ; 0x1c64 <__fixunssfsi+0x56> + 1c56: 90 95 com r25 + 1c58: 80 95 com r24 + 1c5a: 70 95 com r23 + 1c5c: 61 95 neg r22 + 1c5e: 7f 4f sbci r23, 0xFF ; 255 + 1c60: 8f 4f sbci r24, 0xFF ; 255 + 1c62: 9f 4f sbci r25, 0xFF ; 255 + 1c64: 08 95 ret + +00001c66 <__floatunsisf>: + 1c66: e8 94 clt + 1c68: 09 c0 rjmp .+18 ; 0x1c7c <__floatsisf+0x12> + +00001c6a <__floatsisf>: + 1c6a: 97 fb bst r25, 7 + 1c6c: 3e f4 brtc .+14 ; 0x1c7c <__floatsisf+0x12> + 1c6e: 90 95 com r25 + 1c70: 80 95 com r24 + 1c72: 70 95 com r23 + 1c74: 61 95 neg r22 + 1c76: 7f 4f sbci r23, 0xFF ; 255 + 1c78: 8f 4f sbci r24, 0xFF ; 255 + 1c7a: 9f 4f sbci r25, 0xFF ; 255 + 1c7c: 99 23 and r25, r25 + 1c7e: a9 f0 breq .+42 ; 0x1caa <__floatsisf+0x40> + 1c80: f9 2f mov r31, r25 + 1c82: 96 e9 ldi r25, 0x96 ; 150 + 1c84: bb 27 eor r27, r27 + 1c86: 93 95 inc r25 + 1c88: f6 95 lsr r31 + 1c8a: 87 95 ror r24 + 1c8c: 77 95 ror r23 + 1c8e: 67 95 ror r22 + 1c90: b7 95 ror r27 + 1c92: f1 11 cpse r31, r1 + 1c94: f8 cf rjmp .-16 ; 0x1c86 <__floatsisf+0x1c> + 1c96: fa f4 brpl .+62 ; 0x1cd6 <__floatsisf+0x6c> + 1c98: bb 0f add r27, r27 + 1c9a: 11 f4 brne .+4 ; 0x1ca0 <__floatsisf+0x36> + 1c9c: 60 ff sbrs r22, 0 + 1c9e: 1b c0 rjmp .+54 ; 0x1cd6 <__floatsisf+0x6c> + 1ca0: 6f 5f subi r22, 0xFF ; 255 + 1ca2: 7f 4f sbci r23, 0xFF ; 255 + 1ca4: 8f 4f sbci r24, 0xFF ; 255 + 1ca6: 9f 4f sbci r25, 0xFF ; 255 + 1ca8: 16 c0 rjmp .+44 ; 0x1cd6 <__floatsisf+0x6c> + 1caa: 88 23 and r24, r24 + 1cac: 11 f0 breq .+4 ; 0x1cb2 <__floatsisf+0x48> + 1cae: 96 e9 ldi r25, 0x96 ; 150 + 1cb0: 11 c0 rjmp .+34 ; 0x1cd4 <__floatsisf+0x6a> + 1cb2: 77 23 and r23, r23 + 1cb4: 21 f0 breq .+8 ; 0x1cbe <__floatsisf+0x54> + 1cb6: 9e e8 ldi r25, 0x8E ; 142 + 1cb8: 87 2f mov r24, r23 + 1cba: 76 2f mov r23, r22 + 1cbc: 05 c0 rjmp .+10 ; 0x1cc8 <__floatsisf+0x5e> + 1cbe: 66 23 and r22, r22 + 1cc0: 71 f0 breq .+28 ; 0x1cde <__floatsisf+0x74> + 1cc2: 96 e8 ldi r25, 0x86 ; 134 + 1cc4: 86 2f mov r24, r22 + 1cc6: 70 e0 ldi r23, 0x00 ; 0 + 1cc8: 60 e0 ldi r22, 0x00 ; 0 + 1cca: 2a f0 brmi .+10 ; 0x1cd6 <__floatsisf+0x6c> + 1ccc: 9a 95 dec r25 + 1cce: 66 0f add r22, r22 + 1cd0: 77 1f adc r23, r23 + 1cd2: 88 1f adc r24, r24 + 1cd4: da f7 brpl .-10 ; 0x1ccc <__floatsisf+0x62> + 1cd6: 88 0f add r24, r24 + 1cd8: 96 95 lsr r25 + 1cda: 87 95 ror r24 + 1cdc: 97 f9 bld r25, 7 + 1cde: 08 95 ret + +00001ce0 <__fp_cmp>: + 1ce0: 99 0f add r25, r25 + 1ce2: 00 08 sbc r0, r0 + 1ce4: 55 0f add r21, r21 + 1ce6: aa 0b sbc r26, r26 + 1ce8: e0 e8 ldi r30, 0x80 ; 128 + 1cea: fe ef ldi r31, 0xFE ; 254 + 1cec: 16 16 cp r1, r22 + 1cee: 17 06 cpc r1, r23 + 1cf0: e8 07 cpc r30, r24 + 1cf2: f9 07 cpc r31, r25 + 1cf4: c0 f0 brcs .+48 ; 0x1d26 <__fp_cmp+0x46> + 1cf6: 12 16 cp r1, r18 + 1cf8: 13 06 cpc r1, r19 + 1cfa: e4 07 cpc r30, r20 + 1cfc: f5 07 cpc r31, r21 + 1cfe: 98 f0 brcs .+38 ; 0x1d26 <__fp_cmp+0x46> + 1d00: 62 1b sub r22, r18 + 1d02: 73 0b sbc r23, r19 + 1d04: 84 0b sbc r24, r20 + 1d06: 95 0b sbc r25, r21 + 1d08: 39 f4 brne .+14 ; 0x1d18 <__fp_cmp+0x38> + 1d0a: 0a 26 eor r0, r26 + 1d0c: 61 f0 breq .+24 ; 0x1d26 <__fp_cmp+0x46> + 1d0e: 23 2b or r18, r19 + 1d10: 24 2b or r18, r20 + 1d12: 25 2b or r18, r21 + 1d14: 21 f4 brne .+8 ; 0x1d1e <__fp_cmp+0x3e> + 1d16: 08 95 ret + 1d18: 0a 26 eor r0, r26 + 1d1a: 09 f4 brne .+2 ; 0x1d1e <__fp_cmp+0x3e> + 1d1c: a1 40 sbci r26, 0x01 ; 1 + 1d1e: a6 95 lsr r26 + 1d20: 8f ef ldi r24, 0xFF ; 255 + 1d22: 81 1d adc r24, r1 + 1d24: 81 1d adc r24, r1 1d26: 08 95 ret - 1d28: 12 16 cp r1, r18 - 1d2a: 13 06 cpc r1, r19 - 1d2c: 14 06 cpc r1, r20 - 1d2e: 55 1f adc r21, r21 - 1d30: f2 cf rjmp .-28 ; 0x1d16 <__fp_split3+0xe> - 1d32: 46 95 lsr r20 - 1d34: f1 df rcall .-30 ; 0x1d18 <__fp_splitA> - 1d36: 08 c0 rjmp .+16 ; 0x1d48 <__fp_splitA+0x30> - 1d38: 16 16 cp r1, r22 - 1d3a: 17 06 cpc r1, r23 - 1d3c: 18 06 cpc r1, r24 - 1d3e: 99 1f adc r25, r25 - 1d40: f1 cf rjmp .-30 ; 0x1d24 <__fp_splitA+0xc> - 1d42: 86 95 lsr r24 - 1d44: 71 05 cpc r23, r1 - 1d46: 61 05 cpc r22, r1 - 1d48: 08 94 sec - 1d4a: 08 95 ret - -00001d4c <__fp_zero>: - 1d4c: e8 94 clt - -00001d4e <__fp_szero>: - 1d4e: bb 27 eor r27, r27 - 1d50: 66 27 eor r22, r22 - 1d52: 77 27 eor r23, r23 - 1d54: cb 01 movw r24, r22 - 1d56: 97 f9 bld r25, 7 - 1d58: 08 95 ret - -00001d5a <__gesf2>: - 1d5a: 8a df rcall .-236 ; 0x1c70 <__fp_cmp> - 1d5c: 08 f4 brcc .+2 ; 0x1d60 <__gesf2+0x6> - 1d5e: 8f ef ldi r24, 0xFF ; 255 - 1d60: 08 95 ret - -00001d62 <__mulhi3>: - 1d62: 55 27 eor r21, r21 - 1d64: 00 24 eor r0, r0 - -00001d66 <__mulhi3_loop>: - 1d66: 80 ff sbrs r24, 0 - 1d68: 02 c0 rjmp .+4 ; 0x1d6e <__mulhi3_skip1> - 1d6a: 06 0e add r0, r22 - 1d6c: 57 1f adc r21, r23 - -00001d6e <__mulhi3_skip1>: - 1d6e: 66 0f add r22, r22 - 1d70: 77 1f adc r23, r23 - 1d72: 61 15 cp r22, r1 - 1d74: 71 05 cpc r23, r1 - 1d76: 21 f0 breq .+8 ; 0x1d80 <__mulhi3_exit> - 1d78: 96 95 lsr r25 - 1d7a: 87 95 ror r24 - 1d7c: 00 97 sbiw r24, 0x00 ; 0 - 1d7e: 99 f7 brne .-26 ; 0x1d66 <__mulhi3_loop> - -00001d80 <__mulhi3_exit>: - 1d80: 95 2f mov r25, r21 - 1d82: 80 2d mov r24, r0 - 1d84: 08 95 ret - -00001d86 <__udivmodhi4>: - 1d86: aa 1b sub r26, r26 - 1d88: bb 1b sub r27, r27 - 1d8a: 51 e1 ldi r21, 0x11 ; 17 - 1d8c: 07 c0 rjmp .+14 ; 0x1d9c <__udivmodhi4_ep> - -00001d8e <__udivmodhi4_loop>: - 1d8e: aa 1f adc r26, r26 - 1d90: bb 1f adc r27, r27 - 1d92: a6 17 cp r26, r22 - 1d94: b7 07 cpc r27, r23 - 1d96: 10 f0 brcs .+4 ; 0x1d9c <__udivmodhi4_ep> - 1d98: a6 1b sub r26, r22 - 1d9a: b7 0b sbc r27, r23 - -00001d9c <__udivmodhi4_ep>: - 1d9c: 88 1f adc r24, r24 - 1d9e: 99 1f adc r25, r25 - 1da0: 5a 95 dec r21 - 1da2: a9 f7 brne .-22 ; 0x1d8e <__udivmodhi4_loop> - 1da4: 80 95 com r24 - 1da6: 90 95 com r25 - 1da8: bc 01 movw r22, r24 - 1daa: cd 01 movw r24, r26 - 1dac: 08 95 ret - -00001dae <__divmodhi4>: - 1dae: 97 fb bst r25, 7 - 1db0: 09 2e mov r0, r25 - 1db2: 07 26 eor r0, r23 - 1db4: 0a d0 rcall .+20 ; 0x1dca <__divmodhi4_neg1> - 1db6: 77 fd sbrc r23, 7 - 1db8: 04 d0 rcall .+8 ; 0x1dc2 <__divmodhi4_neg2> - 1dba: e5 df rcall .-54 ; 0x1d86 <__udivmodhi4> - 1dbc: 06 d0 rcall .+12 ; 0x1dca <__divmodhi4_neg1> - 1dbe: 00 20 and r0, r0 - 1dc0: 1a f4 brpl .+6 ; 0x1dc8 <__divmodhi4_exit> - -00001dc2 <__divmodhi4_neg2>: - 1dc2: 70 95 com r23 - 1dc4: 61 95 neg r22 - 1dc6: 7f 4f sbci r23, 0xFF ; 255 - -00001dc8 <__divmodhi4_exit>: + +00001d28 <__fp_inf>: + 1d28: 97 f9 bld r25, 7 + 1d2a: 9f 67 ori r25, 0x7F ; 127 + 1d2c: 80 e8 ldi r24, 0x80 ; 128 + 1d2e: 70 e0 ldi r23, 0x00 ; 0 + 1d30: 60 e0 ldi r22, 0x00 ; 0 + 1d32: 08 95 ret + +00001d34 <__fp_nan>: + 1d34: 9f ef ldi r25, 0xFF ; 255 + 1d36: 80 ec ldi r24, 0xC0 ; 192 + 1d38: 08 95 ret + +00001d3a <__fp_pscA>: + 1d3a: 00 24 eor r0, r0 + 1d3c: 0a 94 dec r0 + 1d3e: 16 16 cp r1, r22 + 1d40: 17 06 cpc r1, r23 + 1d42: 18 06 cpc r1, r24 + 1d44: 09 06 cpc r0, r25 + 1d46: 08 95 ret + +00001d48 <__fp_pscB>: + 1d48: 00 24 eor r0, r0 + 1d4a: 0a 94 dec r0 + 1d4c: 12 16 cp r1, r18 + 1d4e: 13 06 cpc r1, r19 + 1d50: 14 06 cpc r1, r20 + 1d52: 05 06 cpc r0, r21 + 1d54: 08 95 ret + +00001d56 <__fp_round>: + 1d56: 09 2e mov r0, r25 + 1d58: 03 94 inc r0 + 1d5a: 00 0c add r0, r0 + 1d5c: 11 f4 brne .+4 ; 0x1d62 <__fp_round+0xc> + 1d5e: 88 23 and r24, r24 + 1d60: 52 f0 brmi .+20 ; 0x1d76 <__fp_round+0x20> + 1d62: bb 0f add r27, r27 + 1d64: 40 f4 brcc .+16 ; 0x1d76 <__fp_round+0x20> + 1d66: bf 2b or r27, r31 + 1d68: 11 f4 brne .+4 ; 0x1d6e <__fp_round+0x18> + 1d6a: 60 ff sbrs r22, 0 + 1d6c: 04 c0 rjmp .+8 ; 0x1d76 <__fp_round+0x20> + 1d6e: 6f 5f subi r22, 0xFF ; 255 + 1d70: 7f 4f sbci r23, 0xFF ; 255 + 1d72: 8f 4f sbci r24, 0xFF ; 255 + 1d74: 9f 4f sbci r25, 0xFF ; 255 + 1d76: 08 95 ret + +00001d78 <__fp_split3>: + 1d78: 57 fd sbrc r21, 7 + 1d7a: 90 58 subi r25, 0x80 ; 128 + 1d7c: 44 0f add r20, r20 + 1d7e: 55 1f adc r21, r21 + 1d80: 59 f0 breq .+22 ; 0x1d98 <__fp_splitA+0x10> + 1d82: 5f 3f cpi r21, 0xFF ; 255 + 1d84: 71 f0 breq .+28 ; 0x1da2 <__fp_splitA+0x1a> + 1d86: 47 95 ror r20 + +00001d88 <__fp_splitA>: + 1d88: 88 0f add r24, r24 + 1d8a: 97 fb bst r25, 7 + 1d8c: 99 1f adc r25, r25 + 1d8e: 61 f0 breq .+24 ; 0x1da8 <__fp_splitA+0x20> + 1d90: 9f 3f cpi r25, 0xFF ; 255 + 1d92: 79 f0 breq .+30 ; 0x1db2 <__fp_splitA+0x2a> + 1d94: 87 95 ror r24 + 1d96: 08 95 ret + 1d98: 12 16 cp r1, r18 + 1d9a: 13 06 cpc r1, r19 + 1d9c: 14 06 cpc r1, r20 + 1d9e: 55 1f adc r21, r21 + 1da0: f2 cf rjmp .-28 ; 0x1d86 <__fp_split3+0xe> + 1da2: 46 95 lsr r20 + 1da4: f1 df rcall .-30 ; 0x1d88 <__fp_splitA> + 1da6: 08 c0 rjmp .+16 ; 0x1db8 <__fp_splitA+0x30> + 1da8: 16 16 cp r1, r22 + 1daa: 17 06 cpc r1, r23 + 1dac: 18 06 cpc r1, r24 + 1dae: 99 1f adc r25, r25 + 1db0: f1 cf rjmp .-30 ; 0x1d94 <__fp_splitA+0xc> + 1db2: 86 95 lsr r24 + 1db4: 71 05 cpc r23, r1 + 1db6: 61 05 cpc r22, r1 + 1db8: 08 94 sec + 1dba: 08 95 ret + +00001dbc <__fp_zero>: + 1dbc: e8 94 clt + +00001dbe <__fp_szero>: + 1dbe: bb 27 eor r27, r27 + 1dc0: 66 27 eor r22, r22 + 1dc2: 77 27 eor r23, r23 + 1dc4: cb 01 movw r24, r22 + 1dc6: 97 f9 bld r25, 7 1dc8: 08 95 ret -00001dca <__divmodhi4_neg1>: - 1dca: f6 f7 brtc .-4 ; 0x1dc8 <__divmodhi4_exit> - 1dcc: 90 95 com r25 - 1dce: 81 95 neg r24 - 1dd0: 9f 4f sbci r25, 0xFF ; 255 - 1dd2: 08 95 ret - -00001dd4 <__udivmodsi4>: - 1dd4: a1 e2 ldi r26, 0x21 ; 33 - 1dd6: 1a 2e mov r1, r26 - 1dd8: aa 1b sub r26, r26 - 1dda: bb 1b sub r27, r27 - 1ddc: fd 01 movw r30, r26 - 1dde: 0d c0 rjmp .+26 ; 0x1dfa <__udivmodsi4_ep> - -00001de0 <__udivmodsi4_loop>: - 1de0: aa 1f adc r26, r26 - 1de2: bb 1f adc r27, r27 - 1de4: ee 1f adc r30, r30 - 1de6: ff 1f adc r31, r31 - 1de8: a2 17 cp r26, r18 - 1dea: b3 07 cpc r27, r19 - 1dec: e4 07 cpc r30, r20 - 1dee: f5 07 cpc r31, r21 - 1df0: 20 f0 brcs .+8 ; 0x1dfa <__udivmodsi4_ep> - 1df2: a2 1b sub r26, r18 - 1df4: b3 0b sbc r27, r19 - 1df6: e4 0b sbc r30, r20 - 1df8: f5 0b sbc r31, r21 - -00001dfa <__udivmodsi4_ep>: - 1dfa: 66 1f adc r22, r22 - 1dfc: 77 1f adc r23, r23 - 1dfe: 88 1f adc r24, r24 - 1e00: 99 1f adc r25, r25 - 1e02: 1a 94 dec r1 - 1e04: 69 f7 brne .-38 ; 0x1de0 <__udivmodsi4_loop> - 1e06: 60 95 com r22 - 1e08: 70 95 com r23 - 1e0a: 80 95 com r24 - 1e0c: 90 95 com r25 - 1e0e: 9b 01 movw r18, r22 - 1e10: ac 01 movw r20, r24 - 1e12: bd 01 movw r22, r26 - 1e14: cf 01 movw r24, r30 - 1e16: 08 95 ret - -00001e18 : - 1e18: fc 01 movw r30, r24 - 1e1a: 88 27 eor r24, r24 - 1e1c: 99 27 eor r25, r25 - 1e1e: e8 94 clt - 1e20: 21 91 ld r18, Z+ - 1e22: 20 32 cpi r18, 0x20 ; 32 - 1e24: e9 f3 breq .-6 ; 0x1e20 - 1e26: 29 30 cpi r18, 0x09 ; 9 - 1e28: 10 f0 brcs .+4 ; 0x1e2e - 1e2a: 2e 30 cpi r18, 0x0E ; 14 - 1e2c: c8 f3 brcs .-14 ; 0x1e20 - 1e2e: 2b 32 cpi r18, 0x2B ; 43 - 1e30: 39 f0 breq .+14 ; 0x1e40 - 1e32: 2d 32 cpi r18, 0x2D ; 45 - 1e34: 31 f4 brne .+12 ; 0x1e42 - 1e36: 68 94 set - 1e38: 03 c0 rjmp .+6 ; 0x1e40 - 1e3a: 1a d0 rcall .+52 ; 0x1e70 <__mulhi_const_10> - 1e3c: 82 0f add r24, r18 - 1e3e: 91 1d adc r25, r1 - 1e40: 21 91 ld r18, Z+ - 1e42: 20 53 subi r18, 0x30 ; 48 - 1e44: 2a 30 cpi r18, 0x0A ; 10 - 1e46: c8 f3 brcs .-14 ; 0x1e3a - 1e48: 1e f4 brtc .+6 ; 0x1e50 - 1e4a: 90 95 com r25 - 1e4c: 81 95 neg r24 - 1e4e: 9f 4f sbci r25, 0xFF ; 255 - 1e50: 08 95 ret - -00001e52 : - 1e52: fb 01 movw r30, r22 - 1e54: dc 01 movw r26, r24 - 1e56: 41 50 subi r20, 0x01 ; 1 - 1e58: 50 40 sbci r21, 0x00 ; 0 - 1e5a: 48 f0 brcs .+18 ; 0x1e6e - 1e5c: 01 90 ld r0, Z+ - 1e5e: 0d 92 st X+, r0 - 1e60: 00 20 and r0, r0 - 1e62: c9 f7 brne .-14 ; 0x1e56 - 1e64: 01 c0 rjmp .+2 ; 0x1e68 - 1e66: 1d 92 st X+, r1 - 1e68: 41 50 subi r20, 0x01 ; 1 - 1e6a: 50 40 sbci r21, 0x00 ; 0 - 1e6c: e0 f7 brcc .-8 ; 0x1e66 - 1e6e: 08 95 ret - -00001e70 <__mulhi_const_10>: - 1e70: bc 01 movw r22, r24 - 1e72: 88 0f add r24, r24 - 1e74: 99 1f adc r25, r25 - 1e76: 88 0f add r24, r24 - 1e78: 99 1f adc r25, r25 - 1e7a: 86 0f add r24, r22 - 1e7c: 97 1f adc r25, r23 - 1e7e: 88 0f add r24, r24 - 1e80: 99 1f adc r25, r25 - 1e82: 08 95 ret - -00001e84 <_exit>: - 1e84: f8 94 cli - -00001e86 <__stop_program>: - 1e86: ff cf rjmp .-2 ; 0x1e86 <__stop_program> +00001dca <__gesf2>: + 1dca: 8a df rcall .-236 ; 0x1ce0 <__fp_cmp> + 1dcc: 08 f4 brcc .+2 ; 0x1dd0 <__gesf2+0x6> + 1dce: 8f ef ldi r24, 0xFF ; 255 + 1dd0: 08 95 ret + +00001dd2 <__mulhi3>: + 1dd2: 55 27 eor r21, r21 + 1dd4: 00 24 eor r0, r0 + +00001dd6 <__mulhi3_loop>: + 1dd6: 80 ff sbrs r24, 0 + 1dd8: 02 c0 rjmp .+4 ; 0x1dde <__mulhi3_skip1> + 1dda: 06 0e add r0, r22 + 1ddc: 57 1f adc r21, r23 + +00001dde <__mulhi3_skip1>: + 1dde: 66 0f add r22, r22 + 1de0: 77 1f adc r23, r23 + 1de2: 61 15 cp r22, r1 + 1de4: 71 05 cpc r23, r1 + 1de6: 21 f0 breq .+8 ; 0x1df0 <__mulhi3_exit> + 1de8: 96 95 lsr r25 + 1dea: 87 95 ror r24 + 1dec: 00 97 sbiw r24, 0x00 ; 0 + 1dee: 99 f7 brne .-26 ; 0x1dd6 <__mulhi3_loop> + +00001df0 <__mulhi3_exit>: + 1df0: 95 2f mov r25, r21 + 1df2: 80 2d mov r24, r0 + 1df4: 08 95 ret + +00001df6 <__udivmodhi4>: + 1df6: aa 1b sub r26, r26 + 1df8: bb 1b sub r27, r27 + 1dfa: 51 e1 ldi r21, 0x11 ; 17 + 1dfc: 07 c0 rjmp .+14 ; 0x1e0c <__udivmodhi4_ep> + +00001dfe <__udivmodhi4_loop>: + 1dfe: aa 1f adc r26, r26 + 1e00: bb 1f adc r27, r27 + 1e02: a6 17 cp r26, r22 + 1e04: b7 07 cpc r27, r23 + 1e06: 10 f0 brcs .+4 ; 0x1e0c <__udivmodhi4_ep> + 1e08: a6 1b sub r26, r22 + 1e0a: b7 0b sbc r27, r23 + +00001e0c <__udivmodhi4_ep>: + 1e0c: 88 1f adc r24, r24 + 1e0e: 99 1f adc r25, r25 + 1e10: 5a 95 dec r21 + 1e12: a9 f7 brne .-22 ; 0x1dfe <__udivmodhi4_loop> + 1e14: 80 95 com r24 + 1e16: 90 95 com r25 + 1e18: bc 01 movw r22, r24 + 1e1a: cd 01 movw r24, r26 + 1e1c: 08 95 ret + +00001e1e <__divmodhi4>: + 1e1e: 97 fb bst r25, 7 + 1e20: 09 2e mov r0, r25 + 1e22: 07 26 eor r0, r23 + 1e24: 0a d0 rcall .+20 ; 0x1e3a <__divmodhi4_neg1> + 1e26: 77 fd sbrc r23, 7 + 1e28: 04 d0 rcall .+8 ; 0x1e32 <__divmodhi4_neg2> + 1e2a: e5 df rcall .-54 ; 0x1df6 <__udivmodhi4> + 1e2c: 06 d0 rcall .+12 ; 0x1e3a <__divmodhi4_neg1> + 1e2e: 00 20 and r0, r0 + 1e30: 1a f4 brpl .+6 ; 0x1e38 <__divmodhi4_exit> + +00001e32 <__divmodhi4_neg2>: + 1e32: 70 95 com r23 + 1e34: 61 95 neg r22 + 1e36: 7f 4f sbci r23, 0xFF ; 255 + +00001e38 <__divmodhi4_exit>: + 1e38: 08 95 ret + +00001e3a <__divmodhi4_neg1>: + 1e3a: f6 f7 brtc .-4 ; 0x1e38 <__divmodhi4_exit> + 1e3c: 90 95 com r25 + 1e3e: 81 95 neg r24 + 1e40: 9f 4f sbci r25, 0xFF ; 255 + 1e42: 08 95 ret + +00001e44 <__udivmodsi4>: + 1e44: a1 e2 ldi r26, 0x21 ; 33 + 1e46: 1a 2e mov r1, r26 + 1e48: aa 1b sub r26, r26 + 1e4a: bb 1b sub r27, r27 + 1e4c: fd 01 movw r30, r26 + 1e4e: 0d c0 rjmp .+26 ; 0x1e6a <__udivmodsi4_ep> + +00001e50 <__udivmodsi4_loop>: + 1e50: aa 1f adc r26, r26 + 1e52: bb 1f adc r27, r27 + 1e54: ee 1f adc r30, r30 + 1e56: ff 1f adc r31, r31 + 1e58: a2 17 cp r26, r18 + 1e5a: b3 07 cpc r27, r19 + 1e5c: e4 07 cpc r30, r20 + 1e5e: f5 07 cpc r31, r21 + 1e60: 20 f0 brcs .+8 ; 0x1e6a <__udivmodsi4_ep> + 1e62: a2 1b sub r26, r18 + 1e64: b3 0b sbc r27, r19 + 1e66: e4 0b sbc r30, r20 + 1e68: f5 0b sbc r31, r21 + +00001e6a <__udivmodsi4_ep>: + 1e6a: 66 1f adc r22, r22 + 1e6c: 77 1f adc r23, r23 + 1e6e: 88 1f adc r24, r24 + 1e70: 99 1f adc r25, r25 + 1e72: 1a 94 dec r1 + 1e74: 69 f7 brne .-38 ; 0x1e50 <__udivmodsi4_loop> + 1e76: 60 95 com r22 + 1e78: 70 95 com r23 + 1e7a: 80 95 com r24 + 1e7c: 90 95 com r25 + 1e7e: 9b 01 movw r18, r22 + 1e80: ac 01 movw r20, r24 + 1e82: bd 01 movw r22, r26 + 1e84: cf 01 movw r24, r30 + 1e86: 08 95 ret + +00001e88 : + 1e88: fc 01 movw r30, r24 + 1e8a: 88 27 eor r24, r24 + 1e8c: 99 27 eor r25, r25 + 1e8e: e8 94 clt + 1e90: 21 91 ld r18, Z+ + 1e92: 20 32 cpi r18, 0x20 ; 32 + 1e94: e9 f3 breq .-6 ; 0x1e90 + 1e96: 29 30 cpi r18, 0x09 ; 9 + 1e98: 10 f0 brcs .+4 ; 0x1e9e + 1e9a: 2e 30 cpi r18, 0x0E ; 14 + 1e9c: c8 f3 brcs .-14 ; 0x1e90 + 1e9e: 2b 32 cpi r18, 0x2B ; 43 + 1ea0: 39 f0 breq .+14 ; 0x1eb0 + 1ea2: 2d 32 cpi r18, 0x2D ; 45 + 1ea4: 31 f4 brne .+12 ; 0x1eb2 + 1ea6: 68 94 set + 1ea8: 03 c0 rjmp .+6 ; 0x1eb0 + 1eaa: 1a d0 rcall .+52 ; 0x1ee0 <__mulhi_const_10> + 1eac: 82 0f add r24, r18 + 1eae: 91 1d adc r25, r1 + 1eb0: 21 91 ld r18, Z+ + 1eb2: 20 53 subi r18, 0x30 ; 48 + 1eb4: 2a 30 cpi r18, 0x0A ; 10 + 1eb6: c8 f3 brcs .-14 ; 0x1eaa + 1eb8: 1e f4 brtc .+6 ; 0x1ec0 + 1eba: 90 95 com r25 + 1ebc: 81 95 neg r24 + 1ebe: 9f 4f sbci r25, 0xFF ; 255 + 1ec0: 08 95 ret + +00001ec2 : + 1ec2: fb 01 movw r30, r22 + 1ec4: dc 01 movw r26, r24 + 1ec6: 41 50 subi r20, 0x01 ; 1 + 1ec8: 50 40 sbci r21, 0x00 ; 0 + 1eca: 48 f0 brcs .+18 ; 0x1ede + 1ecc: 01 90 ld r0, Z+ + 1ece: 0d 92 st X+, r0 + 1ed0: 00 20 and r0, r0 + 1ed2: c9 f7 brne .-14 ; 0x1ec6 + 1ed4: 01 c0 rjmp .+2 ; 0x1ed8 + 1ed6: 1d 92 st X+, r1 + 1ed8: 41 50 subi r20, 0x01 ; 1 + 1eda: 50 40 sbci r21, 0x00 ; 0 + 1edc: e0 f7 brcc .-8 ; 0x1ed6 + 1ede: 08 95 ret + +00001ee0 <__mulhi_const_10>: + 1ee0: bc 01 movw r22, r24 + 1ee2: 88 0f add r24, r24 + 1ee4: 99 1f adc r25, r25 + 1ee6: 88 0f add r24, r24 + 1ee8: 99 1f adc r25, r25 + 1eea: 86 0f add r24, r22 + 1eec: 97 1f adc r25, r23 + 1eee: 88 0f add r24, r24 + 1ef0: 99 1f adc r25, r25 + 1ef2: 08 95 ret + +00001ef4 <_exit>: + 1ef4: f8 94 cli + +00001ef6 <__stop_program>: + 1ef6: ff cf rjmp .-2 ; 0x1ef6 <__stop_program> diff --git a/firmware/USBtoSerial.map b/firmware/USBtoSerial.map index 48e5678..aeb65e5 100644 --- a/firmware/USBtoSerial.map +++ b/firmware/USBtoSerial.map @@ -98,6 +98,8 @@ Discarded input sections .text.y_abs 0x0000000000000000 0x3e USBtoSerial.o .text.decode_field 0x0000000000000000 0x8c USBtoSerial.o + .text.uart_print_number + 0x0000000000000000 0x2c USBtoSerial.o .text.times_ten_pow 0x0000000000000000 0x3a USBtoSerial.o .text 0x0000000000000000 0x0 Descriptors.o @@ -568,7 +570,7 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .rela.plt *(.rela.plt) -.text 0x0000000000000000 0x1e88 +.text 0x0000000000000000 0x1ef8 *(.vectors) .vectors 0x0000000000000000 0x98 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o 0x0000000000000000 __vectors @@ -729,189 +731,192 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a 0x00000000000007d4 0x26 USBtoSerial.o 0x00000000000007d4 uart_puts .text.my_uitoa - 0x00000000000007fa 0xd0 USBtoSerial.o + 0x00000000000007fa 0xcc USBtoSerial.o 0x00000000000007fa my_uitoa - .text.sign 0x00000000000008ca 0x18 USBtoSerial.o - 0x00000000000008ca sign - .text.uart_print_number - 0x00000000000008e2 0x20 USBtoSerial.o - 0x00000000000008e2 uart_print_number + .text.sign 0x00000000000008c6 0x18 USBtoSerial.o + 0x00000000000008c6 sign + .text.uart_print_number_wlzeros + 0x00000000000008de 0x28 USBtoSerial.o + 0x00000000000008de uart_print_number_wlzeros .text.uart_print_signed_number - 0x0000000000000902 0x3c USBtoSerial.o - 0x0000000000000902 uart_print_signed_number + 0x0000000000000906 0x46 USBtoSerial.o + 0x0000000000000906 uart_print_signed_number .text.init_motors - 0x000000000000093e 0x1a USBtoSerial.o - 0x000000000000093e init_motors + 0x000000000000094c 0x1a USBtoSerial.o + 0x000000000000094c init_motors .text.motor_step - 0x0000000000000958 0x64 USBtoSerial.o - 0x0000000000000958 motor_step + 0x0000000000000966 0x64 USBtoSerial.o + 0x0000000000000966 motor_step .text.move_plate - 0x00000000000009bc 0x96 USBtoSerial.o - 0x00000000000009bc move_plate + 0x00000000000009ca 0x96 USBtoSerial.o + 0x00000000000009ca move_plate + .text.print_steps_in_mm + 0x0000000000000a60 0x54 USBtoSerial.o + 0x0000000000000a60 print_steps_in_mm .text.pos_report - 0x0000000000000a52 0x3a USBtoSerial.o - 0x0000000000000a52 pos_report + 0x0000000000000ab4 0x26 USBtoSerial.o + 0x0000000000000ab4 pos_report .text.parse_command - 0x0000000000000a8c 0x33c USBtoSerial.o - 0x0000000000000a8c parse_command - .text.main 0x0000000000000dc8 0xae USBtoSerial.o - 0x0000000000000dc8 main + 0x0000000000000ada 0x35e USBtoSerial.o + 0x0000000000000ada parse_command + .text.main 0x0000000000000e38 0xae USBtoSerial.o + 0x0000000000000e38 main .text.CALLBACK_USB_GetDescriptor - 0x0000000000000e76 0x5a Descriptors.o - 0x0000000000000e76 CALLBACK_USB_GetDescriptor + 0x0000000000000ee6 0x5a Descriptors.o + 0x0000000000000ee6 CALLBACK_USB_GetDescriptor .text.Endpoint_Write_Control_Stream_LE - 0x0000000000000ed0 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x0000000000000ed0 Endpoint_Write_Control_Stream_LE + 0x0000000000000f40 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000f40 Endpoint_Write_Control_Stream_LE .text.Endpoint_Write_Control_PStream_LE - 0x0000000000000f84 0xb6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x0000000000000f84 Endpoint_Write_Control_PStream_LE + 0x0000000000000ff4 0xb6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000ff4 Endpoint_Write_Control_PStream_LE .text.Endpoint_ConfigureEndpoint_Prv - 0x000000000000103a 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x000000000000103a Endpoint_ConfigureEndpoint_Prv + 0x00000000000010aa 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x00000000000010aa Endpoint_ConfigureEndpoint_Prv .text.Endpoint_ConfigureEndpointTable - 0x00000000000010a8 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x00000000000010a8 Endpoint_ConfigureEndpointTable + 0x0000000000001118 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000001118 Endpoint_ConfigureEndpointTable .text.Endpoint_ClearStatusStage - 0x0000000000001130 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000001130 Endpoint_ClearStatusStage + 0x00000000000011a0 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x00000000000011a0 Endpoint_ClearStatusStage .text.Endpoint_WaitUntilReady - 0x000000000000116e 0x66 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x000000000000116e Endpoint_WaitUntilReady + 0x00000000000011de 0x66 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x00000000000011de Endpoint_WaitUntilReady .text.USB_ResetInterface - 0x00000000000011d4 0x70 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x00000000000011d4 USB_ResetInterface + 0x0000000000001244 0x70 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x0000000000001244 USB_ResetInterface .text.USB_Init - 0x0000000000001244 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x0000000000001244 USB_Init + 0x00000000000012b4 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x00000000000012b4 USB_Init .text.USB_INT_DisableAllInterrupts - 0x0000000000001256 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000001256 USB_INT_DisableAllInterrupts + 0x00000000000012c6 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x00000000000012c6 USB_INT_DisableAllInterrupts .text.USB_INT_ClearAllInterrupts - 0x000000000000125c 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x000000000000125c USB_INT_ClearAllInterrupts + 0x00000000000012cc 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x00000000000012cc USB_INT_ClearAllInterrupts .text.__vector_11 - 0x0000000000001262 0x148 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000001262 __vector_11 + 0x00000000000012d2 0x148 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x00000000000012d2 __vector_11 .text.__vector_12 - 0x00000000000013aa 0x76 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x00000000000013aa __vector_12 + 0x000000000000141a 0x76 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x000000000000141a __vector_12 .text.USB_Device_ProcessControlRequest - 0x0000000000001420 0x2c4 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x0000000000001420 USB_Device_ProcessControlRequest + 0x0000000000001490 0x2c4 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x0000000000001490 USB_Device_ProcessControlRequest .text.USB_Event_Stub - 0x00000000000016e4 0x2 ../../LUFA/Drivers/USB/Core/Events.o - 0x00000000000016e4 EVENT_USB_Device_WakeUp - 0x00000000000016e4 USB_Event_Stub - 0x00000000000016e4 EVENT_USB_Device_Suspend - 0x00000000000016e4 EVENT_USB_Device_StartOfFrame - 0x00000000000016e4 EVENT_USB_Device_Reset + 0x0000000000001754 0x2 ../../LUFA/Drivers/USB/Core/Events.o + 0x0000000000001754 EVENT_USB_Device_WakeUp + 0x0000000000001754 USB_Event_Stub + 0x0000000000001754 EVENT_USB_Device_Suspend + 0x0000000000001754 EVENT_USB_Device_StartOfFrame + 0x0000000000001754 EVENT_USB_Device_Reset .text.USB_USBTask - 0x00000000000016e6 0x36 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x00000000000016e6 USB_USBTask + 0x0000000000001756 0x36 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x0000000000001756 USB_USBTask .text.CDC_Device_ProcessControlRequest - 0x000000000000171c 0x15a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x000000000000171c CDC_Device_ProcessControlRequest + 0x000000000000178c 0x15a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x000000000000178c CDC_Device_ProcessControlRequest .text.CDC_Device_ConfigureEndpoints - 0x0000000000001876 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001876 CDC_Device_ConfigureEndpoints + 0x00000000000018e6 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000018e6 CDC_Device_ConfigureEndpoints .text.CDC_Device_SendByte - 0x00000000000018be 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000018be CDC_Device_SendByte + 0x000000000000192e 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x000000000000192e CDC_Device_SendByte .text.CDC_Device_Flush - 0x0000000000001918 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001918 CDC_Device_Flush + 0x0000000000001988 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001988 CDC_Device_Flush .text.CDC_Device_USBTask - 0x0000000000001972 0x2e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001972 CDC_Device_USBTask + 0x00000000000019e2 0x2e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000019e2 CDC_Device_USBTask .text.CDC_Device_ReceiveByte - 0x00000000000019a0 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000019a0 CDC_Device_ReceiveByte + 0x0000000000001a10 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001a10 CDC_Device_ReceiveByte .text.CDC_Device_Event_Stub - 0x00000000000019fa 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000019fa EVENT_CDC_Device_ControLineStateChanged - 0x00000000000019fa EVENT_CDC_Device_BreakSent - 0x00000000000019fa CDC_Device_Event_Stub + 0x0000000000001a6a 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001a6a EVENT_CDC_Device_ControLineStateChanged + 0x0000000000001a6a EVENT_CDC_Device_BreakSent + 0x0000000000001a6a CDC_Device_Event_Stub .text.avr-libc.fplib - 0x00000000000019fc 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - 0x00000000000019fc __subsf3 - 0x00000000000019fe __addsf3 + 0x0000000000001a6c 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) + 0x0000000000001a6c __subsf3 + 0x0000000000001a6e __addsf3 .text.avr-libc.fplib - 0x0000000000001a06 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - 0x0000000000001a20 __addsf3x + 0x0000000000001a76 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) + 0x0000000000001a90 __addsf3x .text.avr-libc.fplib - 0x0000000000001ac6 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - 0x0000000000001ac6 __lesf2 - 0x0000000000001ac6 __nesf2 - 0x0000000000001ac6 __eqsf2 - 0x0000000000001ac6 __cmpsf2 - 0x0000000000001ac6 __ltsf2 + 0x0000000000001b36 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) + 0x0000000000001b36 __lesf2 + 0x0000000000001b36 __nesf2 + 0x0000000000001b36 __eqsf2 + 0x0000000000001b36 __cmpsf2 + 0x0000000000001b36 __ltsf2 .text.avr-libc.fplib - 0x0000000000001ace 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - 0x0000000000001ace __divsf3 + 0x0000000000001b3e 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) + 0x0000000000001b3e __divsf3 .text.avr-libc.fplib - 0x0000000000001ad2 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - 0x0000000000001ae8 __divsf3x - 0x0000000000001aec __divsf3_pse + 0x0000000000001b42 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) + 0x0000000000001b58 __divsf3x + 0x0000000000001b5c __divsf3_pse .text.avr-libc.fplib - 0x0000000000001b9e 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - 0x0000000000001b9e __fixunssfsi + 0x0000000000001c0e 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) + 0x0000000000001c0e __fixunssfsi .text.avr-libc.fplib - 0x0000000000001bf6 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - 0x0000000000001bf6 __floatunsisf - 0x0000000000001bfa __floatsisf + 0x0000000000001c66 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) + 0x0000000000001c66 __floatunsisf + 0x0000000000001c6a __floatsisf .text.avr-libc.fplib - 0x0000000000001c70 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - 0x0000000000001c70 __fp_cmp + 0x0000000000001ce0 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) + 0x0000000000001ce0 __fp_cmp .text.avr-libc.fplib - 0x0000000000001cb8 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - 0x0000000000001cb8 __fp_inf + 0x0000000000001d28 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) + 0x0000000000001d28 __fp_inf .text.avr-libc.fplib - 0x0000000000001cc4 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - 0x0000000000001cc4 __fp_nan + 0x0000000000001d34 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) + 0x0000000000001d34 __fp_nan .text.avr-libc.fplib - 0x0000000000001cca 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - 0x0000000000001cca __fp_pscA + 0x0000000000001d3a 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) + 0x0000000000001d3a __fp_pscA .text.avr-libc.fplib - 0x0000000000001cd8 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - 0x0000000000001cd8 __fp_pscB + 0x0000000000001d48 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) + 0x0000000000001d48 __fp_pscB .text.avr-libc.fplib - 0x0000000000001ce6 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - 0x0000000000001ce6 __fp_round + 0x0000000000001d56 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) + 0x0000000000001d56 __fp_round .text.avr-libc.fplib - 0x0000000000001d08 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - 0x0000000000001d08 __fp_split3 - 0x0000000000001d18 __fp_splitA + 0x0000000000001d78 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) + 0x0000000000001d78 __fp_split3 + 0x0000000000001d88 __fp_splitA .text.avr-libc.fplib - 0x0000000000001d4c 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - 0x0000000000001d4c __fp_zero - 0x0000000000001d4e __fp_szero + 0x0000000000001dbc 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) + 0x0000000000001dbc __fp_zero + 0x0000000000001dbe __fp_szero .text.avr-libc.fplib - 0x0000000000001d5a 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - 0x0000000000001d5a __gtsf2 - 0x0000000000001d5a __gesf2 - .text.libgcc 0x0000000000001d62 0x24 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulhi3.o) - 0x0000000000001d62 __mulhi3 - .text.libgcc 0x0000000000001d86 0x28 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) - 0x0000000000001d86 __udivmodhi4 - .text.libgcc 0x0000000000001dae 0x26 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) - 0x0000000000001dae __divmodhi4 - 0x0000000000001dae _div - .text.libgcc 0x0000000000001dd4 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - 0x0000000000001dd4 __udivmodsi4 + 0x0000000000001dca 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) + 0x0000000000001dca __gtsf2 + 0x0000000000001dca __gesf2 + .text.libgcc 0x0000000000001dd2 0x24 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulhi3.o) + 0x0000000000001dd2 __mulhi3 + .text.libgcc 0x0000000000001df6 0x28 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) + 0x0000000000001df6 __udivmodhi4 + .text.libgcc 0x0000000000001e1e 0x26 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) + 0x0000000000001e1e __divmodhi4 + 0x0000000000001e1e _div + .text.libgcc 0x0000000000001e44 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) + 0x0000000000001e44 __udivmodsi4 .text.avr-libc - 0x0000000000001e18 0x3a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) - 0x0000000000001e18 atoi + 0x0000000000001e88 0x3a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) + 0x0000000000001e88 atoi .text.avr-libc - 0x0000000000001e52 0x1e /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(strncpy.o) - 0x0000000000001e52 strncpy + 0x0000000000001ec2 0x1e /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(strncpy.o) + 0x0000000000001ec2 strncpy .text.avr-libc - 0x0000000000001e70 0x14 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(mul10.o) - 0x0000000000001e70 __mulhi_const_10 - 0x0000000000001e84 . = ALIGN (0x2) + 0x0000000000001ee0 0x14 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(mul10.o) + 0x0000000000001ee0 __mulhi_const_10 + 0x0000000000001ef4 . = ALIGN (0x2) *(.fini9) - .fini9 0x0000000000001e84 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - 0x0000000000001e84 exit - 0x0000000000001e84 _exit + .fini9 0x0000000000001ef4 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) + 0x0000000000001ef4 exit + 0x0000000000001ef4 _exit *(.fini9) *(.fini8) *(.fini8) @@ -930,55 +935,55 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a *(.fini1) *(.fini1) *(.fini0) - .fini0 0x0000000000001e84 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) + .fini0 0x0000000000001ef4 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) *(.fini0) - 0x0000000000001e88 _etext = . + 0x0000000000001ef8 _etext = . -.data 0x0000000000800100 0x7a load address 0x0000000000001e88 +.data 0x0000000000800100 0x4e load address 0x0000000000001ef8 0x0000000000800100 PROVIDE (__data_start, .) *(.data) - .data 0x0000000000800100 0x79 USBtoSerial.o - 0x0000000000800154 VirtualSerial_CDC_Interface - 0x000000000080016f phase_pattern + .data 0x0000000000800100 0x4d USBtoSerial.o + 0x0000000000800128 VirtualSerial_CDC_Interface + 0x0000000000800143 phase_pattern *(.data*) *(.rodata) *(.rodata*) *(.gnu.linkonce.d*) - 0x000000000080017a . = ALIGN (0x2) - *fill* 0x0000000000800179 0x1 00 - 0x000000000080017a _edata = . - 0x000000000080017a PROVIDE (__data_end, .) + 0x000000000080014e . = ALIGN (0x2) + *fill* 0x000000000080014d 0x1 00 + 0x000000000080014e _edata = . + 0x000000000080014e PROVIDE (__data_end, .) -.bss 0x000000000080017a 0x176 - 0x000000000080017a PROVIDE (__bss_start, .) +.bss 0x000000000080014e 0x186 + 0x000000000080014e PROVIDE (__bss_start, .) *(.bss) - .bss 0x000000000080017a 0x14f USBtoSerial.o - 0x000000000080017a plate_pos_x - 0x000000000080017c plate_pos_y + .bss 0x000000000080014e 0x15f USBtoSerial.o + 0x000000000080014e plate_pos_x + 0x0000000000800150 plate_pos_y *(.bss*) *(COMMON) - COMMON 0x00000000008002c9 0x1b USBtoSerial.o - 0x00000000008002c9 adb_werte - 0x00000000008002d2 stringbuffer - 0x00000000008002e2 t0ovfcount - 0x00000000008002e3 adb_data_length - COMMON 0x00000000008002e4 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x00000000008002e4 USB_Device_ConfigurationNumber - 0x00000000008002e5 USB_Device_CurrentlySelfPowered - 0x00000000008002e6 USB_Device_RemoteWakeupEnabled - COMMON 0x00000000008002e7 0x9 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x00000000008002e7 USB_IsInitialized - 0x00000000008002e8 USB_ControlRequest - 0x00000000008002f0 PROVIDE (__bss_end, .) - 0x0000000000001e88 __data_load_start = LOADADDR (.data) - 0x0000000000001f02 __data_load_end = (__data_load_start + SIZEOF (.data)) - -.noinit 0x00000000008002f0 0x0 - 0x00000000008002f0 PROVIDE (__noinit_start, .) + COMMON 0x00000000008002ad 0x1b USBtoSerial.o + 0x00000000008002ad adb_werte + 0x00000000008002b6 stringbuffer + 0x00000000008002c6 t0ovfcount + 0x00000000008002c7 adb_data_length + COMMON 0x00000000008002c8 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x00000000008002c8 USB_Device_ConfigurationNumber + 0x00000000008002c9 USB_Device_CurrentlySelfPowered + 0x00000000008002ca USB_Device_RemoteWakeupEnabled + COMMON 0x00000000008002cb 0x9 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x00000000008002cb USB_IsInitialized + 0x00000000008002cc USB_ControlRequest + 0x00000000008002d4 PROVIDE (__bss_end, .) + 0x0000000000001ef8 __data_load_start = LOADADDR (.data) + 0x0000000000001f46 __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x00000000008002d4 0x0 + 0x00000000008002d4 PROVIDE (__noinit_start, .) *(.noinit*) - 0x00000000008002f0 PROVIDE (__noinit_end, .) - 0x00000000008002f0 _end = . - 0x00000000008002f0 PROVIDE (__heap_start, .) + 0x00000000008002d4 PROVIDE (__noinit_end, .) + 0x00000000008002d4 _end = . + 0x00000000008002d4 PROVIDE (__heap_start, .) .eeprom 0x0000000000810000 0x0 *(.eeprom*) @@ -1081,118 +1086,118 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x0000000000000000 0x590 +.debug_aranges 0x0000000000000000 0x5a0 *(.debug_aranges) .debug_aranges - 0x0000000000000000 0x160 USBtoSerial.o + 0x0000000000000000 0x170 USBtoSerial.o .debug_aranges - 0x0000000000000160 0x20 Descriptors.o + 0x0000000000000170 0x20 Descriptors.o .debug_aranges - 0x0000000000000180 0x38 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + 0x0000000000000190 0x38 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o .debug_aranges - 0x00000000000001b8 0x20 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + 0x00000000000001c8 0x20 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o .debug_aranges - 0x00000000000001d8 0xc8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x00000000000001e8 0xc8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .debug_aranges - 0x00000000000002a0 0x40 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x00000000000002b0 0x40 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o .debug_aranges - 0x00000000000002e0 0x30 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x00000000000002f0 0x30 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o .debug_aranges - 0x0000000000000310 0x38 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000320 0x38 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o .debug_aranges - 0x0000000000000348 0x38 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + 0x0000000000000358 0x38 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o .debug_aranges - 0x0000000000000380 0x20 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x0000000000000390 0x20 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o .debug_aranges - 0x00000000000003a0 0x20 ../../LUFA/Drivers/USB/Core/Events.o + 0x00000000000003b0 0x20 ../../LUFA/Drivers/USB/Core/Events.o .debug_aranges - 0x00000000000003c0 0x20 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x00000000000003d0 0x20 ../../LUFA/Drivers/USB/Core/USBTask.o .debug_aranges - 0x00000000000003e0 0x30 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + 0x00000000000003f0 0x30 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o .debug_aranges - 0x0000000000000410 0x98 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000000420 0x98 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .debug_aranges - 0x00000000000004a8 0x30 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + 0x00000000000004b8 0x30 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o .debug_aranges - 0x00000000000004d8 0x30 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + 0x00000000000004e8 0x30 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o .debug_aranges - 0x0000000000000508 0x40 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + 0x0000000000000518 0x40 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .debug_aranges - 0x0000000000000548 0x48 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + 0x0000000000000558 0x48 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .debug_pubnames - 0x0000000000000000 0xf05 + 0x0000000000000000 0xf39 *(.debug_pubnames) .debug_pubnames - 0x0000000000000000 0x36a USBtoSerial.o + 0x0000000000000000 0x39e USBtoSerial.o .debug_pubnames - 0x000000000000036a 0x9e Descriptors.o + 0x000000000000039e 0x9e Descriptors.o .debug_pubnames - 0x0000000000000408 0x7e ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + 0x000000000000043c 0x7e ../../LUFA/Drivers/USB/Class/Common/HIDParser.o .debug_pubnames - 0x0000000000000486 0x32 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + 0x00000000000004ba 0x32 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o .debug_pubnames - 0x00000000000004b8 0x2df ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x00000000000004ec 0x2df ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .debug_pubnames - 0x0000000000000797 0xaf ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x00000000000007cb 0xaf ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o .debug_pubnames - 0x0000000000000846 0x46 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x000000000000087a 0x46 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o .debug_pubnames - 0x000000000000088c 0x72 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x00000000000008c0 0x72 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o .debug_pubnames - 0x00000000000008fe 0x9b ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + 0x0000000000000932 0x9b ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o .debug_pubnames - 0x0000000000000999 0xa1 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x00000000000009cd 0xa1 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o .debug_pubnames - 0x0000000000000a3a 0x25 ../../LUFA/Drivers/USB/Core/Events.o + 0x0000000000000a6e 0x25 ../../LUFA/Drivers/USB/Core/Events.o .debug_pubnames - 0x0000000000000a5f 0x4f ../../LUFA/Drivers/USB/Core/USBTask.o + 0x0000000000000a93 0x4f ../../LUFA/Drivers/USB/Core/USBTask.o .debug_pubnames - 0x0000000000000aae 0x79 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + 0x0000000000000ae2 0x79 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o .debug_pubnames - 0x0000000000000b27 0x18b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000000b5b 0x18b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .debug_pubnames - 0x0000000000000cb2 0x70 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + 0x0000000000000ce6 0x70 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o .debug_pubnames - 0x0000000000000d22 0x6d ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + 0x0000000000000d56 0x6d ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o .debug_pubnames - 0x0000000000000d8f 0xa6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + 0x0000000000000dc3 0xa6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .debug_pubnames - 0x0000000000000e35 0xd0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + 0x0000000000000e69 0xd0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -.debug_info 0x0000000000000000 0x9207 +.debug_info 0x0000000000000000 0x92a5 *(.debug_info) - .debug_info 0x0000000000000000 0x1449 USBtoSerial.o - .debug_info 0x0000000000001449 0x77d Descriptors.o - .debug_info 0x0000000000001bc6 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_info 0x00000000000022bf 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_info 0x0000000000002397 0x154c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_info 0x00000000000038e3 0x603 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_info 0x0000000000003ee6 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_info 0x0000000000003f52 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_info 0x0000000000003fbe 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_info 0x000000000000402a 0x412 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_info 0x000000000000443c 0x662 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_info 0x0000000000004a9e 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_info 0x0000000000004e2a 0x973 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_info 0x000000000000579d 0x85 ../../LUFA/Drivers/USB/Core/Events.o - .debug_info 0x0000000000005822 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_info 0x000000000000588e 0x245 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_info 0x0000000000005ad3 0x56c ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_info 0x000000000000603f 0xc3b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_info 0x0000000000006c7a 0x67a ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_info 0x00000000000072f4 0x7ca ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_info 0x0000000000007abe 0x4c1 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_info 0x0000000000007f7f 0xebc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_info 0x0000000000008e3b 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_info 0x0000000000008ea7 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_info 0x0000000000008f13 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_info 0x0000000000008f7f 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_info 0x0000000000008feb 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_info 0x0000000000009057 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_info 0x00000000000090c3 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_info 0x000000000000912f 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_info 0x000000000000919b 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + .debug_info 0x0000000000000000 0x14e7 USBtoSerial.o + .debug_info 0x00000000000014e7 0x77d Descriptors.o + .debug_info 0x0000000000001c64 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_info 0x000000000000235d 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_info 0x0000000000002435 0x154c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_info 0x0000000000003981 0x603 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_info 0x0000000000003f84 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_info 0x0000000000003ff0 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_info 0x000000000000405c 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_info 0x00000000000040c8 0x412 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_info 0x00000000000044da 0x662 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_info 0x0000000000004b3c 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_info 0x0000000000004ec8 0x973 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_info 0x000000000000583b 0x85 ../../LUFA/Drivers/USB/Core/Events.o + .debug_info 0x00000000000058c0 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_info 0x000000000000592c 0x245 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_info 0x0000000000005b71 0x56c ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_info 0x00000000000060dd 0xc3b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_info 0x0000000000006d18 0x67a ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_info 0x0000000000007392 0x7ca ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_info 0x0000000000007b5c 0x4c1 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_info 0x000000000000801d 0xebc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_info 0x0000000000008ed9 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_info 0x0000000000008f45 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_info 0x0000000000008fb1 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_info 0x000000000000901d 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_info 0x0000000000009089 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_info 0x00000000000090f5 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_info 0x0000000000009161 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_info 0x00000000000091cd 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_info 0x0000000000009239 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o *(.gnu.linkonce.wi.*) .debug_abbrev 0x0000000000000000 0x220b @@ -1229,143 +1234,143 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .debug_abbrev 0x00000000000021b7 0x2a ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o .debug_abbrev 0x00000000000021e1 0x2a ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o -.debug_line 0x0000000000000000 0x7b46 +.debug_line 0x0000000000000000 0x7bdc *(.debug_line) - .debug_line 0x0000000000000000 0x1563 USBtoSerial.o - .debug_line 0x0000000000001563 0x1d9 Descriptors.o - .debug_line 0x000000000000173c 0x762 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_line 0x0000000000001e9e 0x15f ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_line 0x0000000000001ffd 0x1a80 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_line 0x0000000000003a7d 0x5a1 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_line 0x000000000000401e 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_line 0x000000000000405c 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_line 0x000000000000409a 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_line 0x00000000000040d8 0x312 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_line 0x00000000000043ea 0x55a ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_line 0x0000000000004944 0x269 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_line 0x0000000000004bad 0x5a2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_line 0x000000000000514f 0x80 ../../LUFA/Drivers/USB/Core/Events.o - .debug_line 0x00000000000051cf 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_line 0x000000000000520d 0x1ae ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_line 0x00000000000053bb 0x4be ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_line 0x0000000000005879 0x9c2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_line 0x000000000000623b 0x5c3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_line 0x00000000000067fe 0x5c6 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_line 0x0000000000006dc4 0x3bc ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_line 0x0000000000007180 0x798 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_line 0x0000000000007918 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_line 0x0000000000007956 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_line 0x0000000000007994 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_line 0x00000000000079d2 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_line 0x0000000000007a10 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_line 0x0000000000007a4e 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_line 0x0000000000007a8c 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_line 0x0000000000007aca 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_line 0x0000000000007b08 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - -.debug_frame 0x0000000000000000 0x8e0 + .debug_line 0x0000000000000000 0x15f9 USBtoSerial.o + .debug_line 0x00000000000015f9 0x1d9 Descriptors.o + .debug_line 0x00000000000017d2 0x762 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_line 0x0000000000001f34 0x15f ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_line 0x0000000000002093 0x1a80 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_line 0x0000000000003b13 0x5a1 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_line 0x00000000000040b4 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_line 0x00000000000040f2 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_line 0x0000000000004130 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_line 0x000000000000416e 0x312 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_line 0x0000000000004480 0x55a ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_line 0x00000000000049da 0x269 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_line 0x0000000000004c43 0x5a2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_line 0x00000000000051e5 0x80 ../../LUFA/Drivers/USB/Core/Events.o + .debug_line 0x0000000000005265 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_line 0x00000000000052a3 0x1ae ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_line 0x0000000000005451 0x4be ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_line 0x000000000000590f 0x9c2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_line 0x00000000000062d1 0x5c3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_line 0x0000000000006894 0x5c6 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_line 0x0000000000006e5a 0x3bc ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_line 0x0000000000007216 0x798 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_line 0x00000000000079ae 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_line 0x00000000000079ec 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_line 0x0000000000007a2a 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_line 0x0000000000007a68 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_line 0x0000000000007aa6 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_line 0x0000000000007ae4 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_line 0x0000000000007b22 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_line 0x0000000000007b60 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_line 0x0000000000007b9e 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + +.debug_frame 0x0000000000000000 0x900 *(.debug_frame) - .debug_frame 0x0000000000000000 0x2a0 USBtoSerial.o - .debug_frame 0x00000000000002a0 0x20 Descriptors.o - .debug_frame 0x00000000000002c0 0x50 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_frame 0x0000000000000310 0x20 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_frame 0x0000000000000330 0x170 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_frame 0x00000000000004a0 0x60 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_frame 0x0000000000000500 0x40 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_frame 0x0000000000000540 0x50 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_frame 0x0000000000000590 0x50 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_frame 0x00000000000005e0 0x20 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_frame 0x0000000000000600 0x20 ../../LUFA/Drivers/USB/Core/Events.o - .debug_frame 0x0000000000000620 0x20 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_frame 0x0000000000000640 0x40 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_frame 0x0000000000000680 0x110 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_frame 0x0000000000000790 0x40 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_frame 0x00000000000007d0 0x40 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_frame 0x0000000000000810 0x60 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_frame 0x0000000000000870 0x70 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - -.debug_str 0x0000000000000000 0x3d5d + .debug_frame 0x0000000000000000 0x2c0 USBtoSerial.o + .debug_frame 0x00000000000002c0 0x20 Descriptors.o + .debug_frame 0x00000000000002e0 0x50 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_frame 0x0000000000000330 0x20 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_frame 0x0000000000000350 0x170 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_frame 0x00000000000004c0 0x60 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_frame 0x0000000000000520 0x40 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_frame 0x0000000000000560 0x50 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_frame 0x00000000000005b0 0x50 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_frame 0x0000000000000600 0x20 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_frame 0x0000000000000620 0x20 ../../LUFA/Drivers/USB/Core/Events.o + .debug_frame 0x0000000000000640 0x20 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_frame 0x0000000000000660 0x40 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_frame 0x00000000000006a0 0x110 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_frame 0x00000000000007b0 0x40 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_frame 0x00000000000007f0 0x40 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_frame 0x0000000000000830 0x60 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_frame 0x0000000000000890 0x70 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + +.debug_str 0x0000000000000000 0x3d96 *(.debug_str) - .debug_str 0x0000000000000000 0xa9f USBtoSerial.o - 0xb57 (size before relaxing) - .debug_str 0x0000000000000a9f 0x8ba Descriptors.o + .debug_str 0x0000000000000000 0xad8 USBtoSerial.o + 0xb90 (size before relaxing) + .debug_str 0x0000000000000ad8 0x8ba Descriptors.o 0xa07 (size before relaxing) - .debug_str 0x0000000000001359 0x47c ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_str 0x0000000000001392 0x47c ../../LUFA/Drivers/USB/Class/Common/HIDParser.o 0x5e7 (size before relaxing) - .debug_str 0x00000000000017d5 0x77 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_str 0x000000000000180e 0x77 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o 0x14a (size before relaxing) - .debug_str 0x000000000000184c 0x592 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_str 0x0000000000001885 0x592 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o 0x760 (size before relaxing) - .debug_str 0x0000000000001dde 0x212 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_str 0x0000000000001e17 0x212 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o 0x55c (size before relaxing) - .debug_str 0x0000000000001ff0 0x2d ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_str 0x0000000000002029 0x2d ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o 0xf2 (size before relaxing) - .debug_str 0x000000000000201d 0x33 ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_str 0x0000000000002056 0x33 ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o 0xf8 (size before relaxing) - .debug_str 0x0000000000002050 0x2d ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_str 0x0000000000002089 0x2d ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o 0xf2 (size before relaxing) - .debug_str 0x000000000000207d 0x209 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_str 0x00000000000020b6 0x209 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o 0x41b (size before relaxing) - .debug_str 0x0000000000002286 0x113 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_str 0x00000000000022bf 0x113 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o 0x41d (size before relaxing) - .debug_str 0x0000000000002399 0x227 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_str 0x00000000000023d2 0x227 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o 0x332 (size before relaxing) - .debug_str 0x00000000000025c0 0x3b2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_str 0x00000000000025f9 0x3b2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o 0x850 (size before relaxing) - .debug_str 0x0000000000002972 0x34 ../../LUFA/Drivers/USB/Core/Events.o + .debug_str 0x00000000000029ab 0x34 ../../LUFA/Drivers/USB/Core/Events.o 0xf9 (size before relaxing) - .debug_str 0x00000000000029a6 0x2e ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_str 0x00000000000029df 0x2e ../../LUFA/Drivers/USB/Core/HostStandardReq.o 0xf3 (size before relaxing) - .debug_str 0x00000000000029d4 0x4e ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_str 0x0000000000002a0d 0x4e ../../LUFA/Drivers/USB/Core/USBTask.o 0x2a0 (size before relaxing) - .debug_str 0x0000000000002a22 0x239 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_str 0x0000000000002a5b 0x239 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o 0x520 (size before relaxing) - .debug_str 0x0000000000002c5b 0x2fa ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_str 0x0000000000002c94 0x2fa ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o 0x8d4 (size before relaxing) - .debug_str 0x0000000000002f55 0x1ed ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_str 0x0000000000002f8e 0x1ed ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o 0x54f (size before relaxing) - .debug_str 0x0000000000003142 0x23d ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_str 0x000000000000317b 0x23d ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o 0x6b0 (size before relaxing) - .debug_str 0x000000000000337f 0x118 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_str 0x00000000000033b8 0x118 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o 0x537 (size before relaxing) - .debug_str 0x0000000000003497 0x6e8 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_str 0x00000000000034d0 0x6e8 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o 0xbe8 (size before relaxing) - .debug_str 0x0000000000003b7f 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_str 0x0000000000003bb8 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o 0x103 (size before relaxing) - .debug_str 0x0000000000003bbd 0x33 ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_str 0x0000000000003bf6 0x33 ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o 0xf8 (size before relaxing) - .debug_str 0x0000000000003bf0 0x31 ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_str 0x0000000000003c29 0x31 ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o 0xf6 (size before relaxing) - .debug_str 0x0000000000003c21 0x31 ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_str 0x0000000000003c5a 0x31 ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o 0xf6 (size before relaxing) - .debug_str 0x0000000000003c52 0x39 ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_str 0x0000000000003c8b 0x39 ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o 0xfe (size before relaxing) - .debug_str 0x0000000000003c8b 0x32 ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_str 0x0000000000003cc4 0x32 ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o 0xf7 (size before relaxing) - .debug_str 0x0000000000003cbd 0x35 ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_str 0x0000000000003cf6 0x35 ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o 0xfa (size before relaxing) - .debug_str 0x0000000000003cf2 0x33 ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_str 0x0000000000003d2b 0x33 ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o 0xf8 (size before relaxing) - .debug_str 0x0000000000003d25 0x38 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + .debug_str 0x0000000000003d5e 0x38 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o 0xfd (size before relaxing) -.debug_loc 0x0000000000000000 0x4a7a +.debug_loc 0x0000000000000000 0x4b07 *(.debug_loc) - .debug_loc 0x0000000000000000 0x9de USBtoSerial.o - .debug_loc 0x00000000000009de 0xd3 Descriptors.o - .debug_loc 0x0000000000000ab1 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_loc 0x0000000000001340 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_loc 0x0000000000002cc2 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_loc 0x0000000000003052 0x190 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_loc 0x00000000000031e2 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_loc 0x000000000000349e 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_loc 0x00000000000036c8 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_loc 0x00000000000036ef 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_loc 0x000000000000385c 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_loc 0x0000000000003d87 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_loc 0x0000000000003fd0 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_loc 0x0000000000004122 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_loc 0x0000000000004318 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_loc 0x0000000000000000 0xa6b USBtoSerial.o + .debug_loc 0x0000000000000a6b 0xd3 Descriptors.o + .debug_loc 0x0000000000000b3e 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_loc 0x00000000000013cd 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_loc 0x0000000000002d4f 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_loc 0x00000000000030df 0x190 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_loc 0x000000000000326f 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_loc 0x000000000000352b 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_loc 0x0000000000003755 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_loc 0x000000000000377c 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_loc 0x00000000000038e9 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_loc 0x0000000000003e14 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_loc 0x000000000000405d 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_loc 0x00000000000041af 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_loc 0x00000000000043a5 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .debug_macinfo *(.debug_macinfo) @@ -1437,25 +1442,25 @@ LOAD linker stubs .debug_pubtypes 0x00000000000010ff 0x12 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o -.debug_ranges 0x0000000000000000 0x818 - .debug_ranges 0x0000000000000000 0x180 USBtoSerial.o - .debug_ranges 0x0000000000000180 0x10 Descriptors.o - .debug_ranges 0x0000000000000190 0x100 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_ranges 0x0000000000000290 0x10 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_ranges 0x00000000000002a0 0x298 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_ranges 0x0000000000000538 0xa8 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_ranges 0x00000000000005e0 0x20 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_ranges 0x0000000000000600 0x28 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_ranges 0x0000000000000628 0x28 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_ranges 0x0000000000000650 0x10 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_ranges 0x0000000000000660 0x10 ../../LUFA/Drivers/USB/Core/Events.o - .debug_ranges 0x0000000000000670 0x10 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_ranges 0x0000000000000680 0x20 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_ranges 0x00000000000006a0 0x88 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_ranges 0x0000000000000728 0x20 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_ranges 0x0000000000000748 0x20 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_ranges 0x0000000000000768 0x30 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_ranges 0x0000000000000798 0x80 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o +.debug_ranges 0x0000000000000000 0x828 + .debug_ranges 0x0000000000000000 0x190 USBtoSerial.o + .debug_ranges 0x0000000000000190 0x10 Descriptors.o + .debug_ranges 0x00000000000001a0 0x100 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_ranges 0x00000000000002a0 0x10 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_ranges 0x00000000000002b0 0x298 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_ranges 0x0000000000000548 0xa8 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_ranges 0x00000000000005f0 0x20 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_ranges 0x0000000000000610 0x28 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_ranges 0x0000000000000638 0x28 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_ranges 0x0000000000000660 0x10 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_ranges 0x0000000000000670 0x10 ../../LUFA/Drivers/USB/Core/Events.o + .debug_ranges 0x0000000000000680 0x10 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_ranges 0x0000000000000690 0x20 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_ranges 0x00000000000006b0 0x88 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_ranges 0x0000000000000738 0x20 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_ranges 0x0000000000000758 0x20 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_ranges 0x0000000000000778 0x30 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_ranges 0x00000000000007a8 0x80 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o Cross Reference Table @@ -1798,6 +1803,7 @@ phase_pattern USBtoSerial.o plate_pos_x USBtoSerial.o plate_pos_y USBtoSerial.o pos_report USBtoSerial.o +print_steps_in_mm USBtoSerial.o set_x USBtoSerial.o set_y USBtoSerial.o sign USBtoSerial.o @@ -1814,6 +1820,7 @@ touchpad_set_abs_mode USBtoSerial.o touchpad_set_rel_mode_100dpi USBtoSerial.o touchpad_set_rel_mode_200dpi USBtoSerial.o uart_print_number USBtoSerial.o +uart_print_number_wlzeros USBtoSerial.o uart_print_signed_number USBtoSerial.o uart_putc USBtoSerial.o uart_puts USBtoSerial.o diff --git a/firmware/USBtoSerial.o b/firmware/USBtoSerial.o index e19b913..09e575e 100644 Binary files a/firmware/USBtoSerial.o and b/firmware/USBtoSerial.o differ diff --git a/firmware/USBtoSerial.sym b/firmware/USBtoSerial.sym index 0d09d6c..ebc5891 100644 --- a/firmware/USBtoSerial.sym +++ b/firmware/USBtoSerial.sym @@ -269,131 +269,132 @@ 000007c4 T uart_putc 000007d4 T uart_puts 000007fa T my_uitoa -000008ca T sign -000008e2 T uart_print_number -00000902 T uart_print_signed_number -0000093e T init_motors -00000958 T motor_step -000009bc T move_plate -00000a52 T pos_report -00000a8c T parse_command -00000dc8 T main -00000e76 T CALLBACK_USB_GetDescriptor -00000ed0 T Endpoint_Write_Control_Stream_LE -00000f84 T Endpoint_Write_Control_PStream_LE -0000103a T Endpoint_ConfigureEndpoint_Prv -000010a8 T Endpoint_ConfigureEndpointTable -00001130 T Endpoint_ClearStatusStage -0000116e T Endpoint_WaitUntilReady -000011d4 T USB_ResetInterface -00001244 T USB_Init -00001256 T USB_INT_DisableAllInterrupts -0000125c T USB_INT_ClearAllInterrupts -00001262 T __vector_11 -000013aa T __vector_12 -00001420 T USB_Device_ProcessControlRequest -000016e4 W EVENT_USB_Device_Reset -000016e4 W EVENT_USB_Device_StartOfFrame -000016e4 W EVENT_USB_Device_Suspend -000016e4 W EVENT_USB_Device_WakeUp -000016e4 T USB_Event_Stub -000016e6 T USB_USBTask -0000171c T CDC_Device_ProcessControlRequest -00001876 T CDC_Device_ConfigureEndpoints -000018be T CDC_Device_SendByte -00001918 T CDC_Device_Flush -00001972 T CDC_Device_USBTask -000019a0 T CDC_Device_ReceiveByte -000019fa T CDC_Device_Event_Stub -000019fa W EVENT_CDC_Device_BreakSent -000019fa W EVENT_CDC_Device_ControLineStateChanged -000019fc T __subsf3 -000019fe T __addsf3 -00001a20 T __addsf3x -00001ac6 T __cmpsf2 -00001ac6 T __eqsf2 -00001ac6 T __lesf2 -00001ac6 T __ltsf2 -00001ac6 T __nesf2 -00001ace T __divsf3 -00001ae8 T __divsf3x -00001aec T __divsf3_pse -00001b9e T __fixunssfsi -00001bf6 T __floatunsisf -00001bfa T __floatsisf -00001c70 T __fp_cmp -00001cb8 T __fp_inf -00001cc4 T __fp_nan -00001cca T __fp_pscA -00001cd8 T __fp_pscB -00001ce6 T __fp_round -00001d08 T __fp_split3 -00001d18 T __fp_splitA -00001d4c T __fp_zero -00001d4e T __fp_szero -00001d5a T __gesf2 -00001d5a T __gtsf2 -00001d62 T __mulhi3 -00001d66 t __mulhi3_loop -00001d6e t __mulhi3_skip1 -00001d80 t __mulhi3_exit -00001d86 T __udivmodhi4 -00001d8e t __udivmodhi4_loop -00001d9c t __udivmodhi4_ep -00001dae T __divmodhi4 -00001dae T _div -00001dc2 t __divmodhi4_neg2 -00001dc8 t __divmodhi4_exit -00001dca t __divmodhi4_neg1 -00001dd4 T __udivmodsi4 -00001de0 t __udivmodsi4_loop -00001dfa t __udivmodsi4_ep -00001e18 T atoi -00001e52 T strncpy -00001e70 T __mulhi_const_10 -00001e84 T _exit -00001e84 W exit -00001e86 t __stop_program -00001e88 A __data_load_start -00001e88 T _etext -00001f02 A __data_load_end +000008c6 T sign +000008de T uart_print_number_wlzeros +00000906 T uart_print_signed_number +0000094c T init_motors +00000966 T motor_step +000009ca T move_plate +00000a60 T print_steps_in_mm +00000ab4 T pos_report +00000ada T parse_command +00000e38 T main +00000ee6 T CALLBACK_USB_GetDescriptor +00000f40 T Endpoint_Write_Control_Stream_LE +00000ff4 T Endpoint_Write_Control_PStream_LE +000010aa T Endpoint_ConfigureEndpoint_Prv +00001118 T Endpoint_ConfigureEndpointTable +000011a0 T Endpoint_ClearStatusStage +000011de T Endpoint_WaitUntilReady +00001244 T USB_ResetInterface +000012b4 T USB_Init +000012c6 T USB_INT_DisableAllInterrupts +000012cc T USB_INT_ClearAllInterrupts +000012d2 T __vector_11 +0000141a T __vector_12 +00001490 T USB_Device_ProcessControlRequest +00001754 W EVENT_USB_Device_Reset +00001754 W EVENT_USB_Device_StartOfFrame +00001754 W EVENT_USB_Device_Suspend +00001754 W EVENT_USB_Device_WakeUp +00001754 T USB_Event_Stub +00001756 T USB_USBTask +0000178c T CDC_Device_ProcessControlRequest +000018e6 T CDC_Device_ConfigureEndpoints +0000192e T CDC_Device_SendByte +00001988 T CDC_Device_Flush +000019e2 T CDC_Device_USBTask +00001a10 T CDC_Device_ReceiveByte +00001a6a T CDC_Device_Event_Stub +00001a6a W EVENT_CDC_Device_BreakSent +00001a6a W EVENT_CDC_Device_ControLineStateChanged +00001a6c T __subsf3 +00001a6e T __addsf3 +00001a90 T __addsf3x +00001b36 T __cmpsf2 +00001b36 T __eqsf2 +00001b36 T __lesf2 +00001b36 T __ltsf2 +00001b36 T __nesf2 +00001b3e T __divsf3 +00001b58 T __divsf3x +00001b5c T __divsf3_pse +00001c0e T __fixunssfsi +00001c66 T __floatunsisf +00001c6a T __floatsisf +00001ce0 T __fp_cmp +00001d28 T __fp_inf +00001d34 T __fp_nan +00001d3a T __fp_pscA +00001d48 T __fp_pscB +00001d56 T __fp_round +00001d78 T __fp_split3 +00001d88 T __fp_splitA +00001dbc T __fp_zero +00001dbe T __fp_szero +00001dca T __gesf2 +00001dca T __gtsf2 +00001dd2 T __mulhi3 +00001dd6 t __mulhi3_loop +00001dde t __mulhi3_skip1 +00001df0 t __mulhi3_exit +00001df6 T __udivmodhi4 +00001dfe t __udivmodhi4_loop +00001e0c t __udivmodhi4_ep +00001e1e T __divmodhi4 +00001e1e T _div +00001e32 t __divmodhi4_neg2 +00001e38 t __divmodhi4_exit +00001e3a t __divmodhi4_neg1 +00001e44 T __udivmodsi4 +00001e50 t __udivmodsi4_loop +00001e6a t __udivmodsi4_ep +00001e88 T atoi +00001ec2 T strncpy +00001ee0 T __mulhi_const_10 +00001ef4 T _exit +00001ef4 W exit +00001ef6 t __stop_program +00001ef8 A __data_load_start +00001ef8 T _etext +00001f46 A __data_load_end 00800100 D __data_start -00800154 D VirtualSerial_CDC_Interface -0080016f D phase_pattern -00800173 d CSWTCH.34 -00800175 d CSWTCH.37 -0080017a B __bss_start -0080017a D __data_end -0080017a D _edata -0080017a B plate_pos_x -0080017c B plate_pos_y -0080017e b USBtoUSART_Buffer -0080018a b USBtoUSART_Buffer_Data -0080020a b USARTtoUSB_Buffer -00800216 b USARTtoUSB_Buffer_Data -00800296 b nums_found.4223 -00800297 b num_start.4222 -00800298 b curCmdLen.4221 -00800299 b cmdPos.4220 -0080029a b postdot.4219 -0080029c b predot.4218 -0080029e b numbuffer.4217 -008002ae b cmdbuffer.4216 -008002be b todo_y.4207 -008002c0 b todo_x.4206 -008002c2 b phase_memory.4188 -008002c4 b y_mem.4090 -008002c6 b x_mem.4089 -008002c8 b last_pressure.4084 -008002c9 B adb_werte -008002d2 B stringbuffer -008002e2 B t0ovfcount -008002e3 B adb_data_length -008002e4 B USB_Device_ConfigurationNumber -008002e5 B USB_Device_CurrentlySelfPowered -008002e6 B USB_Device_RemoteWakeupEnabled -008002e7 B USB_IsInitialized -008002e8 B USB_ControlRequest -008002f0 B __bss_end -008002f0 N _end +00800128 D VirtualSerial_CDC_Interface +00800143 D phase_pattern +00800147 d CSWTCH.35 +00800149 d CSWTCH.38 +0080014e B __bss_start +0080014e D __data_end +0080014e D _edata +0080014e B plate_pos_x +00800150 B plate_pos_y +00800152 b USBtoUSART_Buffer +0080015e b USBtoUSART_Buffer_Data +008001de b USARTtoUSB_Buffer +008001ea b USARTtoUSB_Buffer_Data +0080026a b nums_found.4233 +0080026b b num_start.4232 +0080026c b curCmdLen.4231 +0080026d b cmdPos.4230 +0080026e b postdot.4229 +00800270 b predot.4228 +00800272 b numbuffer.4227 +00800282 b cmdbuffer.4226 +008002a2 b todo_y.4212 +008002a4 b todo_x.4211 +008002a6 b phase_memory.4193 +008002a8 b y_mem.4090 +008002aa b x_mem.4089 +008002ac b last_pressure.4084 +008002ad B adb_werte +008002b6 B stringbuffer +008002c6 B t0ovfcount +008002c7 B adb_data_length +008002c8 B USB_Device_ConfigurationNumber +008002c9 B USB_Device_CurrentlySelfPowered +008002ca B USB_Device_RemoteWakeupEnabled +008002cb B USB_IsInitialized +008002cc B USB_ControlRequest +008002d4 B __bss_end +008002d4 N _end 00810000 N __eeprom_end