summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/Makefile2
-rw-r--r--firmware/libs-device/osccal.c.lst20
-rwxr-xr-xfirmware/main.binbin8969 -> 8957 bytes
-rw-r--r--firmware/main.c30
-rw-r--r--firmware/main.c.lst1378
-rw-r--r--firmware/main.hex291
-rw-r--r--firmware/main.map126
-rw-r--r--firmware/main.obin5952 -> 5940 bytes
-rw-r--r--firmware/usbdrv/oddebug.c.lst16
9 files changed, 916 insertions, 947 deletions
diff --git a/firmware/Makefile b/firmware/Makefile
index 4f4c077..66e5c3f 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -19,7 +19,7 @@ F_CPU = 16500000
DEVICE = attiny85
# BOOTLOADER_ADDRESS is 1800 for 8k devices, 3800 for 16k and 7800 for 32k.
# Can be on the start of any flash page for ATtiny85, but must be set low enough so there is space for the full boot loader
-BOOTLOADER_ADDRESS = 1500
+BOOTLOADER_ADDRESS = 1700
FUSEOPT = $(FUSEOPT_t85)
LOCKOPT = -U lock:w:0x2f:m
diff --git a/firmware/libs-device/osccal.c.lst b/firmware/libs-device/osccal.c.lst
index 32f898a..03c6fe2 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//ccmICX6q.s page 1
+GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmBVyO8.s page 1
1 .file "osccal.c"
@@ -58,7 +58,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmICX6q.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//ccmICX6q.s page 2
+ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmBVyO8.s page 2
58 004c 01B7 in r16,81-32
@@ -85,18 +85,18 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmICX6q.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//ccmICX6q.s page 3
+ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmBVyO8.s page 3
DEFINED SYMBOLS
*ABS*:00000000 osccal.c
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmICX6q.s:2 *ABS*:0000003f __SREG__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmICX6q.s:3 *ABS*:0000003e __SP_H__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmICX6q.s:4 *ABS*:0000003d __SP_L__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmICX6q.s:5 *ABS*:00000034 __CCP__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmICX6q.s:6 *ABS*:00000000 __tmp_reg__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmICX6q.s:7 *ABS*:00000001 __zero_reg__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmICX6q.s:11 .text:00000000 calibrateOscillator
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmBVyO8.s:2 *ABS*:0000003f __SREG__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmBVyO8.s:3 *ABS*:0000003e __SP_H__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmBVyO8.s:4 *ABS*:0000003d __SP_L__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmBVyO8.s:5 *ABS*:00000034 __CCP__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmBVyO8.s:6 *ABS*:00000000 __tmp_reg__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmBVyO8.s:7 *ABS*:00000001 __zero_reg__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccmBVyO8.s:11 .text:00000000 calibrateOscillator
UNDEFINED SYMBOLS
usbMeasureFrameLength
diff --git a/firmware/main.bin b/firmware/main.bin
index 078f449..5d678b8 100755
--- a/firmware/main.bin
+++ b/firmware/main.bin
Binary files differ
diff --git a/firmware/main.c b/firmware/main.c
index f94498f..1b0369c 100644
--- a/firmware/main.c
+++ b/firmware/main.c
@@ -26,24 +26,7 @@ static void leaveBootloader() __attribute__((__noreturn__));
#define UBOOT_VERSION 1
// how many milliseconds should host wait till it sends another write?
// this needs to be above 9, but 20 is only sensible for testing
-#define UBOOT_WRITE_SLEEP 20
-
-// set a pin on DDRB to be an input or an output - i.e. becomeOutput(pin(3));
-#define bit(number) _BV(number)
-#define pin(number) _BV(number)
-#define inputs(pinmap) DDRB &= ~(pinmap)
-#define outputs(pinmap) DDRB |= (pinmap)
-
-// turn some pins on or off
-#define pinsOn(pinmap) PORTB |= (pinmap)
-#define pinsOff(pinmap) PORTB &= ~(pinmap)
-#define pinsToggle(pinmap) PORTB ^= pinmap
-
-// turn a single pin on or off
-#define pinOn(pin) pinsOn(bit(pin))
-#define pinOff(pin) pinsOff(bit(pin))
-// TODO: Should be called pinToggle
-#define toggle(pin) pinsToggle(bit(pin))
+#define UBOOT_WRITE_SLEEP 12
/* ------------------------------------------------------------------------ */
@@ -112,7 +95,6 @@ static addr_t currentAddress; /* in bytes */
/* ------------------------------------------------------------------------ */
-// TODO: inline these?
static inline void eraseFlashPage(void) {
cli();
boot_page_erase(currentAddress - 2);
@@ -188,7 +170,7 @@ static void fillFlashWithVectors(void) {
static uchar usbFunctionSetup(uchar data[8]) {
usbRequest_t *rq = (void *)data;
- static uchar replyBuffer[5] = { // TODO: Adjust this buffer size when trimming off those two useless bytes
+ static uchar replyBuffer[5] = {
UBOOT_VERSION,
(((uint)PROGMEM_SIZE) >> 8) & 0xff,
((uint)PROGMEM_SIZE) & 0xff,
@@ -201,7 +183,6 @@ static uchar usbFunctionSetup(uchar data[8]) {
return 5;
} else if (rq->bRequest == 1) { // write page
- pinOff(0);
writeLength = rq->wValue.word;
currentAddress = rq->wIndex.word;
return USB_NO_MSG; // magical? IDK - USBaspLoader-tiny85 returns this and it works so whatever.
@@ -287,7 +268,7 @@ static inline void tiny85FlashInit(void) {
}
static inline void tiny85FlashWrites(void) {
- _delay_ms(2); // TODO: why is this here?
+ _delay_ms(2); // TODO: why is this here? - it just adds pointless two level deep loops seems like?
// write page to flash, interrupts will be disabled for > 4.5ms including erase
if (currentAddress % SPM_PAGESIZE) {
@@ -327,12 +308,7 @@ int __attribute__((noreturn)) main(void) {
tiny85FlashInit();
currentAddress = 0; // TODO: think about if this is necessary
bootLoaderInit();
- //odDebugInit();
- ////DBG1(0x00, 0, 0);
- outputs(pin(0) | pin(1));
- pinOn(0);
- pinOff(1);
if (bootLoaderCondition()){
initForUsbConnectivity();
diff --git a/firmware/main.c.lst b/firmware/main.c.lst
index cb6b60c..1a0b0a7 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//ccYBGVjm.s page 1
+GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s page 1
1 .file "main.c"
@@ -18,7 +18,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page
15 0000 81E0 ldi r24,lo8(1)
16 0002 8093 0000 sts didWriteSomething,r24
17 /* #APP */
- 18 ; 125 "main.c" 1
+ 18 ; 107 "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//ccYBGVjm.s page
24 0010 3297 sbiw r30,2
25 0012 85E0 ldi r24,lo8(5)
26 /* #APP */
- 27 ; 126 "main.c" 1
+ 27 ; 108 "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//ccYBGVjm.s page
35 001c 00FC sbrc __tmp_reg__,0
36 001e 00C0 rjmp .L2
37 /* #APP */
- 38 ; 128 "main.c" 1
+ 38 ; 110 "main.c" 1
39 0020 7894 sei
40 ; 0 "" 2
41 /* epilogue start */
@@ -58,36 +58,36 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page
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//ccYBGVjm.s page 2
+ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s page 2
58 0036 3105 cpc r19,__zero_reg__
59 0038 01F0 breq .L9
- 60 003a 44E1 ldi r20,hi8(5372)
- 61 003c 2C3F cpi r18,lo8(5372)
+ 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(-(1410))
- 67 004c 9A4F sbci r25,hi8(-(1410))
+ 66 004a 8E57 subi r24,lo8(-(1154))
+ 67 004c 9B4F sbci r25,hi8(-(1154))
68 004e 00C0 rjmp .L7
69 .L6:
- 70 0050 44E1 ldi r20,hi8(5374)
- 71 0052 2E3F cpi r18,lo8(5374)
+ 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(-(1411))
- 77 0062 9A4F sbci r25,hi8(-(1411))
+ 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(-13697)
- 81 0068 9AEC ldi r25,hi8(-13697)
+ 80 0066 8FE7 ldi r24,lo8(-13441)
+ 81 0068 9BEC ldi r25,hi8(-13441)
82 .L7:
83 /* #APP */
- 84 ; 162 "main.c" 1
+ 84 ; 144 "main.c" 1
85 006a F894 cli
86 ; 0 "" 2
87 /* #NOAPP */
@@ -95,14 +95,14 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page
89 0070 F091 0000 lds r31,currentAddress+1
90 0074 21E0 ldi r18,lo8(1)
91 /* #APP */
- 92 ; 163 "main.c" 1
+ 92 ; 145 "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 ; 164 "main.c" 1
+ 99 ; 146 "main.c" 1
100 0080 7894 sei
101 ; 0 "" 2
102 /* #NOAPP */
@@ -110,7 +110,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page
104 0086 5091 0000 lds r21,currentAddress+1
105 008a FA01 movw r30,r20
106 /* #APP */
- 107 ; 169 "main.c" 1
+ 107 ; 151 "main.c" 1
108 008c 2591 lpm r18, Z+
109 008e 3491 lpm r19, Z
110
@@ -118,7 +118,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page
112 /* #NOAPP */
113 0090 2823 and r18,r24
114 0092 3923 and r19,r25
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 3
+ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s page 3
115 0094 2817 cp r18,r24
@@ -137,7 +137,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page
128 .L4:
129 00b2 81E1 ldi r24,lo8(17)
130 /* #APP */
- 131 ; 160 "main.c" 1
+ 131 ; 142 "main.c" 1
132 00b4 8093 5700 sts 87, r24
133 00b8 E895 spm
134
@@ -178,21 +178,21 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page
169 /* prologue: naked */
170 /* frame size = 0 */
171 /* stack size = 0 */
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 4
+ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s page 4
172 .L__stack_usage = 0
173 /* #APP */
- 174 ; 258 "main.c" 1
+ 174 ; 239 "main.c" 1
175 0000 00EB ldi r16, 0xB0
176 ; 0 "" 2
- 177 ; 259 "main.c" 1
+ 177 ; 240 "main.c" 1
178 0002 0F93 push r16
179 ; 0 "" 2
- 180 ; 260 "main.c" 1
+ 180 ; 241 "main.c" 1
181 0004 07E0 ldi r16, 0x07
182 ; 0 "" 2
- 183 ; 261 "main.c" 1
+ 183 ; 242 "main.c" 1
184 0006 0F93 push r16
185 ; 0 "" 2
186 /* epilogue start */
@@ -213,7 +213,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page
201 .L__stack_usage = 3
202 00ec 88E1 ldi r24,lo8(24)
203 /* #APP */
- 204 ; 326 "main.c" 1
+ 204 ; 307 "main.c" 1
205 00ee 0FB6 in __tmp_reg__, __SREG__
206 00f0 F894 cli
207 00f2 81BD out 33, r24
@@ -225,30 +225,30 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page
213 00f8 E0E0 ldi r30,lo8(0)
214 00fa F0E0 ldi r31,hi8(0)
215 /* #APP */
- 216 ; 279 "main.c" 1
+ 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 2AEC ldi r18,hi8(-13697)
- 223 0102 8F37 cpi r24,lo8(-13697)
+ 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//ccYBGVjm.s page 5
+ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s page 5
- 229 ; 280 "main.c" 1
+ 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 3AEC ldi r19,hi8(-13697)
- 236 0112 8F37 cpi r24,lo8(-13697)
+ 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:
@@ -256,682 +256,676 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page
241 .L15:
242 011a 1092 0000 sts currentAddress+1,__zero_reg__
243 011e 1092 0000 sts currentAddress,__zero_reg__
- 244 0122 87B3 in r24,55-32
- 245 0124 8360 ori r24,lo8(3)
- 246 0126 87BB out 55-32,r24
- 247 0128 C09A sbi 56-32,0
- 248 012a C198 cbi 56-32,1
- 249 012c AC9A sbi 53-32,4
- 250 012e 8BB7 in r24,91-32
- 251 0130 8062 ori r24,lo8(32)
- 252 0132 8BBF out 91-32,r24
- 253 0134 BB9A sbi 55-32,3
- 254 0136 8FE4 ldi r24,lo8(1649999)
- 255 0138 9DE2 ldi r25,hi8(1649999)
- 256 013a A9E1 ldi r26,hlo8(1649999)
- 257 013c 8150 1:subi r24,1
- 258 013e 9040 sbci r25,0
- 259 0140 A040 sbci r26,0
- 260 0142 01F4 brne 1b
- 261 0144 00C0 rjmp .
- 262 0146 0000 nop
- 263 0148 BB98 cbi 55-32,3
- 264 /* #APP */
- 265 ; 272 "main.c" 1
- 266 014a 7894 sei
- 267 ; 0 "" 2
- 268 /* #NOAPP */
- 269 014c EE24 clr r14
- 270 014e FF24 clr r15
- 271 .L66:
- 272 0150 2091 0000 lds r18,usbRxLen
- 273 0154 2350 subi r18,lo8(-(-3))
- 274 0156 27FD sbrc r18,7
- 275 0158 00C0 rjmp .L16
- 276 015a 8091 0000 lds r24,usbInputBufOffset
- 277 015e ECE0 ldi r30,lo8(12)
- 278 0160 F0E0 ldi r31,hi8(12)
- 279 0162 E81B sub r30,r24
- 280 0164 F109 sbc r31,__zero_reg__
- 281 0166 E050 subi r30,lo8(-(usbRxBuf))
- 282 0168 F040 sbci r31,hi8(-(usbRxBuf))
- 283 016a 8091 0000 lds r24,usbRxToken
- 284 016e 8D32 cpi r24,lo8(45)
- 285 0170 01F0 breq .+2
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 6
-
-
- 286 0172 00C0 rjmp .L17
- 287 0174 2830 cpi r18,lo8(8)
- 288 0176 01F0 breq .+2
- 289 0178 00C0 rjmp .L18
- 290 017a 83EC ldi r24,lo8(-61)
- 291 017c 8093 0000 sts usbTxBuf,r24
- 292 0180 8AE5 ldi r24,lo8(90)
- 293 0182 8093 0000 sts usbTxLen,r24
- 294 0186 1092 0000 sts usbMsgFlags,__zero_reg__
- 295 018a 9081 ld r25,Z
- 296 018c 9076 andi r25,lo8(96)
- 297 018e 8181 ldd r24,Z+1
- 298 0190 9923 tst r25
- 299 0192 01F0 breq .L19
- 300 0194 8823 tst r24
- 301 0196 01F4 brne .L20
- 302 0198 80E0 ldi r24,lo8(replyBuffer.1750)
- 303 019a 90E0 ldi r25,hi8(replyBuffer.1750)
- 304 019c 9093 0000 sts usbMsgPtr+1,r25
- 305 01a0 8093 0000 sts usbMsgPtr,r24
- 306 01a4 25E0 ldi r18,lo8(5)
- 307 01a6 00C0 rjmp .L25
- 308 .L20:
- 309 01a8 8130 cpi r24,lo8(1)
- 310 01aa 01F4 brne .L22
- 311 01ac C098 cbi 56-32,0
- 312 01ae 8281 ldd r24,Z+2
- 313 01b0 8093 0000 sts writeLength,r24
- 314 01b4 8481 ldd r24,Z+4
- 315 01b6 9581 ldd r25,Z+5
- 316 01b8 9093 0000 sts currentAddress+1,r25
- 317 01bc 8093 0000 sts currentAddress,r24
- 318 01c0 8081 ld r24,Z
- 319 01c2 87FD sbrc r24,7
- 320 01c4 00C0 rjmp .L23
- 321 01c6 2FEF ldi r18,lo8(-1)
- 322 01c8 00C0 rjmp .L24
- 323 .L22:
- 324 01ca 8091 0000 lds r24,events
- 325 01ce 8460 ori r24,lo8(4)
- 326 01d0 8093 0000 sts events,r24
- 327 01d4 20E0 ldi r18,lo8(0)
- 328 01d6 00C0 rjmp .L25
- 329 .L19:
- 330 01d8 9281 ldd r25,Z+2
- 331 01da 1092 0000 sts usbTxBuf+9,__zero_reg__
- 332 01de 8823 tst r24
- 333 01e0 01F4 brne .L26
- 334 01e2 1092 0000 sts usbTxBuf+10,__zero_reg__
- 335 01e6 80E0 ldi r24,lo8(usbTxBuf+9)
- 336 01e8 90E0 ldi r25,hi8(usbTxBuf+9)
- 337 01ea 22E0 ldi r18,lo8(2)
- 338 01ec 00C0 rjmp .L27
- 339 .L26:
- 340 01ee 8530 cpi r24,lo8(5)
- 341 01f0 01F4 brne .L28
- 342 01f2 9093 0000 sts usbNewDeviceAddr,r25
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 7
-
-
- 343 01f6 00C0 rjmp .L73
- 344 .L28:
- 345 01f8 8630 cpi r24,lo8(6)
- 346 01fa 01F4 brne .L29
- 347 01fc 8381 ldd r24,Z+3
- 348 01fe 8130 cpi r24,lo8(1)
- 349 0200 01F4 brne .L30
- 350 0202 80E0 ldi r24,lo8(usbDescriptorDevice)
- 351 0204 90E0 ldi r25,hi8(usbDescriptorDevice)
- 352 0206 00C0 rjmp .L72
- 353 .L30:
- 354 0208 8230 cpi r24,lo8(2)
- 355 020a 01F4 brne .L32
- 356 020c 80E0 ldi r24,lo8(usbDescriptorConfiguration)
- 357 020e 90E0 ldi r25,hi8(usbDescriptorConfiguration)
- 358 .L72:
- 359 0210 9093 0000 sts usbMsgPtr+1,r25
- 360 0214 8093 0000 sts usbMsgPtr,r24
- 361 0218 22E1 ldi r18,lo8(18)
- 362 021a 00C0 rjmp .L31
- 363 .L32:
- 364 021c 8330 cpi r24,lo8(3)
- 365 021e 01F4 brne .L68
- 366 0220 9923 tst r25
- 367 0222 01F4 brne .L33
- 368 0224 80E0 ldi r24,lo8(usbDescriptorString0)
- 369 0226 90E0 ldi r25,hi8(usbDescriptorString0)
- 370 0228 9093 0000 sts usbMsgPtr+1,r25
- 371 022c 8093 0000 sts usbMsgPtr,r24
- 372 0230 24E0 ldi r18,lo8(4)
- 373 0232 00C0 rjmp .L31
- 374 .L33:
- 375 0234 9130 cpi r25,lo8(1)
- 376 0236 01F4 brne .L34
- 377 0238 80E0 ldi r24,lo8(usbDescriptorStringVendor)
- 378 023a 90E0 ldi r25,hi8(usbDescriptorStringVendor)
- 379 023c 9093 0000 sts usbMsgPtr+1,r25
- 380 0240 8093 0000 sts usbMsgPtr,r24
- 381 0244 22E2 ldi r18,lo8(34)
- 382 0246 00C0 rjmp .L31
- 383 .L34:
- 384 0248 9230 cpi r25,lo8(2)
- 385 024a 01F4 brne .L68
- 386 024c 80E0 ldi r24,lo8(usbDescriptorStringDevice)
- 387 024e 90E0 ldi r25,hi8(usbDescriptorStringDevice)
- 388 0250 9093 0000 sts usbMsgPtr+1,r25
- 389 0254 8093 0000 sts usbMsgPtr,r24
- 390 0258 2CE0 ldi r18,lo8(12)
- 391 025a 00C0 rjmp .L31
- 392 .L68:
- 393 025c 20E0 ldi r18,lo8(0)
- 394 .L31:
- 395 025e 80E4 ldi r24,lo8(64)
- 396 0260 8093 0000 sts usbMsgFlags,r24
- 397 0264 00C0 rjmp .L25
- 398 .L29:
- 399 0266 8830 cpi r24,lo8(8)
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 8
-
-
- 400 0268 01F0 breq .L69
- 401 026a 8930 cpi r24,lo8(9)
- 402 026c 01F4 brne .L36
- 403 026e 9093 0000 sts usbConfiguration,r25
- 404 0272 00C0 rjmp .L73
- 405 .L36:
- 406 0274 8A30 cpi r24,lo8(10)
- 407 0276 01F0 breq .L70
- 408 .L73:
- 409 0278 80E0 ldi r24,lo8(usbTxBuf+9)
- 410 027a 90E0 ldi r25,hi8(usbTxBuf+9)
- 411 027c 20E0 ldi r18,lo8(0)
- 412 027e 00C0 rjmp .L27
- 413 .L69:
- 414 0280 80E0 ldi r24,lo8(usbConfiguration)
- 415 0282 90E0 ldi r25,hi8(usbConfiguration)
- 416 0284 00C0 rjmp .L74
- 417 .L70:
- 418 0286 80E0 ldi r24,lo8(usbTxBuf+9)
- 419 0288 90E0 ldi r25,hi8(usbTxBuf+9)
- 420 .L74:
- 421 028a 21E0 ldi r18,lo8(1)
- 422 .L27:
- 423 028c 9093 0000 sts usbMsgPtr+1,r25
- 424 0290 8093 0000 sts usbMsgPtr,r24
- 425 0294 00C0 rjmp .L25
- 426 .L23:
- 427 0296 2681 ldd r18,Z+6
- 428 .L24:
- 429 0298 80E8 ldi r24,lo8(-128)
- 430 029a 8093 0000 sts usbMsgFlags,r24
- 431 029e 00C0 rjmp .L37
- 432 .L25:
- 433 02a0 8781 ldd r24,Z+7
- 434 02a2 8823 tst r24
- 435 02a4 01F4 brne .L37
- 436 02a6 8681 ldd r24,Z+6
- 437 02a8 8217 cp r24,r18
- 438 02aa 00F4 brsh .L37
- 439 02ac 282F mov r18,r24
- 440 .L37:
- 441 02ae 2093 0000 sts usbMsgLen,r18
- 442 02b2 00C0 rjmp .L18
- 443 .L17:
- 444 02b4 8091 0000 lds r24,usbMsgFlags
- 445 02b8 87FF sbrs r24,7
- 446 02ba 00C0 rjmp .L18
- 447 02bc 8091 0000 lds r24,writeLength
- 448 02c0 821B sub r24,r18
- 449 02c2 8093 0000 sts writeLength,r24
- 450 02c6 8F01 movw r16,r30
- 451 .L42:
- 452 02c8 8091 0000 lds r24,currentAddress
- 453 02cc 9091 0000 lds r25,currentAddress+1
- 454 02d0 0097 sbiw r24,0
- 455 02d2 01F4 brne .L38
- 456 02d4 D801 movw r26,r16
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 9
-
-
- 457 02d6 8D91 ld r24,X+
- 458 02d8 9C91 ld r25,X
- 459 02da 1197 sbiw r26,1
- 460 02dc 9093 0000 sts vectorTemp+1,r25
- 461 02e0 8093 0000 sts vectorTemp,r24
- 462 02e4 00C0 rjmp .L39
- 463 .L38:
- 464 02e6 8430 cpi r24,4
- 465 02e8 9105 cpc r25,__zero_reg__
- 466 02ea 01F4 brne .L40
- 467 02ec F801 movw r30,r16
- 468 02ee 8081 ld r24,Z
- 469 02f0 9181 ldd r25,Z+1
- 470 02f2 9093 0000 sts vectorTemp+2+1,r25
- 471 02f6 8093 0000 sts vectorTemp+2,r24
- 472 02fa 00C0 rjmp .L39
- 473 .L40:
- 474 02fc F4E1 ldi r31,hi8(5370)
- 475 02fe 8A3F cpi r24,lo8(5370)
- 476 0300 9F07 cpc r25,r31
- 477 0302 00F0 brlo .L39
- 478 0304 81E1 ldi r24,lo8(17)
- 479 /* #APP */
- 480 ; 235 "main.c" 1
- 481 0306 8093 5700 sts 87, r24
- 482 030a E895 spm
- 483
- 484 ; 0 "" 2
- 485 /* #NOAPP */
- 486 030c 00C0 rjmp .L41
- 487 .L39:
- 488 030e D801 movw r26,r16
- 489 0310 8D91 ld r24,X+
- 490 0312 9D91 ld r25,X+
- 491 0314 8D01 movw r16,r26
- 492 0316 2983 std Y+1,r18
- 493 0318 00D0 rcall writeWordToPageBuffer
- 494 031a 2981 ldd r18,Y+1
- 495 031c 2250 subi r18,lo8(-(-2))
- 496 031e 01F4 brne .L42
- 497 .L41:
- 498 0320 8091 0000 lds r24,writeLength
- 499 0324 8823 tst r24
- 500 0326 01F4 brne .L18
- 501 0328 8091 0000 lds r24,events
- 502 032c 8260 ori r24,lo8(2)
- 503 032e 8093 0000 sts events,r24
- 504 0332 1092 0000 sts usbMsgLen,__zero_reg__
- 505 .L18:
- 506 0336 1092 0000 sts usbRxLen,__zero_reg__
- 507 .L16:
- 508 033a 8091 0000 lds r24,usbTxLen
- 509 033e 84FF sbrs r24,4
- 510 0340 00C0 rjmp .L43
- 511 0342 8091 0000 lds r24,usbMsgLen
- 512 0346 8F3F cpi r24,lo8(-1)
- 513 0348 01F4 brne .+2
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 10
-
-
- 514 034a 00C0 rjmp .L43
- 515 034c 082F mov r16,r24
- 516 034e 8930 cpi r24,lo8(9)
- 517 0350 00F0 brlo .L44
- 518 0352 08E0 ldi r16,lo8(8)
- 519 .L44:
- 520 0354 801B sub r24,r16
- 521 0356 8093 0000 sts usbMsgLen,r24
- 522 035a 8091 0000 lds r24,usbTxBuf
- 523 035e 98E8 ldi r25,lo8(-120)
- 524 0360 8927 eor r24,r25
- 525 0362 8093 0000 sts usbTxBuf,r24
- 526 0366 0023 tst r16
- 527 0368 01F0 breq .L45
- 528 036a E091 0000 lds r30,usbMsgPtr
- 529 036e F091 0000 lds r31,usbMsgPtr+1
- 530 0372 9091 0000 lds r25,usbMsgFlags
- 531 0376 802F mov r24,r16
- 532 0378 8150 subi r24,lo8(-(-1))
- 533 037a 96FF sbrs r25,6
- 534 037c 00C0 rjmp .L46
- 535 037e 90E0 ldi r25,lo8(0)
- 536 0380 8050 subi r24,lo8(-(usbTxBuf+2))
- 537 0382 9040 sbci r25,hi8(-(usbTxBuf+2))
- 538 0384 A0E0 ldi r26,lo8(usbTxBuf+1)
- 539 0386 B0E0 ldi r27,hi8(usbTxBuf+1)
- 540 .L47:
- 541 /* #APP */
- 542 ; 504 "usbdrv/usbdrv.c" 1
- 543 0388 2491 lpm r18, Z
- 544
- 545 ; 0 "" 2
- 546 /* #NOAPP */
- 547 038a 2D93 st X+,r18
- 548 038c 3196 adiw r30,1
- 549 038e A817 cp r26,r24
- 550 0390 B907 cpc r27,r25
- 551 0392 01F4 brne .L47
- 552 0394 00C0 rjmp .L48
- 553 .L46:
- 554 0396 9F01 movw r18,r30
- 555 0398 90E0 ldi r25,lo8(0)
- 556 039a 8050 subi r24,lo8(-(usbTxBuf+2))
- 557 039c 9040 sbci r25,hi8(-(usbTxBuf+2))
- 558 039e A0E0 ldi r26,lo8(usbTxBuf+1)
- 559 03a0 B0E0 ldi r27,hi8(usbTxBuf+1)
- 560 .L49:
- 561 03a2 F901 movw r30,r18
- 562 03a4 4191 ld r20,Z+
- 563 03a6 9F01 movw r18,r30
- 564 03a8 4D93 st X+,r20
- 565 03aa A817 cp r26,r24
- 566 03ac B907 cpc r27,r25
- 567 03ae 01F4 brne .L49
- 568 .L48:
- 569 03b0 F093 0000 sts usbMsgPtr+1,r31
- 570 03b4 E093 0000 sts usbMsgPtr,r30
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 11
-
-
- 571 .L45:
- 572 03b8 80E0 ldi r24,lo8(usbTxBuf+1)
- 573 03ba 90E0 ldi r25,hi8(usbTxBuf+1)
- 574 03bc 602F mov r22,r16
- 575 03be 00D0 rcall usbCrc16Append
- 576 03c0 0C5F subi r16,lo8(-(4))
- 577 03c2 0C30 cpi r16,lo8(12)
- 578 03c4 01F0 breq .L50
- 579 03c6 8FEF ldi r24,lo8(-1)
- 580 03c8 8093 0000 sts usbMsgLen,r24
- 581 .L50:
- 582 03cc 0093 0000 sts usbTxLen,r16
- 583 .L43:
- 584 03d0 84E1 ldi r24,lo8(20)
- 585 .L52:
- 586 03d2 96B3 in r25,54-32
- 587 03d4 9871 andi r25,lo8(24)
- 588 03d6 01F4 brne .L51
- 589 03d8 8150 subi r24,lo8(-(-1))
- 590 03da 01F4 brne .L52
- 591 03dc 1092 0000 sts usbNewDeviceAddr,__zero_reg__
- 592 03e0 1092 0000 sts usbDeviceAddr,__zero_reg__
- 593 .L51:
- 594 03e4 01E0 ldi r16,lo8(1)
- 595 03e6 8111 cpse r24,__zero_reg__
- 596 03e8 00E0 ldi r16,lo8(0)
- 597 .L53:
- 598 03ea 8091 0000 lds r24,wasReset.1698
- 599 03ee 8017 cp r24,r16
- 600 03f0 01F0 breq .L54
- 601 03f2 0023 tst r16
- 602 03f4 01F4 brne .L55
+ 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//ccgRI40l.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.1750)
+ 299 0192 90E0 ldi r25,hi8(replyBuffer.1750)
+ 300 0194 9093 0000 sts usbMsgPtr+1,r25
+ 301 0198 8093 0000 sts usbMsgPtr,r24
+ 302 019c 25E0 ldi r18,lo8(5)
+ 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//ccgRI40l.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//ccgRI40l.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//ccgRI40l.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//ccgRI40l.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//ccgRI40l.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 03f6 F894 cli
+ 605 03ee 7894 sei
606 ; 0 "" 2
607 /* #NOAPP */
- 608 03f8 00D0 rcall calibrateOscillator
- 609 /* #APP */
- 610 ; 557 "usbdrv/usbdrv.c" 1
- 611 03fa 7894 sei
- 612 ; 0 "" 2
- 613 /* #NOAPP */
- 614 .L55:
- 615 03fc 0093 0000 sts wasReset.1698,r16
- 616 .L54:
- 617 0400 8CE9 ldi r24,lo8(412)
- 618 0402 91E0 ldi r25,hi8(412)
- 619 0404 0197 1:sbiw r24,1
- 620 0406 01F4 brne 1b
- 621 0408 0000 nop
- 622 040a 8091 0000 lds r24,events
- 623 040e 8823 tst r24
- 624 0410 01F4 brne .L71
- 625 0412 0894 sec
- 626 0414 E11C adc r14,__zero_reg__
- 627 0416 F11C adc r15,__zero_reg__
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 12
-
-
- 628 0418 00C0 rjmp .L56
- 629 .L71:
- 630 041a EE24 clr r14
- 631 041c FF24 clr r15
- 632 .L56:
- 633 041e 80FF sbrs r24,0
- 634 0420 00C0 rjmp .L57
- 635 /* #APP */
- 636 ; 117 "main.c" 1
- 637 0422 F894 cli
- 638 ; 0 "" 2
- 639 /* #NOAPP */
- 640 0424 E091 0000 lds r30,currentAddress
- 641 0428 F091 0000 lds r31,currentAddress+1
- 642 042c 3297 sbiw r30,2
- 643 042e 83E0 ldi r24,lo8(3)
- 644 /* #APP */
- 645 ; 118 "main.c" 1
- 646 0430 8093 5700 sts 87, r24
- 647 0434 E895 spm
- 648
- 649 ; 0 "" 2
- 650 /* #NOAPP */
- 651 .L58:
- 652 0436 07B6 in __tmp_reg__,87-32
- 653 0438 00FC sbrc __tmp_reg__,0
- 654 043a 00C0 rjmp .L58
- 655 /* #APP */
- 656 ; 120 "main.c" 1
- 657 043c 7894 sei
- 658 ; 0 "" 2
- 659 /* #NOAPP */
- 660 .L57:
- 661 043e 8091 0000 lds r24,events
- 662 0442 81FF sbrs r24,1
- 663 0444 00C0 rjmp .L59
- 664 0446 A9E3 ldi r26,lo8(8249)
- 665 0448 B0E2 ldi r27,hi8(8249)
- 666 044a 1197 1:sbiw r26,1
- 667 044c 01F4 brne 1b
- 668 044e 00C0 rjmp .
- 669 0450 0000 nop
- 670 0452 8091 0000 lds r24,currentAddress
- 671 0456 9091 0000 lds r25,currentAddress+1
- 672 045a 8F73 andi r24,lo8(63)
- 673 045c 9070 andi r25,hi8(63)
- 674 045e 0097 sbiw r24,0
- 675 0460 01F0 breq .L60
- 676 0462 00D0 rcall fillFlashWithVectors
- 677 0464 00C0 rjmp .L59
- 678 .L60:
- 679 0466 00D0 rcall writeFlashPage
- 680 .L59:
- 681 0468 8091 0000 lds r24,events
- 682 046c 82FD sbrc r24,2
- 683 046e 00C0 rjmp .L61
- 684 0470 B1E5 ldi r27,lo8(-15535)
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 13
-
-
- 685 0472 EB16 cp r14,r27
- 686 0474 B3EC ldi r27,hi8(-15535)
- 687 0476 FB06 cpc r15,r27
- 688 0478 00F0 brlo .L62
- 689 .L61:
- 690 047a E1E2 ldi r30,lo8(-24287)
- 691 047c F1EA ldi r31,hi8(-24287)
- 692 047e 3197 1:sbiw r30,1
- 693 0480 01F4 brne 1b
- 694 0482 00C0 rjmp .
- 695 0484 0000 nop
- 696 /* #APP */
- 697 ; 303 "main.c" 1
- 698 0486 F894 cli
- 699 ; 0 "" 2
- 700 /* #NOAPP */
- 701 0488 1BBE out 91-32,__zero_reg__
- 702 048a 15BA out 53-32,__zero_reg__
- 703 048c 8091 0000 lds r24,didWriteSomething
- 704 0490 8823 tst r24
- 705 0492 01F4 brne .L63
- 706 0494 00C0 rjmp .L64
- 707 .L65:
- 708 0496 00D0 rcall fillFlashWithVectors
- 709 .L63:
- 710 0498 8091 0000 lds r24,currentAddress
- 711 049c 9091 0000 lds r25,currentAddress+1
- 712 04a0 F5E1 ldi r31,hi8(5376)
- 713 04a2 8030 cpi r24,lo8(5376)
- 714 04a4 9F07 cpc r25,r31
- 715 04a6 00F0 brlo .L65
- 716 .L64:
- 717 04a8 1092 5F02 sts 607,__zero_reg__
- 718 04ac 1092 5E02 sts 606,__zero_reg__
- 719 /* #APP */
- 720 ; 319 "main.c" 1
- 721 04b0 00C0 rjmp __vectors - 4
- 722 ; 0 "" 2
- 723 /* #NOAPP */
- 724 .L62:
- 725 04b2 1092 0000 sts events,__zero_reg__
- 726 04b6 00C0 rjmp .L66
- 727 .size main, .-main
- 728 .global usbTxLen
- 729 .data
- 730 .type usbTxLen, @object
- 731 .size usbTxLen, 1
- 732 usbTxLen:
- 733 0000 5A .byte 90
- 734 .global usbDescriptorString0
- 735 .section .progmem.data,"a",@progbits
- 736 .type usbDescriptorString0, @object
- 737 .size usbDescriptorString0, 4
- 738 usbDescriptorString0:
- 739 0000 04 .byte 4
- 740 0001 03 .byte 3
- 741 0002 09 .byte 9
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 14
-
-
- 742 0003 04 .byte 4
- 743 .global usbDescriptorStringVendor
- 744 .type usbDescriptorStringVendor, @object
- 745 .size usbDescriptorStringVendor, 34
- 746 usbDescriptorStringVendor:
- 747 0004 2203 .word 802
- 748 0006 6300 .word 99
- 749 0008 7200 .word 114
- 750 000a 6500 .word 101
- 751 000c 6100 .word 97
- 752 000e 7400 .word 116
- 753 0010 6900 .word 105
- 754 0012 7600 .word 118
- 755 0014 6500 .word 101
- 756 0016 7000 .word 112
- 757 0018 6F00 .word 111
- 758 001a 6E00 .word 110
- 759 001c 7900 .word 121
- 760 001e 2E00 .word 46
- 761 0020 6300 .word 99
- 762 0022 6F00 .word 111
- 763 0024 6D00 .word 109
- 764 .global usbDescriptorStringDevice
- 765 .type usbDescriptorStringDevice, @object
- 766 .size usbDescriptorStringDevice, 12
- 767 usbDescriptorStringDevice:
- 768 0026 0C03 .word 780
- 769 0028 7500 .word 117
- 770 002a 4200 .word 66
- 771 002c 6F00 .word 111
- 772 002e 6F00 .word 111
- 773 0030 7400 .word 116
- 774 .global usbDescriptorDevice
- 775 .type usbDescriptorDevice, @object
- 776 .size usbDescriptorDevice, 18
- 777 usbDescriptorDevice:
- 778 0032 12 .byte 18
- 779 0033 01 .byte 1
- 780 0034 10 .byte 16
- 781 0035 01 .byte 1
- 782 0036 FF .byte -1
- 783 0037 00 .byte 0
- 784 0038 00 .byte 0
- 785 0039 08 .byte 8
- 786 003a C0 .byte -64
- 787 003b 16 .byte 22
- 788 003c DC .byte -36
- 789 003d 05 .byte 5
- 790 003e 01 .byte 1
- 791 003f 00 .byte 0
- 792 0040 01 .byte 1
- 793 0041 02 .byte 2
- 794 0042 00 .byte 0
- 795 0043 01 .byte 1
- 796 .global usbDescriptorConfiguration
- 797 .type usbDescriptorConfiguration, @object
- 798 .size usbDescriptorConfiguration, 18
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 15
-
-
- 799 usbDescriptorConfiguration:
- 800 0044 09 .byte 9
- 801 0045 02 .byte 2
- 802 0046 12 .byte 18
- 803 0047 00 .byte 0
- 804 0048 01 .byte 1
- 805 0049 01 .byte 1
- 806 004a 00 .byte 0
- 807 004b 80 .byte -128
- 808 004c 32 .byte 50
- 809 004d 09 .byte 9
- 810 004e 04 .byte 4
- 811 004f 00 .byte 0
- 812 0050 00 .byte 0
- 813 0051 00 .byte 0
- 814 0052 00 .byte 0
- 815 0053 00 .byte 0
- 816 0054 00 .byte 0
- 817 0055 00 .byte 0
- 818 .comm usbMsgPtr,2,1
- 819 .comm usbRxToken,1,1
- 820 .comm usbConfiguration,1,1
- 821 .comm usbRxBuf,22,1
- 822 .comm usbInputBufOffset,1,1
- 823 .comm usbDeviceAddr,1,1
- 824 .comm usbNewDeviceAddr,1,1
- 825 .comm usbRxLen,1,1
- 826 .comm usbCurrentTok,1,1
- 827 .comm usbTxBuf,11,1
- 828 .lcomm currentAddress,2
- 829 .lcomm events,1
- 830 .lcomm vectorTemp,4
- 831 .lcomm didWriteSomething,1
- 832 .data
- 833 .type usbMsgLen, @object
- 834 .size usbMsgLen, 1
- 835 usbMsgLen:
- 836 0001 FF .byte -1
- 837 .lcomm usbMsgFlags,1
- 838 .lcomm writeLength,1
- 839 .type replyBuffer.1750, @object
- 840 .size replyBuffer.1750, 5
- 841 replyBuffer.1750:
- 842 0002 01 .byte 1
- 843 0003 14 .byte 20
- 844 0004 FA .byte -6
- 845 0005 40 .byte 64
- 846 0006 14 .byte 20
- 847 .lcomm wasReset.1698,1
- 848 .global __do_copy_data
- 849 .global __do_clear_bss
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s page 16
+ 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//ccgRI40l.s page 12
+
+
+ 628 0414 00C0 rjmp .L57
+ 629 /* #APP */
+ 630 ; 99 "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 ; 100 "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 ; 102 "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//ccgRI40l.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//ccgRI40l.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 00 .byte 0
+ 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//ccgRI40l.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
+ 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.1750, @object
+ 834 .size replyBuffer.1750, 5
+ 835 replyBuffer.1750:
+ 836 0002 01 .byte 1
+ 837 0003 16 .byte 22
+ 838 0004 FA .byte -6
+ 839 0005 40 .byte 64
+ 840 0006 0C .byte 12
+ 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//ccgRI40l.s page 16
DEFINED SYMBOLS
*ABS*:00000000 main.c
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:2 *ABS*:0000003f __SREG__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:3 *ABS*:0000003e __SP_H__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:4 *ABS*:0000003d __SP_L__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:5 *ABS*:00000034 __CCP__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:6 *ABS*:00000000 __tmp_reg__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:7 *ABS*:00000001 __zero_reg__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:10 .text:00000000 writeFlashPage
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:830 .bss:00000007 didWriteSomething
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:2 *ABS*:0000003f __SREG__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:3 *ABS*:0000003e __SP_H__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:4 *ABS*:0000003d __SP_L__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:5 *ABS*:00000034 __CCP__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:6 *ABS*:00000000 __tmp_reg__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:7 *ABS*:00000001 __zero_reg__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:10 .text:00000000 writeFlashPage
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:824 .bss:00000007 didWriteSomething
.bss:00000000 currentAddress
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:46 .text:00000024 writeWordToPageBuffer
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:829 .bss:00000003 vectorTemp
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:828 .bss:00000002 events
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:140 .text:000000bc fillFlashWithVectors
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:168 .init3:00000000 PushMagicWord
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:192 .text:000000e2 main
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:46 .text:00000024 writeWordToPageBuffer
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:823 .bss:00000003 vectorTemp
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:822 .bss:00000002 events
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:140 .text:000000bc fillFlashWithVectors
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:168 .init3:00000000 PushMagicWord
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:192 .text:000000e2 main
*COM*:00000001 usbRxLen
*COM*:00000001 usbInputBufOffset
*COM*:00000016 usbRxBuf
*COM*:00000001 usbRxToken
*COM*:0000000b usbTxBuf
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:732 .data:00000000 usbTxLen
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:831 .bss:00000008 usbMsgFlags
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:841 .data:00000002 replyBuffer.1750
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:726 .data:00000000 usbTxLen
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:825 .bss:00000008 usbMsgFlags
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:835 .data:00000002 replyBuffer.1750
*COM*:00000002 usbMsgPtr
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:837 .bss:00000009 writeLength
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:831 .bss:00000009 writeLength
*COM*:00000001 usbNewDeviceAddr
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:777 .progmem.data:00000032 usbDescriptorDevice
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:799 .progmem.data:00000044 usbDescriptorConfiguration
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:738 .progmem.data:00000000 usbDescriptorString0
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:746 .progmem.data:00000004 usbDescriptorStringVendor
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:767 .progmem.data:00000026 usbDescriptorStringDevice
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:771 .progmem.data:00000032 usbDescriptorDevice
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:793 .progmem.data:00000044 usbDescriptorConfiguration
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:732 .progmem.data:00000000 usbDescriptorString0
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:740 .progmem.data:00000004 usbDescriptorStringVendor
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:761 .progmem.data:00000026 usbDescriptorStringDevice
*COM*:00000001 usbConfiguration
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:835 .data:00000001 usbMsgLen
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:829 .data:00000001 usbMsgLen
*COM*:00000001 usbDeviceAddr
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccYBGVjm.s:838 .bss:0000000a wasReset.1698
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccgRI40l.s:832 .bss:0000000a wasReset.1698
*COM*:00000001 usbCurrentTok
UNDEFINED SYMBOLS
diff --git a/firmware/main.hex b/firmware/main.hex
index 3902f18..16520d4 100644
--- a/firmware/main.hex
+++ b/firmware/main.hex
@@ -1,147 +1,146 @@
-:1015000039C057C083C055C054C053C052C051C029
-:1015100050C04FC04EC04DC04CC04BC04AC0040369
-:101520000904220363007200650061007400690011
-:101530007600650070006F006E0079002E00630079
-:101540006F006D000C03750042006F006F007400A7
-:1015500012011001FF000008C016DC0501000102A5
-:10156000000109021200010100803209040000009C
-:101570000000000011241FBECFE5D2E0DEBFCDBFCA
-:1015800000EB0F9307E00F9310E0A0E6B0E0E8EF68
-:10159000FDE102C005900D92A836B107D9F710E021
-:1015A000A8E6B0E001C01D92AD39B107E1F7FDD169
-:1015B00021C4A6CFA82FB92F80E090E041E050EAE7
-:1015C000609530E009C02D9182279795879510F09E
-:1015D00084279527305EC8F36F5FA8F30895EADF8C
-:1015E0008D939D930895A6E088279927AA9569F081
-:1015F0000197E1F3B399FCCFB39BFECF81E099272C
-:10160000A6B3019611F0A871D9F70895CF93CFB77B
-:10161000CF93C0915F02C03B21F4C0915E02C730FE
-:1016200021F0CF91CFBFCF916ACFCC27C395B39B89
-:10163000E9F7B39B0BC0B39B09C0B39B07C0B39B37
-:1016400005C0B39B03C0B39B01C0D3C00F92DF930F
-:10165000C0918000DD27C957DF4F012EB39B03C027
-:10166000DF910F90E6CF2F930F931F934F932FEFA0
-:101670004F6F06B303FB20F95F933F9350E03BE0CD
-:1016800065C016B30126502953FDC89556B30127EE
-:1016900003FB25F92F7306B3B1F05027102713FB76
-:1016A00026F906B22230F0F000C016B3012703FB82
-:1016B00027F90126502906B22430E8F54F77206833
-:1016C00016B30000F6CF50274F7D206206B2102FD0
-:1016D000000000C006B300265029102713FB26F98E
-:1016E00006B2E2CF4F7B06B3206400C0DACF0126FA
-:1016F0005029187106B269F14E7F2160012F16B38F
-:1017000028C0002650294D7F06B22260102F29C024
-:10171000012650294B7F06B22460012F2DC016B33D
-:1017200001265029477F2860000006B22EC04F7E58
-:1017300006B3206130C0422706B3499300265029E2
-:10174000102706B24FEF13FB20F9297F16B379F269
-:10175000187159F10126502906B2012703FB21F91E
-:10176000237F06B371F2002650293150D0F006B223
-:10177000102713FB22F9277E16B351F201265029B8
-:10178000012703FB06B223F92F7C49F2000006B3C0
-:10179000102713FB24F90026502906B22F7939F2BD
-:1017A00070CF10E21ABF002717C03B503195C31B02
-:1017B000D04010E21ABF0881033CF9F00B34E9F085
-:1017C00020917E001981110F1213EDCF093651F1CE
-:1017D0000D3211F0013E39F7009385003F915F9182
-:1017E0004F911F910F912F91DF910F90CAB7C5FDB7
-:1017F0001DCFCF91CFBFCF91189520918500222387
-:1018000069F310918300112321F5343022F13093D4
-:10181000830020937F00109180003BE0311B3093C8
-:10182000800019C00091830001309CF40AE53091DA
-:10183000600034FD11C000936000C3E7D0E010C029
-:10184000052710E000C021C0052710E0C89508BB9F
-:1018500014C03AE501C032ED032EC0E0D0E032E022
-:1018600017B31861C39A08B317BB58E120E84FEFCC
-:1018700020FF052708BB279517951C3F28F7000078
-:101880004552B0F720FF0527279508BB17951C3F49
-:10189000B8F629913A9561F7077E10918400110FEF
-:1018A00008BBC250D04011F010937E0010E21ABF66
-:1018B000086017B3177E402F477E54E05A95F1F722
-:1018C00008BB17BB48BB8ACF81E080936F00F894B8
-:1018D000E0916800F0916900329785E080935700AD
-:1018E000E89507B600FCFDCF789408952091680034
-:1018F000309169002115310509F43FC024303105CC
-:10190000B1F044E12C3F340739F480916B009091A1
-:101910006C008E579A4F0DC044E12E3F340749F4B6
-:1019200080916D0090916E008D579A4F02C08FE7A5
-:101930009AECF894E0916800F091690021E00C01C4
-:1019400020935700E89511247894409168005091B5
-:101950006900FA0125913491282339232817390782
-:1019600029F080916A00816080936A004E5F5F4F2A
-:101970005093690040936800089581E18093570077
-:10198000E895D5CFCF93DF93C0916800D0916900DF
-:10199000CF73D0708FEF9FEFA9DF2296C034D105AF
-:1019A000CCF392DFDF91CF910895DF93CF930F9225
-:1019B000CDB7DEB788E10FB6F89481BD11BC0FBE7C
-:1019C000E0E0F0E0859194912AEC8F37920741F4A2
-:1019D000E4E0F0E0859194913AEC8F37930709F0B9
-:1019E000D1DF109269001092680087B3836087BBD3
-:1019F000C09AC198AC9A8BB780628BBFBB9A8FE4B8
-:101A00009DE2A9E181509040A040E1F700C00000B4
-:101A1000BB987894EE24FF2420918300235027FD67
-:101A2000F0C080918000ECE0F0E0E81BF109E9579C
-:101A3000FF4F80917F008D3209F0A0C0283009F05F
-:101A4000DEC083EC809373008AE58093600010927F
-:101A50007000908190768181992311F1882341F45F
-:101A600082E690E0909382008093810025E07CC024
-:101A7000813079F4C098828180937100848195814E
-:101A80009093690080936800808187FD68C02FEF84
-:101A900067C080916A00846080936A0020E064C01F
-:101AA000928110927C00882331F410927D008CE7A3
-:101AB00090E022E04FC0853019F49093840040C03C
-:101AC0008630A9F58381813019F480E595E104C061
-:101AD000823041F482E695E1909382008093810008
-:101AE00022E121C08330F1F4992341F48EE195E1A4
-:101AF000909382008093810024E015C0913041F4DE
-:101B000082E295E1909382008093810022E20BC0F3
-:101B1000923041F484E495E19093820080938100B7
-:101B20002CE001C020E080E4809370001DC088306C
-:101B300059F0893019F49093860002C08A3039F048
-:101B40008CE790E020E006C086E890E002C08CE7D9
-:101B500090E021E0909382008093810005C026816F
-:101B600080E88093700007C08781882321F48681F4
-:101B7000821708F4282F2093610041C080917000E3
-:101B800087FF3DC080917100821B809371008F019F
-:101B90008091680090916900009749F4D8018D9177
-:101BA0009C91119790936C0080936B0014C08430CB
-:101BB000910541F4F8018081918190936E008093AA
-:101BC0006D0009C0F4E18A3F9F0728F081E180930E
-:101BD0005700E89509C0D8018D919D918D01298309
-:101BE00085DE29812250A1F680917100882339F485
-:101BF00080916A00826080936A0010926100109266
-:101C000083008091600084FF47C0809161008F3F16
-:101C100009F442C0082F893008F008E0801B809347
-:101C200061008091730098E88927809373000023F6
-:101C300039F1E0918100F091820090917000802F45
-:101C4000815096FF0CC090E08B589F4FA4E7B0E006
-:101C500024912D933196A817B907D1F70DC09F0194
-:101C600090E08B589F4FA4E7B0E0F90141919F01AC
-:101C70004D93A817B907C9F7F0938200E09381004C
-:101C800084E790E0602FABDC0C5F0C3019F08FEF35
-:101C9000809361000093600084E196B3987131F401
-:101CA0008150D9F71092840010927E0001E08111DA
-:101CB00000E080917200801739F0002319F4F89445
-:101CC0005FD07894009372008CE991E00197F1F76E
-:101CD000000080916A00882321F40894E11CF11C23
-:101CE00002C0EE24FF2480FF0EC0F894E09168004B
-:101CF000F0916900329783E080935700E89507B62A
-:101D000000FCFDCF789480916A0081FF11C0A9E3A7
-:101D1000B0E21197F1F700C0000080916800909147
-:101D200069008F739070009711F02CDE01C0CCDD3C
-:101D300080916A0082FD05C0B1E5EB16B3ECFB06AD
-:101D4000E0F0E1E2F1EA3197F1F700C00000F89429
-:101D50001BBE15BA80916F00882311F409C012DEF2
-:101D60008091680090916900F5E180309F07B8F399
-:101D700010925F0210925E02C1CB10926A004CCEAC
-:101D8000FF920F931F93CF93DF93C8E0D0E010E052
-:101D900000E8F12EF00EF1BE26DC29E08433920734
-:101DA0000CF41F2D06952197A1F7212F215021BF5B
-:101DB000EC01012F10C017DC8453994097FF03C03A
-:101DC000909581959F4F8C179D0714F401B7EC01F6
-:101DD00081B78F5F81BF21B730E0812F90E00196FE
-:101DE0008217930744F701BFDF91CF911F910F91A5
-:081DF000FF900895F894FFCF65
-:081DF8005AFF0114FA40140027
-:0400000300001500E4
+:1017000039C057C083C055C054C053C052C051C027
+:1017100050C04FC04EC04DC04CC04BC04AC0040367
+:10172000090422036300720065006100740069000F
+:101730007600650070006F006E0079002E00630077
+:101740006F006D000C03750042006F006F007400A5
+:1017500012011001FF000008C016DC0501000102A3
+:10176000000109021200010100803209040000009A
+:101770000000000011241FBECFE5D2E0DEBFCDBFC8
+:1017800000EB0F9307E00F9310E0A0E6B0E0ECEE63
+:10179000FFE102C005900D92A836B107D9F710E01D
+:1017A000A8E6B0E001C01D92AD39B107E1F7FDD167
+:1017B0001BC4A6CFA82FB92F80E090E041E050EAEB
+:1017C000609530E009C02D9182279795879510F09C
+:1017D00084279527305EC8F36F5FA8F30895EADF8A
+:1017E0008D939D930895A6E088279927AA9569F07F
+:1017F0000197E1F3B399FCCFB39BFECF81E099272A
+:10180000A6B3019611F0A871D9F70895CF93CFB779
+:10181000CF93C0915F02C03B21F4C0915E02C730FC
+:1018200021F0CF91CFBFCF916ACFCC27C395B39B87
+:10183000E9F7B39B0BC0B39B09C0B39B07C0B39B35
+:1018400005C0B39B03C0B39B01C0D3C00F92DF930D
+:10185000C0918000DD27C957DF4F012EB39B03C025
+:10186000DF910F90E6CF2F930F931F934F932FEF9E
+:101870004F6F06B303FB20F95F933F9350E03BE0CB
+:1018800065C016B30126502953FDC89556B30127EC
+:1018900003FB25F92F7306B3B1F05027102713FB74
+:1018A00026F906B22230F0F000C016B3012703FB80
+:1018B00027F90126502906B22430E8F54F77206831
+:1018C00016B30000F6CF50274F7D206206B2102FCE
+:1018D000000000C006B300265029102713FB26F98C
+:1018E00006B2E2CF4F7B06B3206400C0DACF0126F8
+:1018F0005029187106B269F14E7F2160012F16B38D
+:1019000028C0002650294D7F06B22260102F29C022
+:10191000012650294B7F06B22460012F2DC016B33B
+:1019200001265029477F2860000006B22EC04F7E56
+:1019300006B3206130C0422706B3499300265029E0
+:10194000102706B24FEF13FB20F9297F16B379F267
+:10195000187159F10126502906B2012703FB21F91C
+:10196000237F06B371F2002650293150D0F006B221
+:10197000102713FB22F9277E16B351F201265029B6
+:10198000012703FB06B223F92F7C49F2000006B3BE
+:10199000102713FB24F90026502906B22F7939F2BB
+:1019A00070CF10E21ABF002717C03B503195C31B00
+:1019B000D04010E21ABF0881033CF9F00B34E9F083
+:1019C00020917E001981110F1213EDCF093651F1CC
+:1019D0000D3211F0013E39F7009385003F915F9180
+:1019E0004F911F910F912F91DF910F90CAB7C5FDB5
+:1019F0001DCFCF91CFBFCF91189520918500222385
+:101A000069F310918300112321F5343022F13093D2
+:101A1000830020937F00109180003BE0311B3093C6
+:101A2000800019C00091830001309CF40AE53091D8
+:101A3000600034FD11C000936000C3E7D0E010C027
+:101A4000052710E000C021C0052710E0C89508BB9D
+:101A500014C03AE501C032ED032EC0E0D0E032E020
+:101A600017B31861C39A08B317BB58E120E84FEFCA
+:101A700020FF052708BB279517951C3F28F7000076
+:101A80004552B0F720FF0527279508BB17951C3F47
+:101A9000B8F629913A9561F7077E10918400110FED
+:101AA00008BBC250D04011F010937E0010E21ABF64
+:101AB000086017B3177E402F477E54E05A95F1F720
+:101AC00008BB17BB48BB8ACF81E080936F00F894B6
+:101AD000E0916800F0916900329785E080935700AB
+:101AE000E89507B600FCFDCF789408952091680032
+:101AF000309169002115310509F43FC024303105CA
+:101B0000B1F046E12C3F340739F480916B0090919D
+:101B10006C008E579B4F0DC046E12E3F340749F4B1
+:101B200080916D0090916E008D579B4F02C08FE7A2
+:101B30009BECF894E0916800F091690021E00C01C1
+:101B400020935700E89511247894409168005091B3
+:101B50006900FA0125913491282339232817390780
+:101B600029F080916A00816080936A004E5F5F4F28
+:101B70005093690040936800089581E18093570075
+:101B8000E895D5CFCF93DF93C0916800D0916900DD
+:101B9000CF73D0708FEF9FEFA9DF2296C034D105AD
+:101BA000CCF392DFDF91CF910895DF93CF930F9223
+:101BB000CDB7DEB788E10FB6F89481BD11BC0FBE7A
+:101BC000E0E0F0E0859194912BEC8F37920741F49F
+:101BD000E4E0F0E0859194913BEC8F37930709F0B6
+:101BE000D1DF1092690010926800AC9A8BB78062C6
+:101BF0008BBFBB9A8FE49DE2A9E181509040A04049
+:101C0000E1F700C00000BB987894EE24FF242091F7
+:101C10008300235027FDEFC080918000ECE0F0E0CE
+:101C2000E81BF109E957FF4F80917F008D3209F0E1
+:101C30009FC0283009F0DDC083EC809373008AE5F3
+:101C400080936000109270002081922F90768181A5
+:101C5000992301F1882341F482E690E09093820079
+:101C60008093810025E07AC0813069F4828180937D
+:101C7000710084819581909369008093680027FDAD
+:101C800068C02FEF67C080916A00846080936A000B
+:101C900020E064C0928110927C00882331F410927D
+:101CA0007D008CE790E022E04FC0853019F49093DE
+:101CB000840040C08630A9F58381813019F480E525
+:101CC00097E104C0823041F482E697E1909382006C
+:101CD0008093810022E121C08330F1F4992341F403
+:101CE0008EE197E1909382008093810024E015C0FB
+:101CF000913041F482E297E19093820080938100D9
+:101D000022E20BC0923041F484E497E19093820088
+:101D1000809381002CE001C020E080E4809370007B
+:101D20001DC0883059F0893019F49093860002C0A4
+:101D30008A3039F08CE790E020E006C086E890E039
+:101D400002C08CE790E021E09093820080938100B4
+:101D500005C0268180E88093700007C087818823B2
+:101D600021F48681821708F4282F2093610041C056
+:101D70008091700087FF3DC080917100821B80932D
+:101D800071008F018091680090916900009749F47B
+:101D9000D8018D919C91119790936C0080936B006A
+:101DA00014C08430910541F4F801808191819093B1
+:101DB0006E0080936D0009C0F6E18A3F9F0728F00E
+:101DC00081E180935700E89509C0D8018D919D91DC
+:101DD0008D0129838BDE29812250A1F6809171002B
+:101DE000882339F480916A00826080936A0010929F
+:101DF0006100109283008091600084FF47C0809151
+:101E000061008F3F09F442C0082F893008F008E0D4
+:101E1000801B809361008091730098E889278093EC
+:101E20007300002339F1E0918100F09182009091DC
+:101E30007000802F815096FF0CC090E08B589F4F10
+:101E4000A4E7B0E024912D933196A817B907D1F7F4
+:101E50000DC09F0190E08B589F4FA4E7B0E0F901BF
+:101E600041919F014D93A817B907C9F7F0938200DC
+:101E7000E093810084E790E0602FB1DC0C5F0C30D0
+:101E800019F08FEF809361000093600084E196B3B6
+:101E9000987131F48150D9F71092840010927E002D
+:101EA00001E0811100E080917200801739F0002379
+:101EB00019F4F8945FD07894009372008CE991E063
+:101EC0000197F1F7000080916A00882321F40894BB
+:101ED000E11CF11C02C0EE24FF2480FF0EC0F89428
+:101EE000E0916800F0916900329783E08093570099
+:101EF000E89507B600FCFDCF789480916A0081FFD9
+:101F000011C0A9E3B0E21197F1F700C00000809181
+:101F10006800909169008F739070009711F032DE25
+:101F200001C0D2DD80916A0082FD05C0B1E5EB16EB
+:101F3000B3ECFB06E0F0E1E2F1EA3197F1F700C023
+:101F40000000F8941BBE15BA80916F00882311F42D
+:101F500009C018DE8091680090916900F7E1803037
+:101F60009F07B8F310925F0210925E02C7CB1092E7
+:101F70006A004DCEFF920F931F93CF93DF93C8E07B
+:101F8000D0E010E000E8F12EF00EF1BE2CDC29E0EC
+:101F9000843392070CF41F2D06952197A1F7212F6A
+:101FA000215021BFEC01012F10C01DDC845399404A
+:101FB00097FF03C0909581959F4F8C179D0714F450
+:101FC00001B7EC0181B78F5F81BF21B730E0812F6E
+:101FD00090E001968217930744F701BFDF91CF91FC
+:0C1FE0001F910F91FF900895F894FFCF1F
+:081FEC005AFF0116FA400C0037
+:0400000300001700E2
:00000001FF
diff --git a/firmware/main.map b/firmware/main.map
index ef36b22..8418305 100644
--- a/firmware/main.map
+++ b/firmware/main.map
@@ -63,7 +63,7 @@ LOAD usbdrv/usbdrvasm.o
LOAD usbdrv/oddebug.o
LOAD main.o
LOAD libs-device/osccal.o
-Address of section .text set to 0x1500
+Address of section .text set to 0x1700
LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a
LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/libc.a
LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a
@@ -158,56 +158,56 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a
.rela.plt
*(.rela.plt)
-.text 0x00001500 0x8f8
+.text 0x00001700 0x8ec
*(.vectors)
- .vectors 0x00001500 0x1e /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o
- 0x00001500 __vectors
- 0x00001500 __vector_default
+ .vectors 0x00001700 0x1e /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o
+ 0x00001700 __vectors
+ 0x00001700 __vector_default
*(.vectors)
*(.progmem.gcc*)
*(.progmem*)
- .progmem.data 0x0000151e 0x56 main.o
- 0x0000151e usbDescriptorString0
- 0x00001522 usbDescriptorStringVendor
- 0x00001544 usbDescriptorStringDevice
- 0x00001550 usbDescriptorDevice
- 0x00001562 usbDescriptorConfiguration
- 0x00001574 . = ALIGN (0x2)
- 0x00001574 __trampolines_start = .
+ .progmem.data 0x0000171e 0x56 main.o
+ 0x0000171e usbDescriptorString0
+ 0x00001722 usbDescriptorStringVendor
+ 0x00001744 usbDescriptorStringDevice
+ 0x00001750 usbDescriptorDevice
+ 0x00001762 usbDescriptorConfiguration
+ 0x00001774 . = ALIGN (0x2)
+ 0x00001774 __trampolines_start = .
*(.trampolines)
- .trampolines 0x00001574 0x0 linker stubs
+ .trampolines 0x00001774 0x0 linker stubs
*(.trampolines*)
- 0x00001574 __trampolines_end = .
+ 0x00001774 __trampolines_end = .
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
- 0x00001574 __ctors_start = .
+ 0x00001774 __ctors_start = .
*(.ctors)
- 0x00001574 __ctors_end = .
- 0x00001574 __dtors_start = .
+ 0x00001774 __ctors_end = .
+ 0x00001774 __dtors_start = .
*(.dtors)
- 0x00001574 __dtors_end = .
+ 0x00001774 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
- .init0 0x00001574 0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o
- 0x00001574 __init
+ .init0 0x00001774 0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o
+ 0x00001774 __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
- .init2 0x00001574 0xc /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o
+ .init2 0x00001774 0xc /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o
*(.init2)
*(.init3)
- .init3 0x00001580 0x8 main.o
- 0x00001580 PushMagicWord
+ .init3 0x00001780 0x8 main.o
+ 0x00001780 PushMagicWord
*(.init3)
*(.init4)
- .init4 0x00001588 0x16 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_copy_data.o)
- 0x00001588 __do_copy_data
- .init4 0x0000159e 0x10 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_clear_bss.o)
- 0x0000159e __do_clear_bss
+ .init4 0x00001788 0x16 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_copy_data.o)
+ 0x00001788 __do_copy_data
+ .init4 0x0000179e 0x10 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_clear_bss.o)
+ 0x0000179e __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
@@ -218,40 +218,40 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a
*(.init8)
*(.init8)
*(.init9)
- .init9 0x000015ae 0x4 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o
+ .init9 0x000017ae 0x4 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o
*(.init9)
*(.text)
- .text 0x000015b2 0x2 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o
- 0x000015b2 __vector_10
- 0x000015b2 __vector_12
- 0x000015b2 __bad_interrupt
- 0x000015b2 __vector_6
- 0x000015b2 __vector_3
- 0x000015b2 __vector_11
- 0x000015b2 __vector_13
- 0x000015b2 __vector_7
- 0x000015b2 __vector_5
- 0x000015b2 __vector_4
- 0x000015b2 __vector_9
- 0x000015b2 __vector_8
- 0x000015b2 __vector_14
- 0x000015b2 __vector_1
- .text 0x000015b4 0x314 usbdrv/usbdrvasm.o
- 0x000015b4 usbCrc16
- 0x000015de usbCrc16Append
- 0x000015e6 usbMeasureFrameLength
- 0x0000160c __vector_2
- .text 0x000018c8 0x4b8 main.o
- 0x000019aa main
- .text 0x00001d80 0x74 libs-device/osccal.o
- 0x00001d80 calibrateOscillator
- 0x00001df4 . = ALIGN (0x2)
+ .text 0x000017b2 0x2 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o
+ 0x000017b2 __vector_10
+ 0x000017b2 __vector_12
+ 0x000017b2 __bad_interrupt
+ 0x000017b2 __vector_6
+ 0x000017b2 __vector_3
+ 0x000017b2 __vector_11
+ 0x000017b2 __vector_13
+ 0x000017b2 __vector_7
+ 0x000017b2 __vector_5
+ 0x000017b2 __vector_4
+ 0x000017b2 __vector_9
+ 0x000017b2 __vector_8
+ 0x000017b2 __vector_14
+ 0x000017b2 __vector_1
+ .text 0x000017b4 0x314 usbdrv/usbdrvasm.o
+ 0x000017b4 usbCrc16
+ 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.*)
- 0x00001df4 . = ALIGN (0x2)
+ 0x00001fe8 . = ALIGN (0x2)
*(.fini9)
- .fini9 0x00001df4 0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o)
- 0x00001df4 exit
- 0x00001df4 _exit
+ .fini9 0x00001fe8 0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o)
+ 0x00001fe8 exit
+ 0x00001fe8 _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 0x00001df4 0x4 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o)
+ .fini0 0x00001fe8 0x4 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o)
*(.fini0)
- 0x00001df8 _etext = .
+ 0x00001fec _etext = .
-.data 0x00800060 0x8 load address 0x00001df8
+.data 0x00800060 0x8 load address 0x00001fec
0x00800060 PROVIDE (__data_start, .)
*(.data)
.data 0x00800060 0x7 main.o
@@ -306,8 +306,8 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a
0x00800086 usbConfiguration
0x00800087 usbRxBuf
0x0080009d PROVIDE (__bss_end, .)
- 0x00001df8 __data_load_start = LOADADDR (.data)
- 0x00001e00 __data_load_end = (__data_load_start + SIZEOF (.data))
+ 0x00001fec __data_load_start = LOADADDR (.data)
+ 0x00001ff4 __data_load_end = (__data_load_start + SIZEOF (.data))
.noinit 0x0080009d 0x0
0x0080009d PROVIDE (__noinit_start, .)
diff --git a/firmware/main.o b/firmware/main.o
index fe4f2d7..93ca9ee 100644
--- a/firmware/main.o
+++ b/firmware/main.o
Binary files differ
diff --git a/firmware/usbdrv/oddebug.c.lst b/firmware/usbdrv/oddebug.c.lst
index 93b6f9b..956d42d 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//ccMxM4tr.s page 1
+GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccderNW0.s page 1
1 .file "oddebug.c"
@@ -8,16 +8,16 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccMxM4tr.s page
5 __CCP__ = 0x34
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
- GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccMxM4tr.s page 2
+ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccderNW0.s page 2
DEFINED SYMBOLS
*ABS*:00000000 oddebug.c
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccMxM4tr.s:2 *ABS*:0000003f __SREG__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccMxM4tr.s:3 *ABS*:0000003e __SP_H__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccMxM4tr.s:4 *ABS*:0000003d __SP_L__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccMxM4tr.s:5 *ABS*:00000034 __CCP__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccMxM4tr.s:6 *ABS*:00000000 __tmp_reg__
-/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccMxM4tr.s:7 *ABS*:00000001 __zero_reg__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccderNW0.s:2 *ABS*:0000003f __SREG__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccderNW0.s:3 *ABS*:0000003e __SP_H__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccderNW0.s:4 *ABS*:0000003d __SP_L__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccderNW0.s:5 *ABS*:00000034 __CCP__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccderNW0.s:6 *ABS*:00000000 __tmp_reg__
+/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccderNW0.s:7 *ABS*:00000001 __zero_reg__
NO UNDEFINED SYMBOLS