📄 main.lst
字号:
\ 00000220 F521 BRNE ??main_17
192 {
193 if( address >= (APP_END>>1) ) // Protect bootloader area.
\ 00000222 8108 LD R16, Y
\ 00000224 8119 LDD R17, Y+1
\ 00000226 812A LDD R18, Y+2
\ 00000228 813B LDD R19, Y+3
\ 0000022A 3000 CPI R16, 0
\ 0000022C EF48 LDI R20, 248
\ 0000022E 0714 CPC R17, R20
\ 00000230 E041 LDI R20, 1
\ 00000232 0724 CPC R18, R20
\ 00000234 E040 LDI R20, 0
\ 00000236 0734 CPC R19, R20
\ 00000238 F024 BRLT ??main_18
194 {
195 sendchar('?');
\ 0000023A E30F LDI R16, 63
\ 0000023C ........ CALL sendchar
\ 00000240 C010 RJMP ??main_19
196 } else
197 {
198 _WAIT_FOR_SPM();
\ ??main_18:
\ 00000242 B707 IN R16, 0x37
\ 00000244 2F10 MOV R17, R16
\ 00000246 FD10 SBRC R17, 0
\ 00000248 CFFC RJMP ??main_18
199 #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
200 _PAGE_WRITE( address << 1 ); // Convert word-address to byte-address and write.
\ 0000024A E005 LDI R16, 5
\ 0000024C 8148 LD R20, Y
\ 0000024E 8159 LDD R21, Y+1
\ 00000250 816A LDD R22, Y+2
\ 00000252 0F44 LSL R20
\ 00000254 1F55 ROL R21
\ 00000256 1F66 ROL R22
\ 00000258 01FA MOVW R31:R30, R21:R20
\ 0000025A 2F36 MOV R19, R22
\ 0000025C BF3B OUT 0x3B, R19
\ 0000025E BF07 OUT 0x37, R16
\ 00000260 95E8 SPM
201 #pragma diag_default=Pe1053 // Back to default.
202 }
203
204 sendchar('\r'); // Send OK back.
\ ??main_19:
\ 00000262 E00D LDI R16, 13
\ 00000264 ........ CALL sendchar
\ 00000268 CED6 RJMP ??main_1
205 }
206 #endif
207
208 #ifndef REMOVE_EEPROM_BYTE_SUPPORT
209 // Write EEPROM memory.
210 else if (val == 'D')
\ ??main_17:
\ 0000026A 34A4 CPI R26, 68
\ 0000026C F501 BRNE ??main_20
211 {
212 _WAIT_FOR_SPM();
\ ??main_21:
\ 0000026E B707 IN R16, 0x37
\ 00000270 2F10 MOV R17, R16
\ 00000272 FD10 SBRC R17, 0
\ 00000274 CFFC RJMP ??main_21
213 EEARL = address; // Setup EEPROM address.
\ 00000276 8108 LD R16, Y
\ 00000278 BD01 OUT 0x21, R16
214 EEARH = (address >> 8);
\ 0000027A 8119 LDD R17, Y+1
\ 0000027C 2F01 MOV R16, R17
\ 0000027E BD02 OUT 0x22, R16
215 EEDR = recchar(); // Get byte.
\ 00000280 ........ CALL recchar
\ 00000284 BD00 OUT 0x20, R16
216 EECR |= (1<<EEMWE); // Write byte.
\ 00000286 9AFA SBI 0x1F, 0x02
217 EECR |= (1<<EEWE);
\ 00000288 9AF9 SBI 0x1F, 0x01
218 while (EECR & (1<<EEWE)) // Wait for write operation to finish.
\ ??main_22:
\ 0000028A 99F9 SBIC 0x1F, 0x01
\ 0000028C CFFE RJMP ??main_22
219 ;
220
221 address++; // Auto-advance to next EEPROM byte.
\ 0000028E 8108 LD R16, Y
\ 00000290 8119 LDD R17, Y+1
\ 00000292 812A LDD R18, Y+2
\ 00000294 813B LDD R19, Y+3
\ 00000296 5F0F SUBI R16, 255
\ 00000298 4F1F SBCI R17, 255
\ 0000029A 4F2F SBCI R18, 255
\ 0000029C 4F3F SBCI R19, 255
\ 0000029E 8308 ST Y, R16
\ 000002A0 8319 STD Y+1, R17
\ 000002A2 832A STD Y+2, R18
\ 000002A4 833B STD Y+3, R19
222 sendchar('\r');// Send OK back.
\ 000002A6 E00D LDI R16, 13
\ 000002A8 ........ CALL sendchar
\ 000002AC CEB4 RJMP ??main_1
223 }
224
225
226 // Read EEPROM memory.
227 else if (val == 'd')
\ ??main_20:
\ 000002AE 36A4 CPI R26, 100
\ 000002B0 F4B1 BRNE ??main_23
228 {
229 EEARL = address; // Setup EEPROM address.
\ 000002B2 8108 LD R16, Y
\ 000002B4 BD01 OUT 0x21, R16
230 EEARH = (address >> 8);
\ 000002B6 8119 LDD R17, Y+1
\ 000002B8 2F01 MOV R16, R17
\ 000002BA BD02 OUT 0x22, R16
231 EECR |= (1<<EERE); // Read byte...
\ 000002BC 9AF8 SBI 0x1F, 0x00
232 sendchar(EEDR); // ...and send it back.
\ 000002BE B500 IN R16, 0x20
\ 000002C0 ........ CALL sendchar
233 address++; // Auto-advance to next EEPROM byte.
\ 000002C4 8108 LD R16, Y
\ 000002C6 8119 LDD R17, Y+1
\ 000002C8 812A LDD R18, Y+2
\ 000002CA 813B LDD R19, Y+3
\ 000002CC 5F0F SUBI R16, 255
\ 000002CE 4F1F SBCI R17, 255
\ 000002D0 4F2F SBCI R18, 255
\ 000002D2 4F3F SBCI R19, 255
\ 000002D4 8308 ST Y, R16
\ 000002D6 8319 STD Y+1, R17
\ 000002D8 832A STD Y+2, R18
\ 000002DA 833B STD Y+3, R19
\ 000002DC CE9C RJMP ??main_1
234 }
235 #endif
236
237 #ifndef REMOVE_FUSE_AND_LOCK_BIT_SUPPORT
238 // Write lockbits.
239 else if(val=='l')
\ ??main_23:
\ 000002DE 36AC CPI R26, 108
\ 000002E0 F479 BRNE ??main_24
240 {
241 _WAIT_FOR_SPM();
\ ??main_25:
\ 000002E2 B707 IN R16, 0x37
\ 000002E4 2F10 MOV R17, R16
\ 000002E6 FD10 SBRC R17, 0
\ 000002E8 CFFC RJMP ??main_25
242 _SET_LOCK_BITS( recchar() ); // Read and set lock bits.
\ 000002EA ........ CALL recchar
\ 000002EE 2F10 MOV R17, R16
\ 000002F0 E009 LDI R16, 9
\ 000002F2 2E01 MOV R0, R17
\ 000002F4 BF07 OUT 0x37, R16
\ 000002F6 95E8 SPM
243 sendchar('\r'); // Send OK back.
\ 000002F8 E00D LDI R16, 13
\ 000002FA ........ CALL sendchar
\ 000002FE CE8B RJMP ??main_1
244 }
245
246
247 // Read lock bits.
248 else if(val=='r')
\ ??main_24:
\ 00000300 37A2 CPI R26, 114
\ 00000302 F469 BRNE ??main_26
249 {
250 _WAIT_FOR_SPM();
\ ??main_27:
\ 00000304 B707 IN R16, 0x37
\ 00000306 2F10 MOV R17, R16
\ 00000308 FD10 SBRC R17, 0
\ 0000030A CFFC RJMP ??main_27
251 sendchar( _GET_LOCK_BITS() );
\ 0000030C E009 LDI R16, 9
\ 0000030E E0E1 LDI R30, 1
\ 00000310 E0F0 LDI R31, 0
\ 00000312 BF07 OUT 0x37, R16
\ 00000314 9114 LPM R17, Z
\ 00000316 2F01 MOV R16, R17
\ 00000318 ........ CALL sendchar
\ 0000031C CE7C RJMP ??main_1
252 }
253
254
255 // Read fuse bits.
256 else if(val=='F')
\ ??main_26:
\ 0000031E 34A6 CPI R26, 70
\ 00000320 F469 BRNE ??main_28
257 {
258 _WAIT_FOR_SPM();
\ ??main_29:
\ 00000322 B707 IN R16, 0x37
\ 00000324 2F10 MOV R17, R16
\ 00000326 FD10 SBRC R17, 0
\ 00000328 CFFC RJMP ??main_29
259 sendchar( _GET_LOW_FUSES() );
\ 0000032A E009 LDI R16, 9
\ 0000032C E0E0 LDI R30, 0
\ 0000032E E0F0 LDI R31, 0
\ 00000330 BF07 OUT 0x37, R16
\ 00000332 9114 LPM R17, Z
\ 00000334 2F01 MOV R16, R17
\ 00000336 ........ CALL sendchar
\ 0000033A CE6D RJMP ??main_1
260 }
261
262
263 // Read high fuse bits.
264 else if(val=='N')
\ ??main_28:
\ 0000033C 34AE CPI R26, 78
\ 0000033E F469 BRNE ??main_30
265 {
266 _WAIT_FOR_SPM();
\ ??main_31:
\ 00000340 B707 IN R16, 0x37
\ 00000342 2F10 MOV R17, R16
\ 00000344 FD10 SBRC R17, 0
\ 00000346 CFFC RJMP ??main_31
267 sendchar( _GET_HIGH_FUSES() );
\ 00000348 E009 LDI R16, 9
\ 0000034A E0E3 LDI R30, 3
\ 0000034C E0F0 LDI R31, 0
\ 0000034E BF07 OUT 0x37, R16
\ 00000350 9114 LPM R17, Z
\ 00000352 2F01 MOV R16, R17
\ 00000354 ........ CALL sendchar
\ 00000358 CE5E RJMP ??main_1
268 }
269
270
271 // Read extended fuse bits.
272 else if(val=='Q')
\ ??main_30:
\ 0000035A 35A1 CPI R26, 81
\ 0000035C F469 BRNE ??main_32
273 {
274 _WAIT_FOR_SPM();
\ ??main_33:
\ 0000035E B707 IN R16, 0x37
\ 00000360 2F10 MOV R17, R16
\ 00000362 FD10 SBRC R17, 0
\ 00000364 CFFC RJMP ??main_33
275 sendchar( _GET_EXTENDED_FUSES() );
\ 00000366 E009 LDI R16, 9
\ 00000368 E0E2 LDI R30, 2
\ 0000036A E0F0 LDI R31, 0
\ 0000036C BF07 OUT 0x37, R16
\ 0000036E 9114 LPM R17, Z
\ 00000370 2F01 MOV R16, R17
\ 00000372 ........ CALL sendchar
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -