📄 older_m88.lss
字号:
{
do {} while (!eeprom_is_ready ());
4be: f9 99 sbic 0x1f, 1 ; 31
4c0: fe cf rjmp .-4 ; 0x4be <exe_proglockbit+0x8>
#if E2END <= 0xFF
EEARL = (unsigned)__p;
#else
EEAR = (unsigned)__p;
4c2: 90 e0 ldi r25, 0x00 ; 0
4c4: c0 96 adiw r24, 0x30 ; 48
4c6: 92 bd out 0x22, r25 ; 34
4c8: 81 bd out 0x21, r24 ; 33
#endif
EECR |= (1 << EERE);
4ca: f8 9a sbi 0x1f, 0 ; 31
return EEDR;
4cc: 80 b5 in r24, 0x20 ; 32
4ce: 80 93 dd 01 sts 0x01DD, r24
if (write_lockbit(avr_lockbit))sendstr(msg_fail);
4d2: fd d4 rcall .+2554 ; 0xece <write_lockbit>
4d4: 88 23 and r24, r24
4d6: 19 f0 breq .+6 ; 0x4de <exe_proglockbit+0x28>
4d8: 80 ee ldi r24, 0xE0 ; 224
4da: 91 e0 ldi r25, 0x01 ; 1
4dc: 02 c0 rjmp .+4 ; 0x4e2 <exe_proglockbit+0x2c>
else sendstr(msg_done);
4de: 86 ee ldi r24, 0xE6 ; 230
4e0: 91 e0 ldi r25, 0x01 ; 1
4e2: 69 d7 rcall .+3794 ; 0x13b6 <sendstr>
4e4: 08 95 ret
000004e6 <exe_progfuse>:
xmodem2df(3840+section*8);
sei();
}
void exe_progfuse(void)
{
4e6: f9 99 sbic 0x1f, 1 ; 31
4e8: fe cf rjmp .-4 ; 0x4e6 <exe_progfuse>
//pgm_sendstr(&instr_sheet[13].explain[0]);
eeprom_busy_wait();
avr_fuse[0]=eeprom_read_byte(FUSE_ADDRESS+section*3);
4ea: 90 91 57 02 lds r25, 0x0257
4ee: 83 e0 ldi r24, 0x03 ; 3
4f0: 98 9f mul r25, r24
4f2: 90 01 movw r18, r0
4f4: 11 24 eor r1, r1
/** \ingroup avr_eeprom
Read one byte from EEPROM address \a __p.
*/
__ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p)
{
do {} while (!eeprom_is_ready ());
4f6: f9 99 sbic 0x1f, 1 ; 31
4f8: fe cf rjmp .-4 ; 0x4f6 <exe_progfuse+0x10>
#if E2END <= 0xFF
EEARL = (unsigned)__p;
#else
EEAR = (unsigned)__p;
4fa: 32 bd out 0x22, r19 ; 34
4fc: 21 bd out 0x21, r18 ; 33
#endif
EECR |= (1 << EERE);
4fe: f8 9a sbi 0x1f, 0 ; 31
return EEDR;
500: 50 b5 in r21, 0x20 ; 32
502: 50 93 da 01 sts 0x01DA, r21
eeprom_busy_wait();
506: f9 99 sbic 0x1f, 1 ; 31
508: fe cf rjmp .-4 ; 0x506 <__stack+0x7>
/** \ingroup avr_eeprom
Read one byte from EEPROM address \a __p.
*/
__ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p)
{
do {} while (!eeprom_is_ready ());
50a: f9 99 sbic 0x1f, 1 ; 31
50c: fe cf rjmp .-4 ; 0x50a <__stack+0xb>
#if E2END <= 0xFF
EEARL = (unsigned)__p;
#else
EEAR = (unsigned)__p;
50e: c9 01 movw r24, r18
510: 01 96 adiw r24, 0x01 ; 1
512: 92 bd out 0x22, r25 ; 34
514: 81 bd out 0x21, r24 ; 33
#endif
EECR |= (1 << EERE);
516: f8 9a sbi 0x1f, 0 ; 31
return EEDR;
518: 60 b5 in r22, 0x20 ; 32
avr_fuse[1]=eeprom_read_byte(FUSE_ADDRESS+1+section*3);
51a: 60 93 db 01 sts 0x01DB, r22
eeprom_busy_wait();
51e: f9 99 sbic 0x1f, 1 ; 31
520: fe cf rjmp .-4 ; 0x51e <__stack+0x1f>
/** \ingroup avr_eeprom
Read one byte from EEPROM address \a __p.
*/
__ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p)
{
do {} while (!eeprom_is_ready ());
522: f9 99 sbic 0x1f, 1 ; 31
524: fe cf rjmp .-4 ; 0x522 <__stack+0x23>
#if E2END <= 0xFF
EEARL = (unsigned)__p;
#else
EEAR = (unsigned)__p;
526: c9 01 movw r24, r18
528: 02 96 adiw r24, 0x02 ; 2
52a: 92 bd out 0x22, r25 ; 34
52c: 81 bd out 0x21, r24 ; 33
#endif
EECR |= (1 << EERE);
52e: f8 9a sbi 0x1f, 0 ; 31
return EEDR;
530: 40 b5 in r20, 0x20 ; 32
avr_fuse[2]=eeprom_read_byte(FUSE_ADDRESS+2+section*3);
532: 40 93 dc 01 sts 0x01DC, r20
if (write_fuse(avr_fuse[0],avr_fuse[1],avr_fuse[2]))sendstr(msg_fail);
536: 85 2f mov r24, r21
538: 5a d4 rcall .+2228 ; 0xdee <write_fuse>
53a: 88 23 and r24, r24
53c: 19 f0 breq .+6 ; 0x544 <__stack+0x45>
53e: 80 ee ldi r24, 0xE0 ; 224
540: 91 e0 ldi r25, 0x01 ; 1
542: 02 c0 rjmp .+4 ; 0x548 <__stack+0x49>
else sendstr(msg_done);
544: 86 ee ldi r24, 0xE6 ; 230
546: 91 e0 ldi r25, 0x01 ; 1
548: 36 d7 rcall .+3692 ; 0x13b6 <sendstr>
54a: 08 95 ret
0000054c <exe_downloadeeprom>:
sei();
}
void exe_downloadeeprom(void)
{
54c: f8 94 cli
//pgm_sendstr(&instr_sheet[12].explain[0]);
cli();
xmodem2df(3840+section*8);
54e: 80 91 57 02 lds r24, 0x0257
552: 90 e0 ldi r25, 0x00 ; 0
554: 80 52 subi r24, 0x20 ; 32
556: 9e 4f sbci r25, 0xFE ; 254
558: 53 e0 ldi r21, 0x03 ; 3
55a: 88 0f add r24, r24
55c: 99 1f adc r25, r25
55e: 5a 95 dec r21
560: e1 f7 brne .-8 ; 0x55a <exe_downloadeeprom+0xe>
562: a9 d7 rcall .+3922 ; 0x14b6 <xmodem2df>
sei();
564: 78 94 sei
}
566: 08 95 ret
00000568 <exe_downloadflash>:
getlockbit_flag=1;
sendstr("LOCKBIT:");
}
void exe_downloadflash(void)
{
568: f8 94 cli
//pgm_sendstr(&instr_sheet[11].explain[0]);
cli();
xmodem2df(section*256);
56a: 80 e0 ldi r24, 0x00 ; 0
56c: 90 91 57 02 lds r25, 0x0257
570: a2 d7 rcall .+3908 ; 0x14b6 <xmodem2df>
//hex2send(section);
sei();
572: 78 94 sei
}
574: 08 95 ret
00000576 <exe_readlockbit>:
sendstr(msg_done);
}
}
void exe_readlockbit(void)
{
576: e0 d4 rcall .+2496 ; 0xf38 <read_lockbit>
//pgm_sendstr(&instr_sheet[8].explain[0]);
unsigned char tmp;
tmp=read_lockbit();
if (tmp!=1)
578: 81 30 cpi r24, 0x01 ; 1
57a: 21 f0 breq .+8 ; 0x584 <exe_readlockbit+0xe>
{
hex2send(tmp);
57c: c0 d6 rcall .+3456 ; 0x12fe <hex2send>
sendstr(msg_done);
57e: 86 ee ldi r24, 0xE6 ; 230
580: 91 e0 ldi r25, 0x01 ; 1
582: 02 c0 rjmp .+4 ; 0x588 <exe_readlockbit+0x12>
}
else sendstr(msg_fail);
584: 80 ee ldi r24, 0xE0 ; 224
586: 91 e0 ldi r25, 0x01 ; 1
588: 16 d7 rcall .+3628 ; 0x13b6 <sendstr>
58a: 08 95 ret
0000058c <get_data>:
if (i>=sizeof(instr_sheet)/sizeof(struct_instr_sheet))
sendstr("Invalid instruction!");
}
void get_data(void)
{
58c: 0f 93 push r16
58e: 1f 93 push r17
if ((getfuse_flag==1)&&(com.rxcnt==8)&&(com.rxbuf[2]==0x20)&&
590: 80 91 38 02 lds r24, 0x0238
594: 81 30 cpi r24, 0x01 ; 1
596: 09 f0 breq .+2 ; 0x59a <get_data+0xe>
598: 77 c0 rjmp .+238 ; 0x688 <get_data+0xfc>
59a: 80 91 4b 02 lds r24, 0x024B
59e: 88 30 cpi r24, 0x08 ; 8
5a0: 09 f0 breq .+2 ; 0x5a4 <get_data+0x18>
5a2: 72 c0 rjmp .+228 ; 0x688 <get_data+0xfc>
5a4: 80 91 3d 02 lds r24, 0x023D
5a8: 80 32 cpi r24, 0x20 ; 32
5aa: 09 f0 breq .+2 ; 0x5ae <get_data+0x22>
5ac: 6d c0 rjmp .+218 ; 0x688 <get_data+0xfc>
5ae: 80 91 40 02 lds r24, 0x0240
5b2: 80 32 cpi r24, 0x20 ; 32
5b4: 09 f0 breq .+2 ; 0x5b8 <get_data+0x2c>
5b6: 68 c0 rjmp .+208 ; 0x688 <get_data+0xfc>
(com.rxbuf[5]==0x20))
{
avr_fuse[0]=ascii2hex(&com.rxbuf[0]);
5b8: 8b e3 ldi r24, 0x3B ; 59
5ba: 92 e0 ldi r25, 0x02 ; 2
5bc: 2c de rcall .-936 ; 0x216 <ascii2hex>
5be: 18 2f mov r17, r24
5c0: 80 93 da 01 sts 0x01DA, r24
avr_fuse[1]=ascii2hex(&com.rxbuf[3]);
5c4: 8e e3 ldi r24, 0x3E ; 62
5c6: 92 e0 ldi r25, 0x02 ; 2
5c8: 26 de rcall .-948 ; 0x216 <ascii2hex>
5ca: 08 2f mov r16, r24
5cc: 80 93 db 01 sts 0x01DB, r24
avr_fuse[2]=ascii2hex(&com.rxbuf[6]);
5d0: 81 e4 ldi r24, 0x41 ; 65
5d2: 92 e0 ldi r25, 0x02 ; 2
5d4: 20 de rcall .-960 ; 0x216 <ascii2hex>
5d6: 48 2f mov r20, r24
5d8: 80 93 dc 01 sts 0x01DC, r24
eeprom_busy_wait();
5dc: f9 99 sbic 0x1f, 1 ; 31
5de: fe cf rjmp .-4 ; 0x5dc <get_data+0x50>
eeprom_write_byte(FUSE_ADDRESS+section*3,avr_fuse[0]);
5e0: 90 91 57 02 lds r25, 0x0257
5e4: 83 e0 ldi r24, 0x03 ; 3
5e6: 98 9f mul r25, r24
5e8: 90 01 movw r18, r0
5ea: 11 24 eor r1, r1
/** \ingroup avr_eeprom
Write a byte \a __value to EEPROM address \a __p.
*/
static __inline__ void eeprom_write_byte (uint8_t *__p, uint8_t __value)
{
do {} while (!eeprom_is_ready ());
5ec: f9 99 sbic 0x1f, 1 ; 31
5ee: fe cf rjmp .-4 ; 0x5ec <get_data+0x60>
#if defined(EEPM0) && defined(EEPM1)
EECR = 0; /* Set programming mode: erase and write. */
5f0: 1f ba out 0x1f, r1 ; 31
#endif
#if E2END <= 0xFF
EEARL = (unsigned)__p;
#else
EEAR = (unsigned)__p;
5f2: 32 bd out 0x22, r19 ; 34
5f4: 21 bd out 0x21, r18 ; 33
#endif
EEDR = __value;
5f6: 10 bd out 0x20, r17 ; 32
__asm__ __volatile__ (
5f8: 0f b6 in r0, 0x3f ; 63
5fa: f8 94 cli
5fc: fa 9a sbi 0x1f, 2 ; 31
5fe: f9 9a sbi 0x1f, 1 ; 31
600: 0f be out 0x3f, r0 ; 63
eeprom_busy_wait();
602: f9 99 sbic 0x1f, 1 ; 31
604: fe cf rjmp .-4 ; 0x602 <get_data+0x76>
/** \ingroup avr_eeprom
Write a byte \a __value to EEPROM address \a __p.
*/
static __inline__ void eeprom_write_byte (uint8_t *__p, uint8_t __value)
{
do {} while (!eeprom_is_ready ());
606: f9 99 sbic 0x1f, 1 ; 31
608: fe cf rjmp .-4 ; 0x606 <get_data+0x7a>
#if defined(EEPM0) && defined(EEPM1)
EECR = 0; /* Set programming mode: erase and write. */
60a: 1f ba out 0x1f, r1 ; 31
#endif
#if E2END <= 0xFF
EEARL = (unsigned)__p;
#else
EEAR = (unsigned)__p;
60c: c9 01 movw r24, r18
60e: 01 96 adiw r24, 0x01 ; 1
610: 92 bd out 0x22, r25 ; 34
612: 81 bd out 0x21, r24 ; 33
#endif
EEDR = __value;
614: 00 bd out 0x20, r16 ; 32
__asm__ __volatile__ (
616: 0f b6 in r0, 0x3f ; 63
618: f8 94 cli
61a: fa 9a sbi 0x1f, 2 ; 31
61c: f9 9a sbi 0x1f, 1 ; 31
61e: 0f be out 0x3f, r0 ; 63
eeprom_write_byte(FUSE_ADDRESS+1+section*3,avr_fuse[1]);
eeprom_busy_wait();
620: f9 99 sbic 0x1f, 1 ; 31
622: fe cf rjmp .-4 ; 0x620 <get_data+0x94>
/** \ingroup avr_eeprom
Write a byte \a __value to EEPROM address \a __p.
*/
static __inline__ void eeprom_write_byte (uint8_t *__p, uint8_t __value)
{
do {} while (!eeprom_is_ready ());
624: f9 99 sbic 0x1f, 1 ; 31
626: fe cf rjmp .-4 ; 0x624 <get_data+0x98>
#if defined(EEPM0) && defined(EEPM1)
EECR = 0; /* Set programming mode: erase and write. */
628: 1f ba out 0x1f, r1 ; 31
#endif
#if E2END <= 0xFF
EEARL = (unsigned)__p;
#else
EEAR = (unsigned)__p;
62a: c9 01 movw r24, r18
62c: 02 96 adiw r24, 0x02 ; 2
62e: 92 bd out 0x22, r25 ; 34
630: 81 bd out 0x21, r24 ; 33
#endif
EEDR = __value;
632: 40 bd out 0x20, r20 ; 32
__asm__ __volatile__ (
634: 0f b6 in r0, 0x3f ; 63
636: f8 94 cli
638: fa 9a sbi 0x1f, 2 ; 31
63a: f9 9a sbi 0x1f, 1 ; 31
63c: 0f be out 0x3f, r0 ; 63
eeprom_write_byte(FUSE_ADDRESS+2+section*3,avr_fuse[2]);
eeprom_busy_wait();
63e: f9 99 sbic 0x1f, 1 ; 31
640: fe cf rjmp .-4 ; 0x63e <get_data+0xb2>
/** \ingroup avr_eeprom
Read one byte from EEPROM address \a __p.
*/
__ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p)
{
do {} while (!eeprom_is_ready ());
642: f9 99 sbic 0x1f, 1 ; 31
644: fe cf rjmp .-4 ; 0x642 <get_data+0xb6>
#if E2END <= 0xFF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -