summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/libs-device/osccal.c.lst20
-rwxr-xr-xfirmware/main.binbin8957 -> 8969 bytes
-rw-r--r--firmware/main.c32
-rw-r--r--firmware/main.c.lst1721
-rw-r--r--firmware/main.hex173
-rw-r--r--firmware/main.map30
-rw-r--r--firmware/main.obin5936 -> 6024 bytes
-rw-r--r--firmware/temp-dump.binbin7646 -> 8192 bytes
-rw-r--r--firmware/upload.rb12
-rw-r--r--firmware/usbdrv/oddebug.c.lst16
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.bin
index 5febd6d..a5a6933 100755
--- a/firmware/main.bin
+++ b/firmware/main.bin
Binary files differ
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.o
index 6e5e3ab..de18981 100644
--- a/firmware/main.o
+++ b/firmware/main.o
Binary files differ
diff --git a/firmware/temp-dump.bin b/firmware/temp-dump.bin
index cbae830..e7c029c 100644
--- a/firmware/temp-dump.bin
+++ b/firmware/temp-dump.bin
Binary files differ
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