📄 19boot.lst
字号:
FB58 3184 CPI R24,0x14
FB59 F009 BEQ 0xFB5B
FB5A C04A RJMP 0xFBA5
(0228) for(i=0;i<READ_BLOCK_SIZE;i++) {
FB5B 24CC CLR R12
FB5C 24DD CLR R13
FB5D C01D RJMP 0xFB7B
(0229) msg_buffer[i+2] = read_program_memory (address+i,0x00);
FB5E 2722 CLR R18
FB5F 0116 MOVW R2,R12
FB60 2444 CLR R4
FB61 2455 CLR R5
FB62 9080010C LDS R8,address+2
FB64 9090010D LDS R9,address+3
FB66 9060010A LDS R6,address
FB68 9070010B LDS R7,address+1
FB6A 0C62 ADD R6,R2
FB6B 1C73 ADC R7,R3
FB6C 1C84 ADC R8,R4
FB6D 1C95 ADC R9,R5
FB6E 0183 MOVW R16,R6
FB6F 940EF8A2 CALL _read_program_memory
FB71 E187 LDI R24,0x17
FB72 E091 LDI R25,1
FB73 01F6 MOVW R30,R12
FB74 9632 ADIW R30,2
FB75 0FE8 ADD R30,R24
FB76 1FF9 ADC R31,R25
FB77 8300 STD Z+0,R16
FB78 01C6 MOVW R24,R12
FB79 9601 ADIW R24,1
FB7A 016C MOVW R12,R24
FB7B 01C6 MOVW R24,R12
FB7C 3080 CPI R24,0
FB7D E0E1 LDI R30,1
FB7E 079E CPC R25,R30
FB7F F2F0 BCS 0xFB5E
(0230) }
(0231) address+=READ_BLOCK_SIZE;
FB80 E040 LDI R20,0
FB81 E051 LDI R21,1
FB82 E060 LDI R22,0
FB83 E070 LDI R23,0
FB84 9040010C LDS R4,address+2
FB86 9050010D LDS R5,address+3
FB88 9020010A LDS R2,address
FB8A 9030010B LDS R3,address+1
FB8C 0E24 ADD R2,R20
FB8D 1E35 ADC R3,R21
FB8E 1E46 ADC R4,R22
FB8F 1E57 ADC R5,R23
FB90 9230010B STS address+1,R3
FB92 9220010A STS address,R2
FB94 9250010D STS address+3,R5
FB96 9240010C STS address+2,R4
(0232) num_bytes = READ_BLOCK_SIZE + 3;
FB98 E083 LDI R24,3
FB99 E091 LDI R25,1
FB9A 839F STD Y+7,R25
FB9B 838E STD Y+6,R24
(0233) msg_buffer[0] = CMD_READ_FLASH_ISP;
FB9C E184 LDI R24,0x14
FB9D 93800117 STS msg_buffer,R24
(0234) msg_buffer[1] = STATUS_CMD_OK;
FB9F 2422 CLR R2
FBA0 92200118 STS msg_buffer+1,R2
(0235) msg_buffer[READ_BLOCK_SIZE + 2] = STATUS_CMD_OK;
FBA2 92200219 STS 0x219,R2
(0236) }
FBA4 C057 RJMP 0xFBFC
(0237) //读熔丝位
(0238) else if (cmd==CMD_READ_FUSE_ISP) {
FBA5 2D8E MOV R24,R14
FBA6 3188 CPI R24,0x18
FBA7 F571 BNE 0xFBD6
(0239) switch(msg_buffer[2]) {
FBA8 90A00119 LDS R10,msg_buffer+2
FBAA 24BB CLR R11
FBAB 01C5 MOVW R24,R10
FBAC 3580 CPI R24,0x50
FBAD E0E0 LDI R30,0
FBAE 079E CPC R25,R30
FBAF F051 BEQ 0xFBBA
FBB0 3580 CPI R24,0x50
FBB1 E0E0 LDI R30,0
FBB2 079E CPC R25,R30
FBB3 F0AC BLT 0xFBC9
FBB4 01C5 MOVW R24,R10
FBB5 3588 CPI R24,0x58
FBB6 E0E0 LDI R30,0
FBB7 079E CPC R25,R30
FBB8 F049 BEQ 0xFBC2
FBB9 C00F RJMP 0xFBC9
(0240) case 0x50:
(0241) msg_buffer[2] = read_program_memory(0x0000,1); //读熔丝位
FBBA E021 LDI R18,1
FBBB 2700 CLR R16
FBBC 2711 CLR R17
FBBD 940EF8A2 CALL _read_program_memory
FBBF 93000119 STS msg_buffer+2,R16
(0242) break;
FBC1 C007 RJMP 0xFBC9
(0243) case 0x58:
(0244) msg_buffer[2] = read_program_memory(0x0003,1); //读高熔丝位
FBC2 E021 LDI R18,1
FBC3 E003 LDI R16,3
FBC4 E010 LDI R17,0
FBC5 940EF8A2 CALL _read_program_memory
FBC7 93000119 STS msg_buffer+2,R16
(0245) break;
(0246) default:
(0247) break;
(0248) }
(0249) num_bytes = 4;
FBC9 E084 LDI R24,4
FBCA E090 LDI R25,0
FBCB 839F STD Y+7,R25
FBCC 838E STD Y+6,R24
(0250) msg_buffer[0] = CMD_READ_FUSE_ISP;
FBCD E188 LDI R24,0x18
FBCE 93800117 STS msg_buffer,R24
(0251) msg_buffer[1] = STATUS_CMD_OK;
FBD0 2422 CLR R2
FBD1 92200118 STS msg_buffer+1,R2
(0252) msg_buffer[3] = STATUS_CMD_OK;
FBD3 9220011A STS msg_buffer+3,R2
(0253) }
FBD5 C026 RJMP 0xFBFC
(0254) //写锁定位
(0255) else if (cmd==CMD_PROGRAM_LOCK_ISP) {
FBD6 2D8E MOV R24,R14
FBD7 3189 CPI R24,0x19
FBD8 F469 BNE 0xFBE6
(0256) //write_lock_bits (msg_buffer[4]|0xC0);
(0257) num_bytes = 3;
FBD9 E083 LDI R24,3
FBDA E090 LDI R25,0
FBDB 839F STD Y+7,R25
FBDC 838E STD Y+6,R24
(0258) msg_buffer[0] = CMD_PROGRAM_LOCK_ISP;
FBDD E189 LDI R24,0x19
FBDE 93800117 STS msg_buffer,R24
(0259) msg_buffer[1] = STATUS_CMD_OK;
FBE0 2422 CLR R2
FBE1 92200118 STS msg_buffer+1,R2
(0260) msg_buffer[2] = STATUS_CMD_OK;
FBE3 92200119 STS msg_buffer+2,R2
(0261) }
FBE5 C016 RJMP 0xFBFC
(0262) //读锁定位
(0263) else if (cmd==CMD_READ_LOCK_ISP) {
FBE6 2D8E MOV R24,R14
FBE7 318A CPI R24,0x1A
FBE8 F499 BNE 0xFBFC
(0264) msg_buffer[2] = read_program_memory(0x0001,1);
FBE9 E021 LDI R18,1
FBEA E001 LDI R16,1
FBEB E010 LDI R17,0
FBEC 940EF8A2 CALL _read_program_memory
FBEE 93000119 STS msg_buffer+2,R16
(0265) num_bytes = 4;
FBF0 E084 LDI R24,4
FBF1 E090 LDI R25,0
FBF2 839F STD Y+7,R25
FBF3 838E STD Y+6,R24
(0266) msg_buffer[0] = CMD_READ_LOCK_ISP;
FBF4 E18A LDI R24,0x1A
FBF5 93800117 STS msg_buffer,R24
(0267) msg_buffer[1] = STATUS_CMD_OK;
FBF7 2422 CLR R2
FBF8 92200118 STS msg_buffer+1,R2
(0268) msg_buffer[3] = STATUS_CMD_OK;
FBFA 9220011A STS msg_buffer+3,R2
(0269) }
(0270) //传送缓冲区数据
(0271) if (num_bytes>0) {
FBFC 800E LDD R0,Y+6
FBFD 801F LDD R1,Y+7
FBFE 2000 TST R0
FBFF F419 BNE 0xFC03
FC00 2011 TST R1
FC01 F409 BNE 0xFC03
FC02 C059 RJMP 0xFC5C
(0272) putChar(MESSAGE_START);
FC03 E10B LDI R16,0x1B
FC04 940EF8B9 CALL _putChar
(0273) checkSum=MESSAGE_START;
FC06 E18B LDI R24,0x1B
FC07 93800115 STS checkSum,R24
(0274) putChar(seqNum);
FC09 890B LDD R16,Y+19
FC0A 940EF8B9 CALL _putChar
(0275) checkSum^=seqNum;
FC0C 90200115 LDS R2,checkSum
FC0E 880B LDD R0,Y+19
FC0F 2420 EOR R2,R0
FC10 92200115 STS checkSum,R2
(0276) tmp=(num_bytes&0xFF00)>>8;
FC12 818E LDD R24,Y+6
FC13 819F LDD R25,Y+7
FC14 7080 ANDI R24,0
FC15 2F89 MOV R24,R25
FC16 2799 CLR R25
FC17 8788 STD Y+8,R24
(0277) putChar(tmp);
FC18 2F08 MOV R16,R24
FC19 940EF8B9 CALL _putChar
(0278) checkSum^=tmp;
FC1B 90200115 LDS R2,checkSum
FC1D 8408 LDD R0,Y+8
FC1E 2420 EOR R2,R0
FC1F 92200115 STS checkSum,R2
(0279) tmp=num_bytes&0x00FF;
FC21 818E LDD R24,Y+6
FC22 819F LDD R25,Y+7
FC23 7090 ANDI R25,0
FC24 8788 STD Y+8,R24
(0280) putChar(tmp);
FC25 2F08 MOV R16,R24
FC26 940EF8B9 CALL _putChar
(0281) checkSum^=tmp;
FC28 90200115 LDS R2,checkSum
FC2A 8408 LDD R0,Y+8
FC2B 2420 EOR R2,R0
FC2C 92200115 STS checkSum,R2
(0282) putChar(TOKEN);
FC2E E00E LDI R16,0xE
FC2F 940EF8B9 CALL _putChar
(0283) checkSum^=TOKEN;
FC31 E08E LDI R24,0xE
FC32 90200115 LDS R2,checkSum
FC34 2628 EOR R2,R24
FC35 92200115 STS checkSum,R2
(0284) for(i = 0; i < num_bytes; i++) {
FC37 24CC CLR R12
FC38 24DD CLR R13
FC39 C016 RJMP 0xFC50
(0285) putChar(msg_buffer[i]);
FC3A E187 LDI R24,0x17
FC3B E091 LDI R25,1
FC3C 01F6 MOVW R30,R12
FC3D 0FE8 ADD R30,R24
FC3E 1FF9 ADC R31,R25
FC3F 8100 LDD R16,Z+0
FC40 940EF8B9 CALL _putChar
(0286) checkSum^=msg_buffer[i];
FC42 E187 LDI R24,0x17
FC43 E091 LDI R25,1
FC44 01F6 MOVW R30,R12
FC45 0FE8 ADD R30,R24
FC46 1FF9 ADC R31,R25
FC47 8020 LDD R2,Z+0
FC48 90300115 LDS R3,checkSum
FC4A 2432 EOR R3,R2
FC4B 92300115 STS checkSum,R3
FC4D 01C6 MOVW R24,R12
FC4E 9601 ADIW R24,1
FC4F 016C MOVW R12,R24
FC50 800E LDD R0,Y+6
FC51 801F LDD R1,Y+7
FC52 14C0 CP R12,R0
FC53 04D1 CPC R13,R1
FC54 F328 BCS 0xFC3A
(0287) }
(0288) putChar(checkSum);
FC55 91000115 LDS R16,checkSum
FC57 940EF8B9 CALL _putChar
(0289) checkSum=0x00;
FC59 2422 CLR R2
FC5A 92200115 STS checkSum,R2
(0290) }
FILE: <library>
FC5C 9629 ADIW R28,0x9
FC5D 940EFC74 CALL pop_gset5
FC5F 9622 ADIW R28,2
FC60 9508 RET
_memcpy:
FC61 2FA0 MOV R26,R16
FC62 2FB1 MOV R27,R17
FC63 2FE2 MOV R30,R18
FC64 2FF3 MOV R31,R19
FC65 8188 LDD R24,Y+0
FC66 8199 LDD R25,Y+1
FC67 3080 CPI R24,0
FC68 0798 CPC R25,R24
FC69 C003 RJMP 0xFC6D
FC6A 9001 LD R0,Z+
FC6B 920D ST R0,X+
FC6C 9701 SBIW R24,1
FC6D F7E1 BNE 0xFC6A
FC6E 9508 RET
push_arg4:
FC6F 933A ST R19,-Y
FC70 932A ST R18,-Y
push_arg2:
FC71 931A ST R17,-Y
FC72 930A ST R16,-Y
FC73 9508 RET
pop_gset5:
FC74 27EE CLR R30
FC75 C00C RJMP pop
push_gset5:
FC76 92FA ST R15,-Y
FC77 92EA ST R14,-Y
push_gset4:
FC78 92DA ST R13,-Y
FC79 92CA ST R12,-Y
push_gset3:
FC7A 92BA ST R11,-Y
FC7B 92AA ST R10,-Y
push_gset2:
FC7C 937A ST R23,-Y
FC7D 936A ST R22,-Y
push_gset1:
FC7E 935A ST R21,-Y
FC7F 934A ST R20,-Y
FC80 9508 RET
pop_gset1:
FC81 E0E1 LDI R30,1
pop:
FC82 9149 LD R20,Y+
FC83 9159 LD R21,Y+
FC84 FDE0 SBRC R30,0
FC85 9508 RET
FC86 9169 LD R22,Y+
FC87 9179 LD R23,Y+
FC88 FDE1 SBRC R30,1
FC89 9508 RET
FC8A 90A9 LD R10,Y+
FC8B 90B9 LD R11,Y+
FC8C FDE2 SBRC R30,2
FC8D 9508 RET
FC8E 90C9 LD R12,Y+
FC8F 90D9 LD R13,Y+
FC90 FDE3 SBRC R30,3
FC91 9508 RET
FC92 90E9 LD R14,Y+
FC93 90F9 LD R15,Y+
FC94 9508 RET
lsl32:
FC95 920F PUSH R0
FC96 9009 LD R0,Y+
FC97 2000 TST R0
FC98 F031 BEQ 0xFC9F
FC99 0F00 LSL R16
FC9A 1F11 ROL R17
FC9B 1F22 ROL R18
FC9C 1F33 ROL R19
FC9D 940A DEC R0
FC9E CFF8 RJMP 0xFC97
FC9F 900F POP R0
FCA0 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -