diff options
| -rw-r--r-- | firmware/libs-device/osccal.c.lst | 20 | ||||
| -rwxr-xr-x | firmware/main.bin | bin | 8957 -> 8969 bytes | |||
| -rw-r--r-- | firmware/main.c | 32 | ||||
| -rw-r--r-- | firmware/main.c.lst | 1721 | ||||
| -rw-r--r-- | firmware/main.hex | 173 | ||||
| -rw-r--r-- | firmware/main.map | 30 | ||||
| -rw-r--r-- | firmware/main.o | bin | 5936 -> 6024 bytes | |||
| -rw-r--r-- | firmware/temp-dump.bin | bin | 7646 -> 8192 bytes | |||
| -rw-r--r-- | firmware/upload.rb | 12 | ||||
| -rw-r--r-- | firmware/usbdrv/oddebug.c.lst | 16 | 
10 files changed, 1012 insertions, 992 deletions
| diff --git a/firmware/libs-device/osccal.c.lst b/firmware/libs-device/osccal.c.lst index 9fdc23f..6ce3b5d 100644 --- a/firmware/libs-device/osccal.c.lst +++ b/firmware/libs-device/osccal.c.lst @@ -1,4 +1,4 @@ -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s 			page 1 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cccllqfj.s 			page 1     1               		.file	"osccal.c" @@ -58,7 +58,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s 			page    55 0046 8C17      		cp r24,r28    56 0048 9D07      		cpc r25,r29    57 004a 04F4      		brge .L6 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s 			page 2 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cccllqfj.s 			page 2    58 004c 01B7      		in r16,81-32 @@ -85,18 +85,18 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s 			page    79 0070 FF90      		pop r15    80 0072 0895      		ret    81               		.size	calibrateOscillator, .-calibrateOscillator -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s 			page 3 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cccllqfj.s 			page 3  DEFINED SYMBOLS                              *ABS*:00000000 osccal.c -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s:2      *ABS*:0000003f __SREG__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s:3      *ABS*:0000003e __SP_H__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s:4      *ABS*:0000003d __SP_L__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s:5      *ABS*:00000034 __CCP__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s:6      *ABS*:00000000 __tmp_reg__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s:7      *ABS*:00000001 __zero_reg__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccrIFbGt.s:11     .text:00000000 calibrateOscillator +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cccllqfj.s:2      *ABS*:0000003f __SREG__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cccllqfj.s:3      *ABS*:0000003e __SP_H__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cccllqfj.s:4      *ABS*:0000003d __SP_L__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cccllqfj.s:5      *ABS*:00000034 __CCP__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cccllqfj.s:6      *ABS*:00000000 __tmp_reg__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cccllqfj.s:7      *ABS*:00000001 __zero_reg__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cccllqfj.s:11     .text:00000000 calibrateOscillator  UNDEFINED SYMBOLS  usbMeasureFrameLength diff --git a/firmware/main.bin b/firmware/main.binBinary files differ index 5febd6d..a5a6933 100755 --- a/firmware/main.bin +++ b/firmware/main.bin diff --git a/firmware/main.c b/firmware/main.c index 77493a6..84cc11e 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -26,7 +26,7 @@ static void leaveBootloader() __attribute__((__noreturn__));  #include "usbdrv/usbdrv.c"  // how many milliseconds should host wait till it sends another write? -// this needs to be above 9, 12 is too low to be reliable, 15 seems to work, 20 seems safer +// this needs to be above 9, 12 is too low to be reliable, 15 seems to work reliably, 20 seems safe  #define UBOOT_WRITE_SLEEP 20  /* ------------------------------------------------------------------------ */ @@ -71,7 +71,7 @@ static void leaveBootloader() __attribute__((__noreturn__));  // outstanding events for the mainloop to deal with  static uchar events = 0; // bitmap of events to run -#define EVENT_PAGE_NEEDS_ERASE 1 +#define EVENT_ERASE_APPLICATION 1  #define EVENT_WRITE_PAGE 2  #define EVENT_EXIT_BOOTLOADER 4 @@ -96,11 +96,17 @@ static addr_t  currentAddress; /* in bytes */  /* ------------------------------------------------------------------------ */ -static inline void eraseFlashPage(void) { -    cli(); -    boot_page_erase(currentAddress - 2); -    boot_spm_busy_wait(); -    sei(); +static inline void eraseApplication(void) { +    // erase all pages starting from end of application section down to page 1 (leaving page 0) +    currentAddress = BOOTLOADER_ADDRESS - SPM_PAGESIZE; +    while (currentAddress) { +        cli(); +        boot_page_erase(currentAddress); +        boot_spm_busy_wait(); +        sei(); +         +        currentAddress -= SPM_PAGESIZE; +    }  }  static void writeFlashPage(void) { @@ -149,9 +155,9 @@ static void writeWordToPageBuffer(uint16_t data) {  	// only need to erase if there is data already in the page that doesn't match what we're programming  	// TODO: what about this: if (pgm_read_word(currentAddress) & data != data) { ??? should work right?  	//if (pgm_read_word(currentAddress) != data && pgm_read_word(currentAddress) != 0xFFFF) { -    if ((pgm_read_word(currentAddress) & data) != data) { -        fireEvent(EVENT_PAGE_NEEDS_ERASE); -    } +    //if ((pgm_read_word(currentAddress) & data) != data) { +    //    fireEvent(EVENT_PAGE_NEEDS_ERASE); +    //}      currentAddress += 2;  } @@ -185,7 +191,10 @@ static uchar usbFunctionSetup(uchar data[8]) {      } else if (rq->bRequest == 1) { // write page          writeLength = rq->wValue.word;          currentAddress = rq->wIndex.word; +                  return USB_NO_MSG; // magical? IDK - USBaspLoader-tiny85 returns this and it works so whatever. +    } else if (rq->bRequest == 2) { // erase application +        fireEvent(EVENT_ERASE_APPLICATION);      } else { // exit bootloader  #if BOOTLOADER_CAN_EXIT @@ -306,7 +315,6 @@ int __attribute__((noreturn)) main(void) {      /* initialize  */      wdt_disable();      /* main app may have enabled watchdog */      tiny85FlashInit(); -    currentAddress = 0; // TODO: think about if this is necessary      bootLoaderInit(); @@ -322,7 +330,7 @@ int __attribute__((noreturn)) main(void) {              // these next two freeze the chip for ~ 4.5ms, breaking usb protocol              // and usually both of these will activate in the same loop, so host              // needs to wait > 9ms before next usb request -            if (isEvent(EVENT_PAGE_NEEDS_ERASE)) eraseFlashPage(); +            if (isEvent(EVENT_ERASE_APPLICATION)) eraseApplication();              if (isEvent(EVENT_WRITE_PAGE)) tiny85FlashWrites();  #           if BOOTLOADER_CAN_EXIT diff --git a/firmware/main.c.lst b/firmware/main.c.lst index fa10ab1..376b81d 100644 --- a/firmware/main.c.lst +++ b/firmware/main.c.lst @@ -1,4 +1,4 @@ -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 1 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 1     1               		.file	"main.c" @@ -18,7 +18,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page    15 0000 81E0      		ldi r24,lo8(1)    16 0002 8093 0000 		sts didWriteSomething,r24    17               	/* #APP */ -  18               	 ;  108 "main.c" 1 +  18               	 ;  114 "main.c" 1    19 0006 F894      		cli    20               	 ;  0 "" 2    21               	/* #NOAPP */ @@ -27,7 +27,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page    24 0010 3297      		sbiw r30,2    25 0012 85E0      		ldi r24,lo8(5)    26               	/* #APP */ -  27               	 ;  109 "main.c" 1 +  27               	 ;  115 "main.c" 1    28 0014 8093 5700 		sts 87, r24    29 0018 E895      		spm    30               		 @@ -38,7 +38,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page    35 001c 00FC      		sbrc __tmp_reg__,0    36 001e 00C0      		rjmp .L2    37               	/* #APP */ -  38               	 ;  111 "main.c" 1 +  38               	 ;  117 "main.c" 1    39 0020 7894      		sei    40               	 ;  0 "" 2    41               	/* epilogue start */ @@ -55,876 +55,877 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page    52 0028 3091 0000 		lds r19,currentAddress+1    53 002c 2115      		cp r18,__zero_reg__    54 002e 3105      		cpc r19,__zero_reg__ -  55 0030 01F4      		brne .+2 -  56 0032 00C0      		rjmp .L4 -  57 0034 2430      		cpi r18,4 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 2 - - -  58 0036 3105      		cpc r19,__zero_reg__ -  59 0038 01F0      		breq .L9 -  60 003a 46E1      		ldi r20,hi8(5884) -  61 003c 2C3F      		cpi r18,lo8(5884) -  62 003e 3407      		cpc r19,r20 -  63 0040 01F4      		brne .L6 -  64 0042 8091 0000 		lds r24,vectorTemp -  65 0046 9091 0000 		lds r25,vectorTemp+1 -  66 004a 8E57      		subi r24,lo8(-(1154)) -  67 004c 9B4F      		sbci r25,hi8(-(1154)) -  68 004e 00C0      		rjmp .L7 -  69               	.L6: -  70 0050 46E1      		ldi r20,hi8(5886) -  71 0052 2E3F      		cpi r18,lo8(5886) -  72 0054 3407      		cpc r19,r20 -  73 0056 01F4      		brne .L7 -  74 0058 8091 0000 		lds r24,vectorTemp+2 -  75 005c 9091 0000 		lds r25,vectorTemp+2+1 -  76 0060 8D57      		subi r24,lo8(-(1155)) -  77 0062 9B4F      		sbci r25,hi8(-(1155)) -  78 0064 00C0      		rjmp .L7 -  79               	.L9: -  80 0066 8FE7      		ldi r24,lo8(-13441) -  81 0068 9BEC      		ldi r25,hi8(-13441) -  82               	.L7: -  83               	/* #APP */ -  84               	 ;  145 "main.c" 1 -  85 006a F894      		cli -  86               	 ;  0 "" 2 -  87               	/* #NOAPP */ -  88 006c E091 0000 		lds r30,currentAddress -  89 0070 F091 0000 		lds r31,currentAddress+1 -  90 0074 21E0      		ldi r18,lo8(1) -  91               	/* #APP */ -  92               	 ;  146 "main.c" 1 -  93 0076 0C01      		movw  r0, r24 -  94 0078 2093 5700 		sts 87, r18 -  95 007c E895      		spm -  96 007e 1124      		clr  r1 -  97               		 -  98               	 ;  0 "" 2 -  99               	 ;  147 "main.c" 1 - 100 0080 7894      		sei - 101               	 ;  0 "" 2 - 102               	/* #NOAPP */ - 103 0082 4091 0000 		lds r20,currentAddress - 104 0086 5091 0000 		lds r21,currentAddress+1 - 105 008a FA01      		movw r30,r20 - 106               	/* #APP */ - 107               	 ;  152 "main.c" 1 - 108 008c 2591      		lpm r18, Z+ - 109 008e 3491      		lpm r19, Z - 110               		 - 111               	 ;  0 "" 2 - 112               	/* #NOAPP */ - 113 0090 2823      		and r18,r24 - 114 0092 3923      		and r19,r25 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 3 - - - 115 0094 2817      		cp r18,r24 - 116 0096 3907      		cpc r19,r25 - 117 0098 01F0      		breq .L8 - 118 009a 8091 0000 		lds r24,events - 119 009e 8160      		ori r24,lo8(1) - 120 00a0 8093 0000 		sts events,r24 - 121               	.L8: - 122 00a4 4E5F      		subi r20,lo8(-(2)) - 123 00a6 5F4F      		sbci r21,hi8(-(2)) - 124 00a8 5093 0000 		sts currentAddress+1,r21 - 125 00ac 4093 0000 		sts currentAddress,r20 - 126               	/* epilogue start */ - 127 00b0 0895      		ret - 128               	.L4: - 129 00b2 81E1      		ldi r24,lo8(17) - 130               	/* #APP */ - 131               	 ;  143 "main.c" 1 - 132 00b4 8093 5700 		sts 87, r24 - 133 00b8 E895      		spm - 134               		 - 135               	 ;  0 "" 2 - 136               	/* #NOAPP */ - 137 00ba 00C0      		rjmp .L9 - 138               		.size	writeWordToPageBuffer, .-writeWordToPageBuffer - 139               		.type	fillFlashWithVectors, @function - 140               	fillFlashWithVectors: - 141 00bc CF93      		push r28 - 142 00be DF93      		push r29 - 143               	/* prologue: function */ - 144               	/* frame size = 0 */ - 145               	/* stack size = 2 */ - 146               	.L__stack_usage = 2 - 147 00c0 C091 0000 		lds r28,currentAddress - 148 00c4 D091 0000 		lds r29,currentAddress+1 - 149 00c8 CF73      		andi r28,lo8(63) - 150 00ca D070      		andi r29,hi8(63) - 151               	.L11: - 152 00cc 8FEF      		ldi r24,lo8(-1) - 153 00ce 9FEF      		ldi r25,hi8(-1) - 154 00d0 00D0      		rcall writeWordToPageBuffer - 155 00d2 2296      		adiw r28,2 - 156 00d4 C034      		cpi r28,64 - 157 00d6 D105      		cpc r29,__zero_reg__ - 158 00d8 04F0      		brlt .L11 - 159 00da 00D0      		rcall writeFlashPage - 160               	/* epilogue start */ - 161 00dc DF91      		pop r29 - 162 00de CF91      		pop r28 - 163 00e0 0895      		ret - 164               		.size	fillFlashWithVectors, .-fillFlashWithVectors - 165               		.section	.init3,"ax",@progbits - 166               	.global	PushMagicWord - 167               		.type	PushMagicWord, @function - 168               	PushMagicWord: - 169               	/* prologue: naked */ - 170               	/* frame size = 0 */ - 171               	/* stack size = 0 */ -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 4 - - - 172               	.L__stack_usage = 0 - 173               	/* #APP */ - 174               	 ;  239 "main.c" 1 - 175 0000 00EB      		ldi r16, 0xB0 - 176               	 ;  0 "" 2 - 177               	 ;  240 "main.c" 1 - 178 0002 0F93      		push r16 - 179               	 ;  0 "" 2 - 180               	 ;  241 "main.c" 1 - 181 0004 07E0      		ldi r16, 0x07 - 182               	 ;  0 "" 2 - 183               	 ;  242 "main.c" 1 - 184 0006 0F93      		push r16 - 185               	 ;  0 "" 2 - 186               	/* epilogue start */ - 187               	/* #NOAPP */ - 188               		.size	PushMagicWord, .-PushMagicWord - 189               		.text - 190               	.global	main - 191               		.type	main, @function - 192               	main: - 193 00e2 DF93      		push r29 - 194 00e4 CF93      		push r28 - 195 00e6 0F92      		push __tmp_reg__ - 196 00e8 CDB7      		in r28,__SP_L__ - 197 00ea DEB7      		in r29,__SP_H__ - 198               	/* prologue: function */ - 199               	/* frame size = 1 */ - 200               	/* stack size = 3 */ - 201               	.L__stack_usage = 3 - 202 00ec 88E1      		ldi r24,lo8(24) - 203               	/* #APP */ - 204               	 ;  307 "main.c" 1 - 205 00ee 0FB6      		in __tmp_reg__, __SREG__ - 206 00f0 F894      		cli - 207 00f2 81BD      		out 33, r24 - 208 00f4 11BC      		out 33, __zero_reg__ - 209 00f6 0FBE      		out __SREG__,__tmp_reg__ - 210               		 - 211               	 ;  0 "" 2 - 212               	/* #NOAPP */ - 213 00f8 E0E0      		ldi r30,lo8(0) - 214 00fa F0E0      		ldi r31,hi8(0) - 215               	/* #APP */ - 216               	 ;  260 "main.c" 1 - 217 00fc 8591      		lpm r24, Z+ - 218 00fe 9491      		lpm r25, Z - 219               		 - 220               	 ;  0 "" 2 - 221               	/* #NOAPP */ - 222 0100 2BEC      		ldi r18,hi8(-13441) - 223 0102 8F37      		cpi r24,lo8(-13441) - 224 0104 9207      		cpc r25,r18 - 225 0106 01F4      		brne .L14 - 226 0108 E4E0      		ldi r30,lo8(4) - 227 010a F0E0      		ldi r31,hi8(4) - 228               	/* #APP */ -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 5 - - - 229               	 ;  261 "main.c" 1 - 230 010c 8591      		lpm r24, Z+ - 231 010e 9491      		lpm r25, Z - 232               		 - 233               	 ;  0 "" 2 - 234               	/* #NOAPP */ - 235 0110 3BEC      		ldi r19,hi8(-13441) - 236 0112 8F37      		cpi r24,lo8(-13441) - 237 0114 9307      		cpc r25,r19 - 238 0116 01F0      		breq .L15 - 239               	.L14: - 240 0118 00D0      		rcall fillFlashWithVectors - 241               	.L15: - 242 011a 1092 0000 		sts currentAddress+1,__zero_reg__ - 243 011e 1092 0000 		sts currentAddress,__zero_reg__ - 244 0122 AC9A      		sbi 53-32,4 - 245 0124 8BB7      		in r24,91-32 - 246 0126 8062      		ori r24,lo8(32) - 247 0128 8BBF      		out 91-32,r24 - 248 012a BB9A      		sbi 55-32,3 - 249 012c 8FE4      		 ldi r24,lo8(1649999) - 250 012e 9DE2      	    ldi r25,hi8(1649999) - 251 0130 A9E1      	    ldi r26,hlo8(1649999) - 252 0132 8150      	    1:subi r24,1 - 253 0134 9040      	    sbci r25,0 - 254 0136 A040      	    sbci r26,0 - 255 0138 01F4      	    brne 1b - 256 013a 00C0      		rjmp . - 257 013c 0000      		nop - 258 013e BB98      		cbi 55-32,3 - 259               	/* #APP */ - 260               	 ;  253 "main.c" 1 - 261 0140 7894      		sei - 262               	 ;  0 "" 2 - 263               	/* #NOAPP */ - 264 0142 EE24      		clr r14 - 265 0144 FF24      		clr r15 - 266               	.L66: - 267 0146 2091 0000 		lds r18,usbRxLen - 268 014a 2350      		subi r18,lo8(-(-3)) - 269 014c 27FD      		sbrc r18,7 - 270 014e 00C0      		rjmp .L16 - 271 0150 8091 0000 		lds r24,usbInputBufOffset - 272 0154 ECE0      		ldi r30,lo8(12) - 273 0156 F0E0      		ldi r31,hi8(12) - 274 0158 E81B      		sub r30,r24 - 275 015a F109      		sbc r31,__zero_reg__ - 276 015c E050      		subi r30,lo8(-(usbRxBuf)) - 277 015e F040      		sbci r31,hi8(-(usbRxBuf)) - 278 0160 8091 0000 		lds r24,usbRxToken - 279 0164 8D32      		cpi r24,lo8(45) - 280 0166 01F0      		breq .+2 - 281 0168 00C0      		rjmp .L17 - 282 016a 2830      		cpi r18,lo8(8) - 283 016c 01F0      		breq .+2 - 284 016e 00C0      		rjmp .L18 - 285 0170 83EC      		ldi r24,lo8(-61) -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 6 - - - 286 0172 8093 0000 		sts usbTxBuf,r24 - 287 0176 8AE5      		ldi r24,lo8(90) - 288 0178 8093 0000 		sts usbTxLen,r24 - 289 017c 1092 0000 		sts usbMsgFlags,__zero_reg__ - 290 0180 2081      		ld r18,Z - 291 0182 922F      		mov r25,r18 - 292 0184 9076      		andi r25,lo8(96) - 293 0186 8181      		ldd r24,Z+1 - 294 0188 9923      		tst r25 - 295 018a 01F0      		breq .L19 - 296 018c 8823      		tst r24 - 297 018e 01F4      		brne .L20 - 298 0190 80E0      		ldi r24,lo8(replyBuffer.1745) - 299 0192 90E0      		ldi r25,hi8(replyBuffer.1745) - 300 0194 9093 0000 		sts usbMsgPtr+1,r25 - 301 0198 8093 0000 		sts usbMsgPtr,r24 - 302 019c 24E0      		ldi r18,lo8(4) - 303 019e 00C0      		rjmp .L25 - 304               	.L20: - 305 01a0 8130      		cpi r24,lo8(1) - 306 01a2 01F4      		brne .L22 - 307 01a4 8281      		ldd r24,Z+2 - 308 01a6 8093 0000 		sts writeLength,r24 - 309 01aa 8481      		ldd r24,Z+4 - 310 01ac 9581      		ldd r25,Z+5 - 311 01ae 9093 0000 		sts currentAddress+1,r25 - 312 01b2 8093 0000 		sts currentAddress,r24 - 313 01b6 27FD      		sbrc r18,7 - 314 01b8 00C0      		rjmp .L23 - 315 01ba 2FEF      		ldi r18,lo8(-1) - 316 01bc 00C0      		rjmp .L24 - 317               	.L22: - 318 01be 8091 0000 		lds r24,events - 319 01c2 8460      		ori r24,lo8(4) - 320 01c4 8093 0000 		sts events,r24 - 321 01c8 20E0      		ldi r18,lo8(0) - 322 01ca 00C0      		rjmp .L25 - 323               	.L19: - 324 01cc 9281      		ldd r25,Z+2 - 325 01ce 1092 0000 		sts usbTxBuf+9,__zero_reg__ - 326 01d2 8823      		tst r24 - 327 01d4 01F4      		brne .L26 - 328 01d6 1092 0000 		sts usbTxBuf+10,__zero_reg__ - 329 01da 80E0      		ldi r24,lo8(usbTxBuf+9) - 330 01dc 90E0      		ldi r25,hi8(usbTxBuf+9) - 331 01de 22E0      		ldi r18,lo8(2) - 332 01e0 00C0      		rjmp .L27 - 333               	.L26: - 334 01e2 8530      		cpi r24,lo8(5) - 335 01e4 01F4      		brne .L28 - 336 01e6 9093 0000 		sts usbNewDeviceAddr,r25 - 337 01ea 00C0      		rjmp .L73 - 338               	.L28: - 339 01ec 8630      		cpi r24,lo8(6) - 340 01ee 01F4      		brne .L29 - 341 01f0 8381      		ldd r24,Z+3 - 342 01f2 8130      		cpi r24,lo8(1) -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 7 - - - 343 01f4 01F4      		brne .L30 - 344 01f6 80E0      		ldi r24,lo8(usbDescriptorDevice) - 345 01f8 90E0      		ldi r25,hi8(usbDescriptorDevice) - 346 01fa 00C0      		rjmp .L72 - 347               	.L30: - 348 01fc 8230      		cpi r24,lo8(2) - 349 01fe 01F4      		brne .L32 - 350 0200 80E0      		ldi r24,lo8(usbDescriptorConfiguration) - 351 0202 90E0      		ldi r25,hi8(usbDescriptorConfiguration) - 352               	.L72: - 353 0204 9093 0000 		sts usbMsgPtr+1,r25 - 354 0208 8093 0000 		sts usbMsgPtr,r24 - 355 020c 22E1      		ldi r18,lo8(18) - 356 020e 00C0      		rjmp .L31 - 357               	.L32: - 358 0210 8330      		cpi r24,lo8(3) - 359 0212 01F4      		brne .L68 - 360 0214 9923      		tst r25 - 361 0216 01F4      		brne .L33 - 362 0218 80E0      		ldi r24,lo8(usbDescriptorString0) - 363 021a 90E0      		ldi r25,hi8(usbDescriptorString0) - 364 021c 9093 0000 		sts usbMsgPtr+1,r25 - 365 0220 8093 0000 		sts usbMsgPtr,r24 - 366 0224 24E0      		ldi r18,lo8(4) - 367 0226 00C0      		rjmp .L31 - 368               	.L33: - 369 0228 9130      		cpi r25,lo8(1) - 370 022a 01F4      		brne .L34 - 371 022c 80E0      		ldi r24,lo8(usbDescriptorStringVendor) - 372 022e 90E0      		ldi r25,hi8(usbDescriptorStringVendor) - 373 0230 9093 0000 		sts usbMsgPtr+1,r25 - 374 0234 8093 0000 		sts usbMsgPtr,r24 - 375 0238 22E2      		ldi r18,lo8(34) - 376 023a 00C0      		rjmp .L31 - 377               	.L34: - 378 023c 9230      		cpi r25,lo8(2) - 379 023e 01F4      		brne .L68 - 380 0240 80E0      		ldi r24,lo8(usbDescriptorStringDevice) - 381 0242 90E0      		ldi r25,hi8(usbDescriptorStringDevice) - 382 0244 9093 0000 		sts usbMsgPtr+1,r25 - 383 0248 8093 0000 		sts usbMsgPtr,r24 - 384 024c 2CE0      		ldi r18,lo8(12) - 385 024e 00C0      		rjmp .L31 - 386               	.L68: - 387 0250 20E0      		ldi r18,lo8(0) - 388               	.L31: - 389 0252 80E4      		ldi r24,lo8(64) - 390 0254 8093 0000 		sts usbMsgFlags,r24 - 391 0258 00C0      		rjmp .L25 - 392               	.L29: - 393 025a 8830      		cpi r24,lo8(8) - 394 025c 01F0      		breq .L69 - 395 025e 8930      		cpi r24,lo8(9) - 396 0260 01F4      		brne .L36 - 397 0262 9093 0000 		sts usbConfiguration,r25 - 398 0266 00C0      		rjmp .L73 - 399               	.L36: -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 8 - - - 400 0268 8A30      		cpi r24,lo8(10) - 401 026a 01F0      		breq .L70 - 402               	.L73: - 403 026c 80E0      		ldi r24,lo8(usbTxBuf+9) - 404 026e 90E0      		ldi r25,hi8(usbTxBuf+9) - 405 0270 20E0      		ldi r18,lo8(0) - 406 0272 00C0      		rjmp .L27 - 407               	.L69: - 408 0274 80E0      		ldi r24,lo8(usbConfiguration) - 409 0276 90E0      		ldi r25,hi8(usbConfiguration) - 410 0278 00C0      		rjmp .L74 - 411               	.L70: - 412 027a 80E0      		ldi r24,lo8(usbTxBuf+9) - 413 027c 90E0      		ldi r25,hi8(usbTxBuf+9) - 414               	.L74: - 415 027e 21E0      		ldi r18,lo8(1) - 416               	.L27: - 417 0280 9093 0000 		sts usbMsgPtr+1,r25 - 418 0284 8093 0000 		sts usbMsgPtr,r24 - 419 0288 00C0      		rjmp .L25 - 420               	.L23: - 421 028a 2681      		ldd r18,Z+6 - 422               	.L24: - 423 028c 80E8      		ldi r24,lo8(-128) - 424 028e 8093 0000 		sts usbMsgFlags,r24 - 425 0292 00C0      		rjmp .L37 - 426               	.L25: - 427 0294 8781      		ldd r24,Z+7 - 428 0296 8823      		tst r24 - 429 0298 01F4      		brne .L37 - 430 029a 8681      		ldd r24,Z+6 - 431 029c 8217      		cp r24,r18 - 432 029e 00F4      		brsh .L37 - 433 02a0 282F      		mov r18,r24 - 434               	.L37: - 435 02a2 2093 0000 		sts usbMsgLen,r18 - 436 02a6 00C0      		rjmp .L18 - 437               	.L17: - 438 02a8 8091 0000 		lds r24,usbMsgFlags - 439 02ac 87FF      		sbrs r24,7 - 440 02ae 00C0      		rjmp .L18 - 441 02b0 8091 0000 		lds r24,writeLength - 442 02b4 821B      		sub r24,r18 - 443 02b6 8093 0000 		sts writeLength,r24 - 444 02ba 8F01      		movw r16,r30 - 445               	.L42: - 446 02bc 8091 0000 		lds r24,currentAddress - 447 02c0 9091 0000 		lds r25,currentAddress+1 - 448 02c4 0097      		sbiw r24,0 - 449 02c6 01F4      		brne .L38 - 450 02c8 D801      		movw r26,r16 - 451 02ca 8D91      		ld r24,X+ - 452 02cc 9C91      		ld r25,X - 453 02ce 1197      		sbiw r26,1 - 454 02d0 9093 0000 		sts vectorTemp+1,r25 - 455 02d4 8093 0000 		sts vectorTemp,r24 - 456 02d8 00C0      		rjmp .L39 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 9 - - - 457               	.L38: - 458 02da 8430      		cpi r24,4 - 459 02dc 9105      		cpc r25,__zero_reg__ - 460 02de 01F4      		brne .L40 - 461 02e0 F801      		movw r30,r16 - 462 02e2 8081      		ld r24,Z - 463 02e4 9181      		ldd r25,Z+1 - 464 02e6 9093 0000 		sts vectorTemp+2+1,r25 - 465 02ea 8093 0000 		sts vectorTemp+2,r24 - 466 02ee 00C0      		rjmp .L39 - 467               	.L40: - 468 02f0 F6E1      		ldi r31,hi8(5882) - 469 02f2 8A3F      		cpi r24,lo8(5882) - 470 02f4 9F07      		cpc r25,r31 - 471 02f6 00F0      		brlo .L39 - 472 02f8 81E1      		ldi r24,lo8(17) - 473               	/* #APP */ - 474               	 ;  216 "main.c" 1 - 475 02fa 8093 5700 		sts 87, r24 - 476 02fe E895      		spm - 477               		 - 478               	 ;  0 "" 2 - 479               	/* #NOAPP */ - 480 0300 00C0      		rjmp .L41 - 481               	.L39: - 482 0302 D801      		movw r26,r16 - 483 0304 8D91      		ld r24,X+ - 484 0306 9D91      		ld r25,X+ - 485 0308 8D01      		movw r16,r26 - 486 030a 2983      		std Y+1,r18 - 487 030c 00D0      		rcall writeWordToPageBuffer - 488 030e 2981      		ldd r18,Y+1 - 489 0310 2250      		subi r18,lo8(-(-2)) - 490 0312 01F4      		brne .L42 - 491               	.L41: - 492 0314 8091 0000 		lds r24,writeLength - 493 0318 8823      		tst r24 - 494 031a 01F4      		brne .L18 - 495 031c 8091 0000 		lds r24,events - 496 0320 8260      		ori r24,lo8(2) - 497 0322 8093 0000 		sts events,r24 - 498 0326 1092 0000 		sts usbMsgLen,__zero_reg__ - 499               	.L18: - 500 032a 1092 0000 		sts usbRxLen,__zero_reg__ - 501               	.L16: - 502 032e 8091 0000 		lds r24,usbTxLen - 503 0332 84FF      		sbrs r24,4 - 504 0334 00C0      		rjmp .L43 - 505 0336 8091 0000 		lds r24,usbMsgLen - 506 033a 8F3F      		cpi r24,lo8(-1) - 507 033c 01F4      		brne .+2 - 508 033e 00C0      		rjmp .L43 - 509 0340 082F      		mov r16,r24 - 510 0342 8930      		cpi r24,lo8(9) - 511 0344 00F0      		brlo .L44 - 512 0346 08E0      		ldi r16,lo8(8) - 513               	.L44: -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 10 - - - 514 0348 801B      		sub r24,r16 - 515 034a 8093 0000 		sts usbMsgLen,r24 - 516 034e 8091 0000 		lds r24,usbTxBuf - 517 0352 98E8      		ldi r25,lo8(-120) - 518 0354 8927      		eor r24,r25 - 519 0356 8093 0000 		sts usbTxBuf,r24 - 520 035a 0023      		tst r16 - 521 035c 01F0      		breq .L45 - 522 035e E091 0000 		lds r30,usbMsgPtr - 523 0362 F091 0000 		lds r31,usbMsgPtr+1 - 524 0366 9091 0000 		lds r25,usbMsgFlags - 525 036a 802F      		mov r24,r16 - 526 036c 8150      		subi r24,lo8(-(-1)) - 527 036e 96FF      		sbrs r25,6 - 528 0370 00C0      		rjmp .L46 - 529 0372 90E0      		ldi r25,lo8(0) - 530 0374 8050      		subi r24,lo8(-(usbTxBuf+2)) - 531 0376 9040      		sbci r25,hi8(-(usbTxBuf+2)) - 532 0378 A0E0      		ldi r26,lo8(usbTxBuf+1) - 533 037a B0E0      		ldi r27,hi8(usbTxBuf+1) - 534               	.L47: - 535               	/* #APP */ - 536               	 ;  504 "usbdrv/usbdrv.c" 1 - 537 037c 2491      		lpm r18, Z - 538               		 - 539               	 ;  0 "" 2 - 540               	/* #NOAPP */ - 541 037e 2D93      		st X+,r18 - 542 0380 3196      		adiw r30,1 - 543 0382 A817      		cp r26,r24 - 544 0384 B907      		cpc r27,r25 - 545 0386 01F4      		brne .L47 - 546 0388 00C0      		rjmp .L48 - 547               	.L46: - 548 038a 9F01      		movw r18,r30 - 549 038c 90E0      		ldi r25,lo8(0) - 550 038e 8050      		subi r24,lo8(-(usbTxBuf+2)) - 551 0390 9040      		sbci r25,hi8(-(usbTxBuf+2)) - 552 0392 A0E0      		ldi r26,lo8(usbTxBuf+1) - 553 0394 B0E0      		ldi r27,hi8(usbTxBuf+1) - 554               	.L49: - 555 0396 F901      		movw r30,r18 - 556 0398 4191      		ld r20,Z+ - 557 039a 9F01      		movw r18,r30 - 558 039c 4D93      		st X+,r20 - 559 039e A817      		cp r26,r24 - 560 03a0 B907      		cpc r27,r25 - 561 03a2 01F4      		brne .L49 - 562               	.L48: - 563 03a4 F093 0000 		sts usbMsgPtr+1,r31 - 564 03a8 E093 0000 		sts usbMsgPtr,r30 - 565               	.L45: - 566 03ac 80E0      		ldi r24,lo8(usbTxBuf+1) - 567 03ae 90E0      		ldi r25,hi8(usbTxBuf+1) - 568 03b0 602F      		mov r22,r16 - 569 03b2 00D0      		rcall usbCrc16Append - 570 03b4 0C5F      		subi r16,lo8(-(4)) -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 11 - - - 571 03b6 0C30      		cpi r16,lo8(12) - 572 03b8 01F0      		breq .L50 - 573 03ba 8FEF      		ldi r24,lo8(-1) - 574 03bc 8093 0000 		sts usbMsgLen,r24 - 575               	.L50: - 576 03c0 0093 0000 		sts usbTxLen,r16 - 577               	.L43: - 578 03c4 84E1      		ldi r24,lo8(20) - 579               	.L52: - 580 03c6 96B3      		in r25,54-32 - 581 03c8 9871      		andi r25,lo8(24) - 582 03ca 01F4      		brne .L51 - 583 03cc 8150      		subi r24,lo8(-(-1)) - 584 03ce 01F4      		brne .L52 - 585 03d0 1092 0000 		sts usbNewDeviceAddr,__zero_reg__ - 586 03d4 1092 0000 		sts usbDeviceAddr,__zero_reg__ - 587               	.L51: - 588 03d8 01E0      		ldi r16,lo8(1) - 589 03da 8111      		cpse r24,__zero_reg__ - 590 03dc 00E0      		ldi r16,lo8(0) - 591               	.L53: - 592 03de 8091 0000 		lds r24,wasReset.1698 - 593 03e2 8017      		cp r24,r16 - 594 03e4 01F0      		breq .L54 - 595 03e6 0023      		tst r16 - 596 03e8 01F4      		brne .L55 - 597               	/* #APP */ - 598               	 ;  557 "usbdrv/usbdrv.c" 1 - 599 03ea F894      		cli - 600               	 ;  0 "" 2 - 601               	/* #NOAPP */ - 602 03ec 00D0      		rcall calibrateOscillator - 603               	/* #APP */ - 604               	 ;  557 "usbdrv/usbdrv.c" 1 - 605 03ee 7894      		sei - 606               	 ;  0 "" 2 - 607               	/* #NOAPP */ - 608               	.L55: - 609 03f0 0093 0000 		sts wasReset.1698,r16 - 610               	.L54: - 611 03f4 8CE9      		 ldi r24,lo8(412) - 612 03f6 91E0      	    ldi r25,hi8(412) - 613 03f8 0197      	    1:sbiw r24,1 - 614 03fa 01F4      	    brne 1b - 615 03fc 0000      		nop - 616 03fe 8091 0000 		lds r24,events - 617 0402 8823      		tst r24 - 618 0404 01F4      		brne .L71 - 619 0406 0894      		sec - 620 0408 E11C      		adc r14,__zero_reg__ - 621 040a F11C      		adc r15,__zero_reg__ - 622 040c 00C0      		rjmp .L56 - 623               	.L71: - 624 040e EE24      		clr r14 - 625 0410 FF24      		clr r15 - 626               	.L56: - 627 0412 80FF      		sbrs r24,0 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 12 - - - 628 0414 00C0      		rjmp .L57 - 629               	/* #APP */ - 630               	 ;  100 "main.c" 1 - 631 0416 F894      		cli - 632               	 ;  0 "" 2 - 633               	/* #NOAPP */ - 634 0418 E091 0000 		lds r30,currentAddress - 635 041c F091 0000 		lds r31,currentAddress+1 - 636 0420 3297      		sbiw r30,2 - 637 0422 83E0      		ldi r24,lo8(3) - 638               	/* #APP */ - 639               	 ;  101 "main.c" 1 - 640 0424 8093 5700 		sts 87, r24 - 641 0428 E895      		spm - 642               		 - 643               	 ;  0 "" 2 - 644               	/* #NOAPP */ - 645               	.L58: - 646 042a 07B6      		in __tmp_reg__,87-32 - 647 042c 00FC      		sbrc __tmp_reg__,0 - 648 042e 00C0      		rjmp .L58 - 649               	/* #APP */ - 650               	 ;  103 "main.c" 1 - 651 0430 7894      		sei - 652               	 ;  0 "" 2 - 653               	/* #NOAPP */ - 654               	.L57: - 655 0432 8091 0000 		lds r24,events - 656 0436 81FF      		sbrs r24,1 - 657 0438 00C0      		rjmp .L59 - 658 043a A9E3      		 ldi r26,lo8(8249) - 659 043c B0E2      	    ldi r27,hi8(8249) - 660 043e 1197      	    1:sbiw r26,1 - 661 0440 01F4      	    brne 1b - 662 0442 00C0      		rjmp . - 663 0444 0000      		nop - 664 0446 8091 0000 		lds r24,currentAddress - 665 044a 9091 0000 		lds r25,currentAddress+1 - 666 044e 8F73      		andi r24,lo8(63) - 667 0450 9070      		andi r25,hi8(63) - 668 0452 0097      		sbiw r24,0 - 669 0454 01F0      		breq .L60 - 670 0456 00D0      		rcall fillFlashWithVectors - 671 0458 00C0      		rjmp .L59 - 672               	.L60: - 673 045a 00D0      		rcall writeFlashPage - 674               	.L59: - 675 045c 8091 0000 		lds r24,events - 676 0460 82FD      		sbrc r24,2 - 677 0462 00C0      		rjmp .L61 - 678 0464 B1E5      		ldi r27,lo8(-15535) - 679 0466 EB16      		cp r14,r27 - 680 0468 B3EC      		ldi r27,hi8(-15535) - 681 046a FB06      		cpc r15,r27 - 682 046c 00F0      		brlo .L62 - 683               	.L61: - 684 046e E1E2      		 ldi r30,lo8(-24287) -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 13 - - - 685 0470 F1EA      	    ldi r31,hi8(-24287) - 686 0472 3197      	    1:sbiw r30,1 - 687 0474 01F4      	    brne 1b - 688 0476 00C0      		rjmp . - 689 0478 0000      		nop - 690               	/* #APP */ - 691               	 ;  284 "main.c" 1 - 692 047a F894      		cli - 693               	 ;  0 "" 2 - 694               	/* #NOAPP */ - 695 047c 1BBE      		out 91-32,__zero_reg__ - 696 047e 15BA      		out 53-32,__zero_reg__ - 697 0480 8091 0000 		lds r24,didWriteSomething - 698 0484 8823      		tst r24 - 699 0486 01F4      		brne .L63 - 700 0488 00C0      		rjmp .L64 - 701               	.L65: - 702 048a 00D0      		rcall fillFlashWithVectors - 703               	.L63: - 704 048c 8091 0000 		lds r24,currentAddress - 705 0490 9091 0000 		lds r25,currentAddress+1 - 706 0494 F7E1      		ldi r31,hi8(5888) - 707 0496 8030      		cpi r24,lo8(5888) - 708 0498 9F07      		cpc r25,r31 - 709 049a 00F0      		brlo .L65 - 710               	.L64: - 711 049c 1092 5F02 		sts 607,__zero_reg__ - 712 04a0 1092 5E02 		sts 606,__zero_reg__ - 713               	/* #APP */ - 714               	 ;  300 "main.c" 1 - 715 04a4 00C0      		rjmp __vectors - 4 - 716               	 ;  0 "" 2 - 717               	/* #NOAPP */ - 718               	.L62: - 719 04a6 1092 0000 		sts events,__zero_reg__ - 720 04aa 00C0      		rjmp .L66 - 721               		.size	main, .-main - 722               	.global	usbTxLen - 723               		.data - 724               		.type	usbTxLen, @object - 725               		.size	usbTxLen, 1 - 726               	usbTxLen: - 727 0000 5A        		.byte	90 - 728               	.global	usbDescriptorString0 - 729               		.section	.progmem.data,"a",@progbits - 730               		.type	usbDescriptorString0, @object - 731               		.size	usbDescriptorString0, 4 - 732               	usbDescriptorString0: - 733 0000 04        		.byte	4 - 734 0001 03        		.byte	3 - 735 0002 09        		.byte	9 - 736 0003 04        		.byte	4 - 737               	.global	usbDescriptorStringVendor - 738               		.type	usbDescriptorStringVendor, @object - 739               		.size	usbDescriptorStringVendor, 34 - 740               	usbDescriptorStringVendor: - 741 0004 2203      		.word	802 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 14 - - - 742 0006 6300      		.word	99 - 743 0008 7200      		.word	114 - 744 000a 6500      		.word	101 - 745 000c 6100      		.word	97 - 746 000e 7400      		.word	116 - 747 0010 6900      		.word	105 - 748 0012 7600      		.word	118 - 749 0014 6500      		.word	101 - 750 0016 7000      		.word	112 - 751 0018 6F00      		.word	111 - 752 001a 6E00      		.word	110 - 753 001c 7900      		.word	121 - 754 001e 2E00      		.word	46 - 755 0020 6300      		.word	99 - 756 0022 6F00      		.word	111 - 757 0024 6D00      		.word	109 - 758               	.global	usbDescriptorStringDevice - 759               		.type	usbDescriptorStringDevice, @object - 760               		.size	usbDescriptorStringDevice, 12 - 761               	usbDescriptorStringDevice: - 762 0026 0C03      		.word	780 - 763 0028 7500      		.word	117 - 764 002a 4200      		.word	66 - 765 002c 6F00      		.word	111 - 766 002e 6F00      		.word	111 - 767 0030 7400      		.word	116 - 768               	.global	usbDescriptorDevice - 769               		.type	usbDescriptorDevice, @object - 770               		.size	usbDescriptorDevice, 18 - 771               	usbDescriptorDevice: - 772 0032 12        		.byte	18 - 773 0033 01        		.byte	1 - 774 0034 10        		.byte	16 - 775 0035 01        		.byte	1 - 776 0036 FF        		.byte	-1 - 777 0037 00        		.byte	0 - 778 0038 00        		.byte	0 - 779 0039 08        		.byte	8 - 780 003a C0        		.byte	-64 - 781 003b 16        		.byte	22 - 782 003c DC        		.byte	-36 - 783 003d 05        		.byte	5 - 784 003e 01        		.byte	1 - 785 003f 01        		.byte	1 - 786 0040 01        		.byte	1 - 787 0041 02        		.byte	2 - 788 0042 00        		.byte	0 - 789 0043 01        		.byte	1 - 790               	.global	usbDescriptorConfiguration - 791               		.type	usbDescriptorConfiguration, @object - 792               		.size	usbDescriptorConfiguration, 18 - 793               	usbDescriptorConfiguration: - 794 0044 09        		.byte	9 - 795 0045 02        		.byte	2 - 796 0046 12        		.byte	18 - 797 0047 00        		.byte	0 - 798 0048 01        		.byte	1 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 15 - - - 799 0049 01        		.byte	1 - 800 004a 00        		.byte	0 - 801 004b 80        		.byte	-128 - 802 004c 32        		.byte	50 - 803 004d 09        		.byte	9 - 804 004e 04        		.byte	4 - 805 004f 00        		.byte	0 - 806 0050 00        		.byte	0 - 807 0051 00        		.byte	0 - 808 0052 00        		.byte	0 - 809 0053 00        		.byte	0 - 810 0054 00        		.byte	0 - 811 0055 00        		.byte	0 - 812               		.comm usbMsgPtr,2,1 - 813               		.comm usbRxToken,1,1 - 814               		.comm usbConfiguration,1,1 - 815               		.comm usbRxBuf,22,1 - 816               		.comm usbInputBufOffset,1,1 - 817               		.comm usbDeviceAddr,1,1 - 818               		.comm usbNewDeviceAddr,1,1 - 819               		.comm usbRxLen,1,1 - 820               		.comm usbCurrentTok,1,1 - 821               		.comm usbTxBuf,11,1 - 822               		.lcomm currentAddress,2 +  55 0030 01F0      		breq .L4 +  56 0032 2430      		cpi r18,4 +  57 0034 3105      		cpc r19,__zero_reg__ +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 2 + + +  58 0036 01F0      		breq .L8 +  59 0038 46E1      		ldi r20,hi8(5884) +  60 003a 2C3F      		cpi r18,lo8(5884) +  61 003c 3407      		cpc r19,r20 +  62 003e 01F4      		brne .L6 +  63 0040 8091 0000 		lds r24,vectorTemp +  64 0044 9091 0000 		lds r25,vectorTemp+1 +  65 0048 8E57      		subi r24,lo8(-(1154)) +  66 004a 9B4F      		sbci r25,hi8(-(1154)) +  67 004c 00C0      		rjmp .L7 +  68               	.L6: +  69 004e 46E1      		ldi r20,hi8(5886) +  70 0050 2E3F      		cpi r18,lo8(5886) +  71 0052 3407      		cpc r19,r20 +  72 0054 01F4      		brne .L7 +  73 0056 8091 0000 		lds r24,vectorTemp+2 +  74 005a 9091 0000 		lds r25,vectorTemp+2+1 +  75 005e 8D57      		subi r24,lo8(-(1155)) +  76 0060 9B4F      		sbci r25,hi8(-(1155)) +  77 0062 00C0      		rjmp .L7 +  78               	.L8: +  79 0064 8FE7      		ldi r24,lo8(-13441) +  80 0066 9BEC      		ldi r25,hi8(-13441) +  81               	.L7: +  82               	/* #APP */ +  83               	 ;  151 "main.c" 1 +  84 0068 F894      		cli +  85               	 ;  0 "" 2 +  86               	/* #NOAPP */ +  87 006a E091 0000 		lds r30,currentAddress +  88 006e F091 0000 		lds r31,currentAddress+1 +  89 0072 21E0      		ldi r18,lo8(1) +  90               	/* #APP */ +  91               	 ;  152 "main.c" 1 +  92 0074 0C01      		movw  r0, r24 +  93 0076 2093 5700 		sts 87, r18 +  94 007a E895      		spm +  95 007c 1124      		clr  r1 +  96               		 +  97               	 ;  0 "" 2 +  98               	 ;  153 "main.c" 1 +  99 007e 7894      		sei + 100               	 ;  0 "" 2 + 101               	/* #NOAPP */ + 102 0080 8091 0000 		lds r24,currentAddress + 103 0084 9091 0000 		lds r25,currentAddress+1 + 104 0088 0296      		adiw r24,2 + 105 008a 9093 0000 		sts currentAddress+1,r25 + 106 008e 8093 0000 		sts currentAddress,r24 + 107               	/* epilogue start */ + 108 0092 0895      		ret + 109               	.L4: + 110 0094 81E1      		ldi r24,lo8(17) + 111               	/* #APP */ + 112               	 ;  149 "main.c" 1 + 113 0096 8093 5700 		sts 87, r24 + 114 009a E895      		spm +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 3 + + + 115               		 + 116               	 ;  0 "" 2 + 117               	/* #NOAPP */ + 118 009c 00C0      		rjmp .L8 + 119               		.size	writeWordToPageBuffer, .-writeWordToPageBuffer + 120               		.type	fillFlashWithVectors, @function + 121               	fillFlashWithVectors: + 122 009e CF93      		push r28 + 123 00a0 DF93      		push r29 + 124               	/* prologue: function */ + 125               	/* frame size = 0 */ + 126               	/* stack size = 2 */ + 127               	.L__stack_usage = 2 + 128 00a2 C091 0000 		lds r28,currentAddress + 129 00a6 D091 0000 		lds r29,currentAddress+1 + 130 00aa CF73      		andi r28,lo8(63) + 131 00ac D070      		andi r29,hi8(63) + 132               	.L10: + 133 00ae 8FEF      		ldi r24,lo8(-1) + 134 00b0 9FEF      		ldi r25,hi8(-1) + 135 00b2 00D0      		rcall writeWordToPageBuffer + 136 00b4 2296      		adiw r28,2 + 137 00b6 C034      		cpi r28,64 + 138 00b8 D105      		cpc r29,__zero_reg__ + 139 00ba 04F0      		brlt .L10 + 140 00bc 00D0      		rcall writeFlashPage + 141               	/* epilogue start */ + 142 00be DF91      		pop r29 + 143 00c0 CF91      		pop r28 + 144 00c2 0895      		ret + 145               		.size	fillFlashWithVectors, .-fillFlashWithVectors + 146               		.section	.init3,"ax",@progbits + 147               	.global	PushMagicWord + 148               		.type	PushMagicWord, @function + 149               	PushMagicWord: + 150               	/* prologue: naked */ + 151               	/* frame size = 0 */ + 152               	/* stack size = 0 */ + 153               	.L__stack_usage = 0 + 154               	/* #APP */ + 155               	 ;  248 "main.c" 1 + 156 0000 00EB      		ldi r16, 0xB0 + 157               	 ;  0 "" 2 + 158               	 ;  249 "main.c" 1 + 159 0002 0F93      		push r16 + 160               	 ;  0 "" 2 + 161               	 ;  250 "main.c" 1 + 162 0004 07E0      		ldi r16, 0x07 + 163               	 ;  0 "" 2 + 164               	 ;  251 "main.c" 1 + 165 0006 0F93      		push r16 + 166               	 ;  0 "" 2 + 167               	/* epilogue start */ + 168               	/* #NOAPP */ + 169               		.size	PushMagicWord, .-PushMagicWord + 170               		.text + 171               	.global	main +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 4 + + + 172               		.type	main, @function + 173               	main: + 174 00c4 DF93      		push r29 + 175 00c6 CF93      		push r28 + 176 00c8 0F92      		push __tmp_reg__ + 177 00ca CDB7      		in r28,__SP_L__ + 178 00cc DEB7      		in r29,__SP_H__ + 179               	/* prologue: function */ + 180               	/* frame size = 1 */ + 181               	/* stack size = 3 */ + 182               	.L__stack_usage = 3 + 183 00ce 88E1      		ldi r24,lo8(24) + 184               	/* #APP */ + 185               	 ;  316 "main.c" 1 + 186 00d0 0FB6      		in __tmp_reg__, __SREG__ + 187 00d2 F894      		cli + 188 00d4 81BD      		out 33, r24 + 189 00d6 11BC      		out 33, __zero_reg__ + 190 00d8 0FBE      		out __SREG__,__tmp_reg__ + 191               		 + 192               	 ;  0 "" 2 + 193               	/* #NOAPP */ + 194 00da E0E0      		ldi r30,lo8(0) + 195 00dc F0E0      		ldi r31,hi8(0) + 196               	/* #APP */ + 197               	 ;  269 "main.c" 1 + 198 00de 8591      		lpm r24, Z+ + 199 00e0 9491      		lpm r25, Z + 200               		 + 201               	 ;  0 "" 2 + 202               	/* #NOAPP */ + 203 00e2 2BEC      		ldi r18,hi8(-13441) + 204 00e4 8F37      		cpi r24,lo8(-13441) + 205 00e6 9207      		cpc r25,r18 + 206 00e8 01F4      		brne .L13 + 207 00ea E4E0      		ldi r30,lo8(4) + 208 00ec F0E0      		ldi r31,hi8(4) + 209               	/* #APP */ + 210               	 ;  270 "main.c" 1 + 211 00ee 8591      		lpm r24, Z+ + 212 00f0 9491      		lpm r25, Z + 213               		 + 214               	 ;  0 "" 2 + 215               	/* #NOAPP */ + 216 00f2 3BEC      		ldi r19,hi8(-13441) + 217 00f4 8F37      		cpi r24,lo8(-13441) + 218 00f6 9307      		cpc r25,r19 + 219 00f8 01F0      		breq .L14 + 220               	.L13: + 221 00fa 00D0      		rcall fillFlashWithVectors + 222               	.L14: + 223 00fc 1092 0000 		sts currentAddress+1,__zero_reg__ + 224 0100 1092 0000 		sts currentAddress,__zero_reg__ + 225 0104 AC9A      		sbi 53-32,4 + 226 0106 8BB7      		in r24,91-32 + 227 0108 8062      		ori r24,lo8(32) + 228 010a 8BBF      		out 91-32,r24 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 5 + + + 229 010c BB9A      		sbi 55-32,3 + 230 010e 8FE4      		 ldi r24,lo8(1649999) + 231 0110 9DE2      	    ldi r25,hi8(1649999) + 232 0112 A9E1      	    ldi r26,hlo8(1649999) + 233 0114 8150      	    1:subi r24,1 + 234 0116 9040      	    sbci r25,0 + 235 0118 A040      	    sbci r26,0 + 236 011a 01F4      	    brne 1b + 237 011c 00C0      		rjmp . + 238 011e 0000      		nop + 239 0120 BB98      		cbi 55-32,3 + 240               	/* #APP */ + 241               	 ;  262 "main.c" 1 + 242 0122 7894      		sei + 243               	 ;  0 "" 2 + 244               	/* #NOAPP */ + 245 0124 EE24      		clr r14 + 246 0126 FF24      		clr r15 + 247               	.L68: + 248 0128 2091 0000 		lds r18,usbRxLen + 249 012c 2350      		subi r18,lo8(-(-3)) + 250 012e 27FD      		sbrc r18,7 + 251 0130 00C0      		rjmp .L15 + 252 0132 8091 0000 		lds r24,usbInputBufOffset + 253 0136 ECE0      		ldi r30,lo8(12) + 254 0138 F0E0      		ldi r31,hi8(12) + 255 013a E81B      		sub r30,r24 + 256 013c F109      		sbc r31,__zero_reg__ + 257 013e E050      		subi r30,lo8(-(usbRxBuf)) + 258 0140 F040      		sbci r31,hi8(-(usbRxBuf)) + 259 0142 8091 0000 		lds r24,usbRxToken + 260 0146 8D32      		cpi r24,lo8(45) + 261 0148 01F0      		breq .+2 + 262 014a 00C0      		rjmp .L16 + 263 014c 2830      		cpi r18,lo8(8) + 264 014e 01F0      		breq .+2 + 265 0150 00C0      		rjmp .L17 + 266 0152 83EC      		ldi r24,lo8(-61) + 267 0154 8093 0000 		sts usbTxBuf,r24 + 268 0158 8AE5      		ldi r24,lo8(90) + 269 015a 8093 0000 		sts usbTxLen,r24 + 270 015e 1092 0000 		sts usbMsgFlags,__zero_reg__ + 271 0162 2081      		ld r18,Z + 272 0164 922F      		mov r25,r18 + 273 0166 9076      		andi r25,lo8(96) + 274 0168 8181      		ldd r24,Z+1 + 275 016a 9923      		tst r25 + 276 016c 01F0      		breq .L18 + 277 016e 8823      		tst r24 + 278 0170 01F4      		brne .L19 + 279 0172 80E0      		ldi r24,lo8(replyBuffer.1745) + 280 0174 90E0      		ldi r25,hi8(replyBuffer.1745) + 281 0176 9093 0000 		sts usbMsgPtr+1,r25 + 282 017a 8093 0000 		sts usbMsgPtr,r24 + 283 017e 24E0      		ldi r18,lo8(4) + 284 0180 00C0      		rjmp .L25 + 285               	.L19: +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 6 + + + 286 0182 8130      		cpi r24,lo8(1) + 287 0184 01F4      		brne .L21 + 288 0186 8281      		ldd r24,Z+2 + 289 0188 8093 0000 		sts writeLength,r24 + 290 018c 8481      		ldd r24,Z+4 + 291 018e 9581      		ldd r25,Z+5 + 292 0190 9093 0000 		sts currentAddress+1,r25 + 293 0194 8093 0000 		sts currentAddress,r24 + 294 0198 27FD      		sbrc r18,7 + 295 019a 00C0      		rjmp .L22 + 296 019c 2FEF      		ldi r18,lo8(-1) + 297 019e 00C0      		rjmp .L23 + 298               	.L21: + 299 01a0 9091 0000 		lds r25,events + 300 01a4 8230      		cpi r24,lo8(2) + 301 01a6 01F4      		brne .L24 + 302 01a8 9160      		ori r25,lo8(1) + 303 01aa 00C0      		rjmp .L77 + 304               	.L24: + 305 01ac 9460      		ori r25,lo8(4) + 306               	.L77: + 307 01ae 9093 0000 		sts events,r25 + 308 01b2 20E0      		ldi r18,lo8(0) + 309 01b4 00C0      		rjmp .L25 + 310               	.L18: + 311 01b6 9281      		ldd r25,Z+2 + 312 01b8 1092 0000 		sts usbTxBuf+9,__zero_reg__ + 313 01bc 8823      		tst r24 + 314 01be 01F4      		brne .L26 + 315 01c0 1092 0000 		sts usbTxBuf+10,__zero_reg__ + 316 01c4 80E0      		ldi r24,lo8(usbTxBuf+9) + 317 01c6 90E0      		ldi r25,hi8(usbTxBuf+9) + 318 01c8 22E0      		ldi r18,lo8(2) + 319 01ca 00C0      		rjmp .L27 + 320               	.L26: + 321 01cc 8530      		cpi r24,lo8(5) + 322 01ce 01F4      		brne .L28 + 323 01d0 9093 0000 		sts usbNewDeviceAddr,r25 + 324 01d4 00C0      		rjmp .L75 + 325               	.L28: + 326 01d6 8630      		cpi r24,lo8(6) + 327 01d8 01F4      		brne .L29 + 328 01da 8381      		ldd r24,Z+3 + 329 01dc 8130      		cpi r24,lo8(1) + 330 01de 01F4      		brne .L30 + 331 01e0 80E0      		ldi r24,lo8(usbDescriptorDevice) + 332 01e2 90E0      		ldi r25,hi8(usbDescriptorDevice) + 333 01e4 00C0      		rjmp .L74 + 334               	.L30: + 335 01e6 8230      		cpi r24,lo8(2) + 336 01e8 01F4      		brne .L32 + 337 01ea 80E0      		ldi r24,lo8(usbDescriptorConfiguration) + 338 01ec 90E0      		ldi r25,hi8(usbDescriptorConfiguration) + 339               	.L74: + 340 01ee 9093 0000 		sts usbMsgPtr+1,r25 + 341 01f2 8093 0000 		sts usbMsgPtr,r24 + 342 01f6 22E1      		ldi r18,lo8(18) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 7 + + + 343 01f8 00C0      		rjmp .L31 + 344               	.L32: + 345 01fa 8330      		cpi r24,lo8(3) + 346 01fc 01F4      		brne .L70 + 347 01fe 9923      		tst r25 + 348 0200 01F4      		brne .L33 + 349 0202 80E0      		ldi r24,lo8(usbDescriptorString0) + 350 0204 90E0      		ldi r25,hi8(usbDescriptorString0) + 351 0206 9093 0000 		sts usbMsgPtr+1,r25 + 352 020a 8093 0000 		sts usbMsgPtr,r24 + 353 020e 24E0      		ldi r18,lo8(4) + 354 0210 00C0      		rjmp .L31 + 355               	.L33: + 356 0212 9130      		cpi r25,lo8(1) + 357 0214 01F4      		brne .L34 + 358 0216 80E0      		ldi r24,lo8(usbDescriptorStringVendor) + 359 0218 90E0      		ldi r25,hi8(usbDescriptorStringVendor) + 360 021a 9093 0000 		sts usbMsgPtr+1,r25 + 361 021e 8093 0000 		sts usbMsgPtr,r24 + 362 0222 22E2      		ldi r18,lo8(34) + 363 0224 00C0      		rjmp .L31 + 364               	.L34: + 365 0226 9230      		cpi r25,lo8(2) + 366 0228 01F4      		brne .L70 + 367 022a 80E0      		ldi r24,lo8(usbDescriptorStringDevice) + 368 022c 90E0      		ldi r25,hi8(usbDescriptorStringDevice) + 369 022e 9093 0000 		sts usbMsgPtr+1,r25 + 370 0232 8093 0000 		sts usbMsgPtr,r24 + 371 0236 2CE0      		ldi r18,lo8(12) + 372 0238 00C0      		rjmp .L31 + 373               	.L70: + 374 023a 20E0      		ldi r18,lo8(0) + 375               	.L31: + 376 023c 80E4      		ldi r24,lo8(64) + 377 023e 8093 0000 		sts usbMsgFlags,r24 + 378 0242 00C0      		rjmp .L25 + 379               	.L29: + 380 0244 8830      		cpi r24,lo8(8) + 381 0246 01F0      		breq .L71 + 382 0248 8930      		cpi r24,lo8(9) + 383 024a 01F4      		brne .L36 + 384 024c 9093 0000 		sts usbConfiguration,r25 + 385 0250 00C0      		rjmp .L75 + 386               	.L36: + 387 0252 8A30      		cpi r24,lo8(10) + 388 0254 01F0      		breq .L72 + 389               	.L75: + 390 0256 80E0      		ldi r24,lo8(usbTxBuf+9) + 391 0258 90E0      		ldi r25,hi8(usbTxBuf+9) + 392 025a 20E0      		ldi r18,lo8(0) + 393 025c 00C0      		rjmp .L27 + 394               	.L71: + 395 025e 80E0      		ldi r24,lo8(usbConfiguration) + 396 0260 90E0      		ldi r25,hi8(usbConfiguration) + 397 0262 00C0      		rjmp .L76 + 398               	.L72: + 399 0264 80E0      		ldi r24,lo8(usbTxBuf+9) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 8 + + + 400 0266 90E0      		ldi r25,hi8(usbTxBuf+9) + 401               	.L76: + 402 0268 21E0      		ldi r18,lo8(1) + 403               	.L27: + 404 026a 9093 0000 		sts usbMsgPtr+1,r25 + 405 026e 8093 0000 		sts usbMsgPtr,r24 + 406 0272 00C0      		rjmp .L25 + 407               	.L22: + 408 0274 2681      		ldd r18,Z+6 + 409               	.L23: + 410 0276 80E8      		ldi r24,lo8(-128) + 411 0278 8093 0000 		sts usbMsgFlags,r24 + 412 027c 00C0      		rjmp .L37 + 413               	.L25: + 414 027e 8781      		ldd r24,Z+7 + 415 0280 8823      		tst r24 + 416 0282 01F4      		brne .L37 + 417 0284 8681      		ldd r24,Z+6 + 418 0286 8217      		cp r24,r18 + 419 0288 00F4      		brsh .L37 + 420 028a 282F      		mov r18,r24 + 421               	.L37: + 422 028c 2093 0000 		sts usbMsgLen,r18 + 423 0290 00C0      		rjmp .L17 + 424               	.L16: + 425 0292 8091 0000 		lds r24,usbMsgFlags + 426 0296 87FF      		sbrs r24,7 + 427 0298 00C0      		rjmp .L17 + 428 029a 8091 0000 		lds r24,writeLength + 429 029e 821B      		sub r24,r18 + 430 02a0 8093 0000 		sts writeLength,r24 + 431 02a4 8F01      		movw r16,r30 + 432               	.L42: + 433 02a6 8091 0000 		lds r24,currentAddress + 434 02aa 9091 0000 		lds r25,currentAddress+1 + 435 02ae 0097      		sbiw r24,0 + 436 02b0 01F4      		brne .L38 + 437 02b2 D801      		movw r26,r16 + 438 02b4 8D91      		ld r24,X+ + 439 02b6 9C91      		ld r25,X + 440 02b8 1197      		sbiw r26,1 + 441 02ba 9093 0000 		sts vectorTemp+1,r25 + 442 02be 8093 0000 		sts vectorTemp,r24 + 443 02c2 00C0      		rjmp .L39 + 444               	.L38: + 445 02c4 8430      		cpi r24,4 + 446 02c6 9105      		cpc r25,__zero_reg__ + 447 02c8 01F4      		brne .L40 + 448 02ca F801      		movw r30,r16 + 449 02cc 8081      		ld r24,Z + 450 02ce 9181      		ldd r25,Z+1 + 451 02d0 9093 0000 		sts vectorTemp+2+1,r25 + 452 02d4 8093 0000 		sts vectorTemp+2,r24 + 453 02d8 00C0      		rjmp .L39 + 454               	.L40: + 455 02da F6E1      		ldi r31,hi8(5882) + 456 02dc 8A3F      		cpi r24,lo8(5882) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 9 + + + 457 02de 9F07      		cpc r25,r31 + 458 02e0 00F0      		brlo .L39 + 459 02e2 81E1      		ldi r24,lo8(17) + 460               	/* #APP */ + 461               	 ;  225 "main.c" 1 + 462 02e4 8093 5700 		sts 87, r24 + 463 02e8 E895      		spm + 464               		 + 465               	 ;  0 "" 2 + 466               	/* #NOAPP */ + 467 02ea 00C0      		rjmp .L41 + 468               	.L39: + 469 02ec D801      		movw r26,r16 + 470 02ee 8D91      		ld r24,X+ + 471 02f0 9D91      		ld r25,X+ + 472 02f2 8D01      		movw r16,r26 + 473 02f4 2983      		std Y+1,r18 + 474 02f6 00D0      		rcall writeWordToPageBuffer + 475 02f8 2981      		ldd r18,Y+1 + 476 02fa 2250      		subi r18,lo8(-(-2)) + 477 02fc 01F4      		brne .L42 + 478               	.L41: + 479 02fe 8091 0000 		lds r24,writeLength + 480 0302 8823      		tst r24 + 481 0304 01F4      		brne .L17 + 482 0306 8091 0000 		lds r24,events + 483 030a 8260      		ori r24,lo8(2) + 484 030c 8093 0000 		sts events,r24 + 485 0310 1092 0000 		sts usbMsgLen,__zero_reg__ + 486               	.L17: + 487 0314 1092 0000 		sts usbRxLen,__zero_reg__ + 488               	.L15: + 489 0318 8091 0000 		lds r24,usbTxLen + 490 031c 84FF      		sbrs r24,4 + 491 031e 00C0      		rjmp .L43 + 492 0320 8091 0000 		lds r24,usbMsgLen + 493 0324 8F3F      		cpi r24,lo8(-1) + 494 0326 01F4      		brne .+2 + 495 0328 00C0      		rjmp .L43 + 496 032a 082F      		mov r16,r24 + 497 032c 8930      		cpi r24,lo8(9) + 498 032e 00F0      		brlo .L44 + 499 0330 08E0      		ldi r16,lo8(8) + 500               	.L44: + 501 0332 801B      		sub r24,r16 + 502 0334 8093 0000 		sts usbMsgLen,r24 + 503 0338 8091 0000 		lds r24,usbTxBuf + 504 033c 98E8      		ldi r25,lo8(-120) + 505 033e 8927      		eor r24,r25 + 506 0340 8093 0000 		sts usbTxBuf,r24 + 507 0344 0023      		tst r16 + 508 0346 01F0      		breq .L45 + 509 0348 E091 0000 		lds r30,usbMsgPtr + 510 034c F091 0000 		lds r31,usbMsgPtr+1 + 511 0350 9091 0000 		lds r25,usbMsgFlags + 512 0354 802F      		mov r24,r16 + 513 0356 8150      		subi r24,lo8(-(-1)) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 10 + + + 514 0358 96FF      		sbrs r25,6 + 515 035a 00C0      		rjmp .L46 + 516 035c 90E0      		ldi r25,lo8(0) + 517 035e 8050      		subi r24,lo8(-(usbTxBuf+2)) + 518 0360 9040      		sbci r25,hi8(-(usbTxBuf+2)) + 519 0362 A0E0      		ldi r26,lo8(usbTxBuf+1) + 520 0364 B0E0      		ldi r27,hi8(usbTxBuf+1) + 521               	.L47: + 522               	/* #APP */ + 523               	 ;  504 "usbdrv/usbdrv.c" 1 + 524 0366 2491      		lpm r18, Z + 525               		 + 526               	 ;  0 "" 2 + 527               	/* #NOAPP */ + 528 0368 2D93      		st X+,r18 + 529 036a 3196      		adiw r30,1 + 530 036c A817      		cp r26,r24 + 531 036e B907      		cpc r27,r25 + 532 0370 01F4      		brne .L47 + 533 0372 00C0      		rjmp .L48 + 534               	.L46: + 535 0374 9F01      		movw r18,r30 + 536 0376 90E0      		ldi r25,lo8(0) + 537 0378 8050      		subi r24,lo8(-(usbTxBuf+2)) + 538 037a 9040      		sbci r25,hi8(-(usbTxBuf+2)) + 539 037c A0E0      		ldi r26,lo8(usbTxBuf+1) + 540 037e B0E0      		ldi r27,hi8(usbTxBuf+1) + 541               	.L49: + 542 0380 F901      		movw r30,r18 + 543 0382 4191      		ld r20,Z+ + 544 0384 9F01      		movw r18,r30 + 545 0386 4D93      		st X+,r20 + 546 0388 A817      		cp r26,r24 + 547 038a B907      		cpc r27,r25 + 548 038c 01F4      		brne .L49 + 549               	.L48: + 550 038e F093 0000 		sts usbMsgPtr+1,r31 + 551 0392 E093 0000 		sts usbMsgPtr,r30 + 552               	.L45: + 553 0396 80E0      		ldi r24,lo8(usbTxBuf+1) + 554 0398 90E0      		ldi r25,hi8(usbTxBuf+1) + 555 039a 602F      		mov r22,r16 + 556 039c 00D0      		rcall usbCrc16Append + 557 039e 0C5F      		subi r16,lo8(-(4)) + 558 03a0 0C30      		cpi r16,lo8(12) + 559 03a2 01F0      		breq .L50 + 560 03a4 8FEF      		ldi r24,lo8(-1) + 561 03a6 8093 0000 		sts usbMsgLen,r24 + 562               	.L50: + 563 03aa 0093 0000 		sts usbTxLen,r16 + 564               	.L43: + 565 03ae 84E1      		ldi r24,lo8(20) + 566               	.L52: + 567 03b0 96B3      		in r25,54-32 + 568 03b2 9871      		andi r25,lo8(24) + 569 03b4 01F4      		brne .L51 + 570 03b6 8150      		subi r24,lo8(-(-1)) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 11 + + + 571 03b8 01F4      		brne .L52 + 572 03ba 1092 0000 		sts usbNewDeviceAddr,__zero_reg__ + 573 03be 1092 0000 		sts usbDeviceAddr,__zero_reg__ + 574               	.L51: + 575 03c2 01E0      		ldi r16,lo8(1) + 576 03c4 8111      		cpse r24,__zero_reg__ + 577 03c6 00E0      		ldi r16,lo8(0) + 578               	.L53: + 579 03c8 8091 0000 		lds r24,wasReset.1698 + 580 03cc 8017      		cp r24,r16 + 581 03ce 01F0      		breq .L54 + 582 03d0 0023      		tst r16 + 583 03d2 01F4      		brne .L55 + 584               	/* #APP */ + 585               	 ;  557 "usbdrv/usbdrv.c" 1 + 586 03d4 F894      		cli + 587               	 ;  0 "" 2 + 588               	/* #NOAPP */ + 589 03d6 00D0      		rcall calibrateOscillator + 590               	/* #APP */ + 591               	 ;  557 "usbdrv/usbdrv.c" 1 + 592 03d8 7894      		sei + 593               	 ;  0 "" 2 + 594               	/* #NOAPP */ + 595               	.L55: + 596 03da 0093 0000 		sts wasReset.1698,r16 + 597               	.L54: + 598 03de 8CE9      		 ldi r24,lo8(412) + 599 03e0 91E0      	    ldi r25,hi8(412) + 600 03e2 0197      	    1:sbiw r24,1 + 601 03e4 01F4      	    brne 1b + 602 03e6 0000      		nop + 603 03e8 8091 0000 		lds r24,events + 604 03ec 8823      		tst r24 + 605 03ee 01F4      		brne .L73 + 606 03f0 0894      		sec + 607 03f2 E11C      		adc r14,__zero_reg__ + 608 03f4 F11C      		adc r15,__zero_reg__ + 609 03f6 00C0      		rjmp .L56 + 610               	.L73: + 611 03f8 EE24      		clr r14 + 612 03fa FF24      		clr r15 + 613               	.L56: + 614 03fc 80FF      		sbrs r24,0 + 615 03fe 00C0      		rjmp .L57 + 616 0400 80EC      		ldi r24,lo8(5824) + 617 0402 96E1      		ldi r25,hi8(5824) + 618 0404 00C0      		rjmp .L78 + 619               	.L60: + 620               	/* #APP */ + 621               	 ;  103 "main.c" 1 + 622 0406 F894      		cli + 623               	 ;  0 "" 2 + 624               	/* #NOAPP */ + 625 0408 E091 0000 		lds r30,currentAddress + 626 040c F091 0000 		lds r31,currentAddress+1 + 627 0410 83E0      		ldi r24,lo8(3) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 12 + + + 628               	/* #APP */ + 629               	 ;  104 "main.c" 1 + 630 0412 8093 5700 		sts 87, r24 + 631 0416 E895      		spm + 632               		 + 633               	 ;  0 "" 2 + 634               	/* #NOAPP */ + 635               	.L59: + 636 0418 07B6      		in __tmp_reg__,87-32 + 637 041a 00FC      		sbrc __tmp_reg__,0 + 638 041c 00C0      		rjmp .L59 + 639               	/* #APP */ + 640               	 ;  106 "main.c" 1 + 641 041e 7894      		sei + 642               	 ;  0 "" 2 + 643               	/* #NOAPP */ + 644 0420 8091 0000 		lds r24,currentAddress + 645 0424 9091 0000 		lds r25,currentAddress+1 + 646 0428 8054      		subi r24,lo8(-(-64)) + 647 042a 9040      		sbci r25,hi8(-(-64)) + 648               	.L78: + 649 042c 9093 0000 		sts currentAddress+1,r25 + 650 0430 8093 0000 		sts currentAddress,r24 + 651 0434 8091 0000 		lds r24,currentAddress + 652 0438 9091 0000 		lds r25,currentAddress+1 + 653 043c 0097      		sbiw r24,0 + 654 043e 01F4      		brne .L60 + 655               	.L57: + 656 0440 8091 0000 		lds r24,events + 657 0444 81FF      		sbrs r24,1 + 658 0446 00C0      		rjmp .L61 + 659 0448 A9E3      		 ldi r26,lo8(8249) + 660 044a B0E2      	    ldi r27,hi8(8249) + 661 044c 1197      	    1:sbiw r26,1 + 662 044e 01F4      	    brne 1b + 663 0450 00C0      		rjmp . + 664 0452 0000      		nop + 665 0454 8091 0000 		lds r24,currentAddress + 666 0458 9091 0000 		lds r25,currentAddress+1 + 667 045c 8F73      		andi r24,lo8(63) + 668 045e 9070      		andi r25,hi8(63) + 669 0460 0097      		sbiw r24,0 + 670 0462 01F0      		breq .L62 + 671 0464 00D0      		rcall fillFlashWithVectors + 672 0466 00C0      		rjmp .L61 + 673               	.L62: + 674 0468 00D0      		rcall writeFlashPage + 675               	.L61: + 676 046a 8091 0000 		lds r24,events + 677 046e 82FD      		sbrc r24,2 + 678 0470 00C0      		rjmp .L63 + 679 0472 B1E5      		ldi r27,lo8(-15535) + 680 0474 EB16      		cp r14,r27 + 681 0476 B3EC      		ldi r27,hi8(-15535) + 682 0478 FB06      		cpc r15,r27 + 683 047a 00F0      		brlo .L64 + 684               	.L63: +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 13 + + + 685 047c E1E2      		 ldi r30,lo8(-24287) + 686 047e F1EA      	    ldi r31,hi8(-24287) + 687 0480 3197      	    1:sbiw r30,1 + 688 0482 01F4      	    brne 1b + 689 0484 00C0      		rjmp . + 690 0486 0000      		nop + 691               	/* #APP */ + 692               	 ;  293 "main.c" 1 + 693 0488 F894      		cli + 694               	 ;  0 "" 2 + 695               	/* #NOAPP */ + 696 048a 1BBE      		out 91-32,__zero_reg__ + 697 048c 15BA      		out 53-32,__zero_reg__ + 698 048e 8091 0000 		lds r24,didWriteSomething + 699 0492 8823      		tst r24 + 700 0494 01F4      		brne .L65 + 701 0496 00C0      		rjmp .L66 + 702               	.L67: + 703 0498 00D0      		rcall fillFlashWithVectors + 704               	.L65: + 705 049a 8091 0000 		lds r24,currentAddress + 706 049e 9091 0000 		lds r25,currentAddress+1 + 707 04a2 F7E1      		ldi r31,hi8(5888) + 708 04a4 8030      		cpi r24,lo8(5888) + 709 04a6 9F07      		cpc r25,r31 + 710 04a8 00F0      		brlo .L67 + 711               	.L66: + 712 04aa 1092 5F02 		sts 607,__zero_reg__ + 713 04ae 1092 5E02 		sts 606,__zero_reg__ + 714               	/* #APP */ + 715               	 ;  309 "main.c" 1 + 716 04b2 00C0      		rjmp __vectors - 4 + 717               	 ;  0 "" 2 + 718               	/* #NOAPP */ + 719               	.L64: + 720 04b4 1092 0000 		sts events,__zero_reg__ + 721 04b8 00C0      		rjmp .L68 + 722               		.size	main, .-main + 723               	.global	usbTxLen + 724               		.data + 725               		.type	usbTxLen, @object + 726               		.size	usbTxLen, 1 + 727               	usbTxLen: + 728 0000 5A        		.byte	90 + 729               	.global	usbDescriptorString0 + 730               		.section	.progmem.data,"a",@progbits + 731               		.type	usbDescriptorString0, @object + 732               		.size	usbDescriptorString0, 4 + 733               	usbDescriptorString0: + 734 0000 04        		.byte	4 + 735 0001 03        		.byte	3 + 736 0002 09        		.byte	9 + 737 0003 04        		.byte	4 + 738               	.global	usbDescriptorStringVendor + 739               		.type	usbDescriptorStringVendor, @object + 740               		.size	usbDescriptorStringVendor, 34 + 741               	usbDescriptorStringVendor: +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 14 + + + 742 0004 2203      		.word	802 + 743 0006 6300      		.word	99 + 744 0008 7200      		.word	114 + 745 000a 6500      		.word	101 + 746 000c 6100      		.word	97 + 747 000e 7400      		.word	116 + 748 0010 6900      		.word	105 + 749 0012 7600      		.word	118 + 750 0014 6500      		.word	101 + 751 0016 7000      		.word	112 + 752 0018 6F00      		.word	111 + 753 001a 6E00      		.word	110 + 754 001c 7900      		.word	121 + 755 001e 2E00      		.word	46 + 756 0020 6300      		.word	99 + 757 0022 6F00      		.word	111 + 758 0024 6D00      		.word	109 + 759               	.global	usbDescriptorStringDevice + 760               		.type	usbDescriptorStringDevice, @object + 761               		.size	usbDescriptorStringDevice, 12 + 762               	usbDescriptorStringDevice: + 763 0026 0C03      		.word	780 + 764 0028 7500      		.word	117 + 765 002a 4200      		.word	66 + 766 002c 6F00      		.word	111 + 767 002e 6F00      		.word	111 + 768 0030 7400      		.word	116 + 769               	.global	usbDescriptorDevice + 770               		.type	usbDescriptorDevice, @object + 771               		.size	usbDescriptorDevice, 18 + 772               	usbDescriptorDevice: + 773 0032 12        		.byte	18 + 774 0033 01        		.byte	1 + 775 0034 10        		.byte	16 + 776 0035 01        		.byte	1 + 777 0036 FF        		.byte	-1 + 778 0037 00        		.byte	0 + 779 0038 00        		.byte	0 + 780 0039 08        		.byte	8 + 781 003a C0        		.byte	-64 + 782 003b 16        		.byte	22 + 783 003c DC        		.byte	-36 + 784 003d 05        		.byte	5 + 785 003e 01        		.byte	1 + 786 003f 01        		.byte	1 + 787 0040 01        		.byte	1 + 788 0041 02        		.byte	2 + 789 0042 00        		.byte	0 + 790 0043 01        		.byte	1 + 791               	.global	usbDescriptorConfiguration + 792               		.type	usbDescriptorConfiguration, @object + 793               		.size	usbDescriptorConfiguration, 18 + 794               	usbDescriptorConfiguration: + 795 0044 09        		.byte	9 + 796 0045 02        		.byte	2 + 797 0046 12        		.byte	18 + 798 0047 00        		.byte	0 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 15 + + + 799 0048 01        		.byte	1 + 800 0049 01        		.byte	1 + 801 004a 00        		.byte	0 + 802 004b 80        		.byte	-128 + 803 004c 32        		.byte	50 + 804 004d 09        		.byte	9 + 805 004e 04        		.byte	4 + 806 004f 00        		.byte	0 + 807 0050 00        		.byte	0 + 808 0051 00        		.byte	0 + 809 0052 00        		.byte	0 + 810 0053 00        		.byte	0 + 811 0054 00        		.byte	0 + 812 0055 00        		.byte	0 + 813               		.comm usbMsgPtr,2,1 + 814               		.comm usbRxToken,1,1 + 815               		.comm usbConfiguration,1,1 + 816               		.comm usbRxBuf,22,1 + 817               		.comm usbInputBufOffset,1,1 + 818               		.comm usbDeviceAddr,1,1 + 819               		.comm usbNewDeviceAddr,1,1 + 820               		.comm usbRxLen,1,1 + 821               		.comm usbCurrentTok,1,1 + 822               		.comm usbTxBuf,11,1   823               		.lcomm events,1 - 824               		.lcomm vectorTemp,4 - 825               		.lcomm didWriteSomething,1 - 826               		.data - 827               		.type	usbMsgLen, @object - 828               		.size	usbMsgLen, 1 - 829               	usbMsgLen: - 830 0001 FF        		.byte	-1 - 831               		.lcomm usbMsgFlags,1 - 832               		.lcomm writeLength,1 - 833               		.type	replyBuffer.1745, @object - 834               		.size	replyBuffer.1745, 4 - 835               	replyBuffer.1745: - 836 0002 16        		.byte	22 - 837 0003 FA        		.byte	-6 - 838 0004 40        		.byte	64 - 839 0005 0C        		.byte	12 - 840               		.lcomm wasReset.1698,1 - 841               	.global __do_copy_data - 842               	.global __do_clear_bss -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s 			page 16 + 824               		.lcomm currentAddress,2 + 825               		.lcomm vectorTemp,4 + 826               		.lcomm didWriteSomething,1 + 827               		.data + 828               		.type	usbMsgLen, @object + 829               		.size	usbMsgLen, 1 + 830               	usbMsgLen: + 831 0001 FF        		.byte	-1 + 832               		.lcomm usbMsgFlags,1 + 833               		.lcomm writeLength,1 + 834               		.type	replyBuffer.1745, @object + 835               		.size	replyBuffer.1745, 4 + 836               	replyBuffer.1745: + 837 0002 16        		.byte	22 + 838 0003 FA        		.byte	-6 + 839 0004 40        		.byte	64 + 840 0005 14        		.byte	20 + 841               		.lcomm wasReset.1698,1 + 842               	.global __do_copy_data + 843               	.global __do_clear_bss +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s 			page 16  DEFINED SYMBOLS                              *ABS*:00000000 main.c -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:2      *ABS*:0000003f __SREG__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:3      *ABS*:0000003e __SP_H__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:4      *ABS*:0000003d __SP_L__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:5      *ABS*:00000034 __CCP__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:6      *ABS*:00000000 __tmp_reg__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:7      *ABS*:00000001 __zero_reg__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:10     .text:00000000 writeFlashPage -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:824    .bss:00000007 didWriteSomething -                             .bss:00000000 currentAddress -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:46     .text:00000024 writeWordToPageBuffer -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:823    .bss:00000003 vectorTemp -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:822    .bss:00000002 events -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:140    .text:000000bc fillFlashWithVectors -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:168    .init3:00000000 PushMagicWord -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:192    .text:000000e2 main +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:2      *ABS*:0000003f __SREG__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:3      *ABS*:0000003e __SP_H__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:4      *ABS*:0000003d __SP_L__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:5      *ABS*:00000034 __CCP__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:6      *ABS*:00000000 __tmp_reg__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:7      *ABS*:00000001 __zero_reg__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:10     .text:00000000 writeFlashPage +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:825    .bss:00000007 didWriteSomething +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:823    .bss:00000001 currentAddress +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:46     .text:00000024 writeWordToPageBuffer +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:824    .bss:00000003 vectorTemp +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:121    .text:0000009e fillFlashWithVectors +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:149    .init3:00000000 PushMagicWord +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:173    .text:000000c4 main                              *COM*:00000001 usbRxLen                              *COM*:00000001 usbInputBufOffset                              *COM*:00000016 usbRxBuf                              *COM*:00000001 usbRxToken                              *COM*:0000000b usbTxBuf -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:726    .data:00000000 usbTxLen -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:825    .bss:00000008 usbMsgFlags -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:835    .data:00000002 replyBuffer.1745 +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:727    .data:00000000 usbTxLen +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:826    .bss:00000008 usbMsgFlags +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:836    .data:00000002 replyBuffer.1745                              *COM*:00000002 usbMsgPtr -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:831    .bss:00000009 writeLength +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:832    .bss:00000009 writeLength +                             .bss:00000000 events                              *COM*:00000001 usbNewDeviceAddr -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:771    .progmem.data:00000032 usbDescriptorDevice -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:793    .progmem.data:00000044 usbDescriptorConfiguration -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:732    .progmem.data:00000000 usbDescriptorString0 -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:740    .progmem.data:00000004 usbDescriptorStringVendor -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:761    .progmem.data:00000026 usbDescriptorStringDevice +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:772    .progmem.data:00000032 usbDescriptorDevice +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:794    .progmem.data:00000044 usbDescriptorConfiguration +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:733    .progmem.data:00000000 usbDescriptorString0 +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:741    .progmem.data:00000004 usbDescriptorStringVendor +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:762    .progmem.data:00000026 usbDescriptorStringDevice                              *COM*:00000001 usbConfiguration -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:829    .data:00000001 usbMsgLen +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:830    .data:00000001 usbMsgLen                              *COM*:00000001 usbDeviceAddr -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//cc9xcZmc.s:832    .bss:0000000a wasReset.1698 +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccsUuzSz.s:833    .bss:0000000a wasReset.1698                              *COM*:00000001 usbCurrentTok  UNDEFINED SYMBOLS diff --git a/firmware/main.hex b/firmware/main.hex index b136b0f..ebe2a3c 100644 --- a/firmware/main.hex +++ b/firmware/main.hex @@ -6,10 +6,10 @@  :1017500012011001FF000008C016DC0501010102A2
  :10176000000109021200010100803209040000009A
  :101770000000000011241FBECFE5D2E0DEBFCDBFC8
 -:1017800000EB0F9307E00F9310E0A0E6B0E0ECEE63
 +:1017800000EB0F9307E00F9310E0A0E6B0E0EAEF64
  :10179000FFE102C005900D92A636B107D9F710E01F
 -:1017A000A6E6B0E001C01D92AB39B107E1F7FDD16B
 -:1017B0001BC4A6CFA82FB92F80E090E041E050EAEB
 +:1017A000A6E6B0E001C01D92AB39B107E1F7EED17A
 +:1017B00022C4A6CFA82FB92F80E090E041E050EAE4
  :1017C000609530E009C02D9182279795879510F09C
  :1017D00084279527305EC8F36F5FA8F30895EADF8A
  :1017E0008D939D930895A6E088279927AA9569F07F
 @@ -59,88 +59,89 @@  :101AA00008BBC250D04011F010937C0010E21ABF66
  :101AB000086017B3177E402F477E54E05A95F1F720
  :101AC00008BB17BB48BB8ACF81E080936D00F894B8
 -:101AD000E0916600F0916700329785E080935700AF
 -:101AE000E89507B600FCFDCF789408952091660034
 -:101AF000309167002115310509F43FC024303105CC
 -:101B0000B1F046E12C3F340739F48091690090919F
 -:101B10006A008E579B4F0DC046E12E3F340749F4B3
 -:101B200080916B0090916C008D579B4F02C08FE7A6
 -:101B30009BECF894E0916600F091670021E00C01C5
 -:101B400020935700E89511247894409166005091B5
 -:101B50006700FA0125913491282339232817390782
 -:101B600029F0809168008160809368004E5F5F4F2C
 -:101B70005093670040936600089581E18093570079
 -:101B8000E895D5CFCF93DF93C0916600D0916700E1
 -:101B9000CF73D0708FEF9FEFA9DF2296C034D105AD
 -:101BA000CCF392DFDF91CF910895DF93CF930F9223
 -:101BB000CDB7DEB788E10FB6F89481BD11BC0FBE7A
 -:101BC000E0E0F0E0859194912BEC8F37920741F49F
 -:101BD000E4E0F0E0859194913BEC8F37930709F0B6
 -:101BE000D1DF1092670010926600AC9A8BB78062CA
 -:101BF0008BBFBB9A8FE49DE2A9E181509040A04049
 -:101C0000E1F700C00000BB987894EE24FF242091F7
 -:101C10008100235027FDEFC080917E00ECE0F0E0D2
 -:101C2000E81BF109EB57FF4F80917D008D3209F0E1
 -:101C30009FC0283009F0DDC083EC809371008AE5F5
 -:101C40008093600010926E002081922F90768181A7
 -:101C5000992301F1882341F482E690E0909380007B
 -:101C600080937F0024E07AC0813069F48281809380
 -:101C70006F0084819581909367008093660027FDB3
 -:101C800068C02FEF67C0809168008460809368000F
 -:101C900020E064C0928110927A00882331F410927F
 -:101CA0007B008AE790E022E04FC0853019F49093E2
 -:101CB000820040C08630A9F58381813019F480E527
 -:101CC00097E104C0823041F482E697E1909380006E
 -:101CD00080937F0022E121C08330F1F4992341F405
 -:101CE0008EE197E19093800080937F0024E015C0FF
 -:101CF000913041F482E297E19093800080937F00DD
 -:101D000022E20BC0923041F484E497E1909380008A
 -:101D100080937F002CE001C020E080E480936E007F
 -:101D20001DC0883059F0893019F49093840002C0A6
 -:101D30008A3039F08AE790E020E006C084E890E03D
 -:101D400002C08AE790E021E09093800080937F00BA
 -:101D500005C0268180E880936E0007C087818823B4
 -:101D600021F48681821708F4282F2093610041C056
 -:101D700080916E0087FF3DC080916F00821B809331
 -:101D80006F008F018091660090916700009749F481
 -:101D9000D8018D919C91119790936A00809369006E
 -:101DA00014C08430910541F4F801808191819093B1
 -:101DB0006C0080936B0009C0F6E18A3F9F0728F012
 -:101DC00081E180935700E89509C0D8018D919D91DC
 -:101DD0008D0129838BDE29812250A1F680916F002D
 -:101DE000882339F4809168008260809368001092A3
 -:101DF0006100109281008091600084FF47C0809153
 -:101E000061008F3F09F442C0082F893008F008E0D4
 -:101E1000801B809361008091710098E889278093EE
 -:101E20007100002339F1E0917F00F09180009091E2
 -:101E30006E00802F815096FF0CC090E08D589F4F10
 -:101E4000A2E7B0E024912D933196A817B907D1F7F6
 -:101E50000DC09F0190E08D589F4FA2E7B0E0F901BF
 -:101E600041919F014D93A817B907C9F7F0938000DE
 -:101E7000E0937F0082E790E0602FB1DC0C5F0C30D4
 -:101E800019F08FEF809361000093600084E196B3B6
 -:101E9000987131F48150D9F71092820010927C0031
 -:101EA00001E0811100E080917000801739F000237B
 -:101EB00019F4F8945FD07894009370008CE991E065
 -:101EC0000197F1F7000080916800882321F40894BD
 -:101ED000E11CF11C02C0EE24FF2480FF0EC0F89428
 -:101EE000E0916600F0916700329783E0809357009D
 -:101EF000E89507B600FCFDCF78948091680081FFDB
 -:101F000011C0A9E3B0E21197F1F700C00000809181
 -:101F10006600909167008F739070009711F032DE29
 -:101F200001C0D2DD8091680082FD05C0B1E5EB16ED
 -:101F3000B3ECFB06E0F0E1E2F1EA3197F1F700C023
 -:101F40000000F8941BBE15BA80916D00882311F42F
 -:101F500009C018DE8091660090916700F7E180303B
 -:101F60009F07B8F310925F0210925E02C7CB1092E7
 -:101F700068004DCEFF920F931F93CF93DF93C8E07D
 -:101F8000D0E010E000E8F12EF00EF1BE2CDC29E0EC
 -:101F9000843392070CF41F2D06952197A1F7212F6A
 -:101FA000215021BFEC01012F10C01DDC845399404A
 -:101FB00097FF03C0909581959F4F8C179D0714F450
 -:101FC00001B7EC0181B78F5F81BF21B730E0812F6E
 -:101FD00090E001968217930744F701BFDF91CF91FC
 -:0C1FE0001F910F91FF900895F894FFCF1F
 -:061FEC005AFF16FA400C3A
 +:101AD000E0916700F0916800329785E080935700AD
 +:101AE000E89507B600FCFDCF789408952091670033
 +:101AF000309168002115310589F124303105B1F0AC
 +:101B000046E12C3F340739F48091690090916A00D6
 +:101B10008E579B4F0DC046E12E3F340749F480910C
 +:101B20006B0090916C008D579B4F02C08FE79BEC30
 +:101B3000F894E0916700F091680021E00C01209397
 +:101B40005700E8951124789480916700909168007F
 +:101B500002969093680080936700089581E18093D6
 +:101B60005700E895E3CFCF93DF93C0916700D09102
 +:101B70006800CF73D0708FEF9FEFB8DF2296C0342C
 +:101B8000D105CCF3A1DFDF91CF910895DF93CF93FF
 +:101B90000F92CDB7DEB788E10FB6F89481BD11BCC6
 +:101BA0000FBEE0E0F0E0859194912BEC8F37920727
 +:101BB00041F4E4E0F0E0859194913BEC8F3793079A
 +:101BC00009F0D1DF1092680010926700AC9A8BB7D1
 +:101BD00080628BBFBB9A8FE49DE2A9E18150904067
 +:101BE000A040E1F700C00000BB987894EE24FF24E9
 +:101BF00020918100235027FDF3C080917E00ECE00E
 +:101C0000F0E0E81BF109EB57FF4F80917D008D322A
 +:101C100009F0A3C0283009F0E1C083EC8093710083
 +:101C20008AE58093600010926E002081922F90765A
 +:101C30008181992321F1882341F482E690E09093F9
 +:101C4000800080937F0024E07EC0813069F482812F
 +:101C500080936F00848195819093680080936700E2
 +:101C600027FD6CC02FEF6BC090916600823011F49D
 +:101C7000916001C094609093660020E064C09281FE
 +:101C800010927A00882331F410927B008AE790E06A
 +:101C900022E04FC0853019F49093820040C0863016
 +:101CA000A9F58381813019F480E597E104C0823081
 +:101CB00041F482E697E19093800080937F0022E1D7
 +:101CC00021C08330F1F4992341F48EE197E19093A0
 +:101CD000800080937F0024E015C0913041F482E2BF
 +:101CE00097E19093800080937F0022E20BC09230B6
 +:101CF00041F484E497E19093800080937F002CE08E
 +:101D000001C020E080E480936E001DC0883059F04F
 +:101D1000893019F49093840002C08A3039F08AE740
 +:101D200090E020E006C084E890E002C08AE790E0FE
 +:101D300021E09093800080937F0005C0268180E899
 +:101D400080936E0007C08781882321F486818217E3
 +:101D500008F4282F2093610041C080916E0087FF16
 +:101D60003DC080916F00821B80936F008F01809136
 +:101D7000670090916800009749F4D8018D919C917B
 +:101D8000119790936A008093690014C08430910584
 +:101D900041F4F8018081918190936C0080936B00F5
 +:101DA00009C0F6E18A3F9F0728F081E18093570040
 +:101DB000E89509C0D8018D919D918D01298396DE0A
 +:101DC00029812250A1F680916F00882339F48091F7
 +:101DD000660082608093660010926100109281001C
 +:101DE0008091600084FF47C0809161008F3F09F4BB
 +:101DF00042C0082F893008F008E0801B8093610002
 +:101E00008091710098E8892780937100002339F14F
 +:101E1000E0917F00F091800090916E00802F8150C2
 +:101E200096FF0CC090E08D589F4FA2E7B0E0249140
 +:101E30002D933196A817B907D1F70DC09F0190E0F7
 +:101E40008D589F4FA2E7B0E0F90141919F014D935A
 +:101E5000A817B907C9F7F0938000E0937F0082E7E5
 +:101E600090E0602FBCDC0C5F0C3019F08FEF80939A
 +:101E700061000093600084E196B3987131F4815061
 +:101E8000D9F71092820010927C0001E0811100E0ED
 +:101E900080917000801739F0002319F4F89471D004
 +:101EA0007894009370008CE991E00197F1F70000BD
 +:101EB00080916600882321F40894E11CF11C02C083
 +:101EC000EE24FF2480FF20C080EC96E113C0F8943C
 +:101ED000E0916700F091680083E080935700E895F7
 +:101EE00007B600FCFDCF7894809167009091680060
 +:101EF00080549040909368008093670080916700C1
 +:101F000090916800009719F78091660081FF11C0D9
 +:101F1000A9E3B0E21197F1F700C0000080916700DB
 +:101F2000909168008F739070009711F01CDE01C0D3
 +:101F3000CBDD8091660082FD05C0B1E5EB16B3EC08
 +:101F4000FB06E0F0E1E2F1EA3197F1F700C00000B2
 +:101F5000F8941BBE15BA80916D00882311F409C056
 +:101F600002DE8091670090916800F7E180309F0762
 +:101F7000B8F310925F0210925E02C0CB109266001E
 +:101F800037CEFF920F931F93CF93DF93C8E0D0E03B
 +:101F900010E000E8F12EF00EF1BE25DC29E08433DC
 +:101FA00092070CF41F2D06952197A1F7212F2150A0
 +:101FB00021BFEC01012F10C016DC8453994097FF1C
 +:101FC00003C0909581959F4F8C179D0714F401B71E
 +:101FD000EC0181B78F5F81BF21B730E0812F90E0A6
 +:101FE00001968217930744F701BFDF91CF911F91AC
 +:0A1FF0000F91FF900895F894FFCFC1
 +:061FFA005AFF16FA401424
  :0400000300001700E2
  :00000001FF
 diff --git a/firmware/main.map b/firmware/main.map index 5bf5ec7..fd83c87 100644 --- a/firmware/main.map +++ b/firmware/main.map @@ -158,7 +158,7 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a  .rela.plt   *(.rela.plt) -.text           0x00001700      0x8ec +.text           0x00001700      0x8fa   *(.vectors)   .vectors       0x00001700       0x1e /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o                  0x00001700                __vectors @@ -241,17 +241,17 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a                  0x000017de                usbCrc16Append                  0x000017e6                usbMeasureFrameLength                  0x0000180c                __vector_2 - .text          0x00001ac8      0x4ac main.o -                0x00001baa                main - .text          0x00001f74       0x74 libs-device/osccal.o -                0x00001f74                calibrateOscillator -                0x00001fe8                . = ALIGN (0x2) + .text          0x00001ac8      0x4ba main.o +                0x00001b8c                main + .text          0x00001f82       0x74 libs-device/osccal.o +                0x00001f82                calibrateOscillator +                0x00001ff6                . = ALIGN (0x2)   *(.text.*) -                0x00001fe8                . = ALIGN (0x2) +                0x00001ff6                . = ALIGN (0x2)   *(.fini9) - .fini9         0x00001fe8        0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o) -                0x00001fe8                exit -                0x00001fe8                _exit + .fini9         0x00001ff6        0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o) +                0x00001ff6                exit +                0x00001ff6                _exit   *(.fini9)   *(.fini8)   *(.fini8) @@ -270,11 +270,11 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a   *(.fini1)   *(.fini1)   *(.fini0) - .fini0         0x00001fe8        0x4 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o) + .fini0         0x00001ff6        0x4 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o)   *(.fini0) -                0x00001fec                _etext = . +                0x00001ffa                _etext = . -.data           0x00800060        0x6 load address 0x00001fec +.data           0x00800060        0x6 load address 0x00001ffa                  0x00800060                PROVIDE (__data_start, .)   *(.data)   .data          0x00800060        0x6 main.o @@ -305,8 +305,8 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a                  0x00800084                usbConfiguration                  0x00800085                usbRxBuf                  0x0080009b                PROVIDE (__bss_end, .) -                0x00001fec                __data_load_start = LOADADDR (.data) -                0x00001ff2                __data_load_end = (__data_load_start + SIZEOF (.data)) +                0x00001ffa                __data_load_start = LOADADDR (.data) +                0x00002000                __data_load_end = (__data_load_start + SIZEOF (.data))  .noinit         0x0080009b        0x0                  0x0080009b                PROVIDE (__noinit_start, .) diff --git a/firmware/main.o b/firmware/main.oBinary files differ index 6e5e3ab..de18981 100644 --- a/firmware/main.o +++ b/firmware/main.o diff --git a/firmware/temp-dump.bin b/firmware/temp-dump.binBinary files differ index cbae830..e7c029c 100644 --- a/firmware/temp-dump.bin +++ b/firmware/temp-dump.bin diff --git a/firmware/upload.rb b/firmware/upload.rb index e3b77b2..f49a94f 100644 --- a/firmware/upload.rb +++ b/firmware/upload.rb @@ -5,6 +5,7 @@ class MicroBoot    Functions = [      :get_info,      :write_page, +    :erase_application,      :run_program    ] @@ -30,7 +31,7 @@ class MicroBoot        @info = {          flash_length: flash_length,          page_size: page_size, -        write_sleep: write_sleep.to_f / 1000.0, +        write_sleep: 0.020, #write_sleep.to_f / 1000.0,          version: "#{@device.bcdDevice >> 8}.#{@device.bcdDevice & 0xFF}",          version_numeric: @device.bcdDevice        } @@ -38,11 +39,20 @@ class MicroBoot      @info    end +  def erase! +    info = self.info +    control_transfer(function: :erase_application) +    sleep(info[:write_sleep] * ((info[:flash_length] / info[:page_size]) + 1)) # sleep for as many pages as the chip has +  end +      # upload a new program    def program= bytestring +    info = self.info      raise "Program too long!" if bytestring.bytesize > info[:flash_length]      bytes = bytestring.bytes.to_a +    erase! +          address = 0      bytes.each_slice(info[:page_size]) do |bytes|        control_transfer(function: :write_page, wIndex: address, wValue: bytes.length, dataOut: bytes.pack('C*')) diff --git a/firmware/usbdrv/oddebug.c.lst b/firmware/usbdrv/oddebug.c.lst index 7674b37..695c960 100644 --- a/firmware/usbdrv/oddebug.c.lst +++ b/firmware/usbdrv/oddebug.c.lst @@ -1,4 +1,4 @@ -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccJG9zbW.s 			page 1 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccoH6fZ5.s 			page 1     1               		.file	"oddebug.c" @@ -8,16 +8,16 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccJG9zbW.s 			page     5               	__CCP__ = 0x34     6               	__tmp_reg__ = 0     7               	__zero_reg__ = 1 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccJG9zbW.s 			page 2 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccoH6fZ5.s 			page 2  DEFINED SYMBOLS                              *ABS*:00000000 oddebug.c -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccJG9zbW.s:2      *ABS*:0000003f __SREG__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccJG9zbW.s:3      *ABS*:0000003e __SP_H__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccJG9zbW.s:4      *ABS*:0000003d __SP_L__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccJG9zbW.s:5      *ABS*:00000034 __CCP__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccJG9zbW.s:6      *ABS*:00000000 __tmp_reg__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccJG9zbW.s:7      *ABS*:00000001 __zero_reg__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccoH6fZ5.s:2      *ABS*:0000003f __SREG__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccoH6fZ5.s:3      *ABS*:0000003e __SP_H__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccoH6fZ5.s:4      *ABS*:0000003d __SP_L__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccoH6fZ5.s:5      *ABS*:00000034 __CCP__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccoH6fZ5.s:6      *ABS*:00000000 __tmp_reg__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccoH6fZ5.s:7      *ABS*:00000001 __zero_reg__  NO UNDEFINED SYMBOLS | 
