📄 main.lst
字号:
\ 000000A6 0734 CPC R19, R20
\ 000000A8 F4D4 BRGE ??main_7
115 { // NOTE: Here we use address as a byte-address, not word-address, for convenience.
116 _WAIT_FOR_SPM();
\ ??main_8:
\ 000000AA B707 IN R16, 0x37
\ 000000AC 2F10 MOV R17, R16
\ 000000AE FD10 SBRC R17, 0
\ 000000B0 CFFC RJMP ??main_8
117 #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
118 _PAGE_ERASE( address );
\ 000000B2 E003 LDI R16, 3
\ 000000B4 8148 LD R20, Y
\ 000000B6 8159 LDD R21, Y+1
\ 000000B8 816A LDD R22, Y+2
\ 000000BA 01FA MOVW R31:R30, R21:R20
\ 000000BC 2F36 MOV R19, R22
\ 000000BE BF3B OUT 0x3B, R19
\ 000000C0 BF07 OUT 0x37, R16
\ 000000C2 95E8 SPM
119 #pragma diag_default=Pe1053 // Back to default.
120 }
\ 000000C4 8108 LD R16, Y
\ 000000C6 8119 LDD R17, Y+1
\ 000000C8 812A LDD R18, Y+2
\ 000000CA 813B LDD R19, Y+3
\ 000000CC 5000 SUBI R16, 0
\ 000000CE 4F1F SBCI R17, 255
\ 000000D0 4F2F SBCI R18, 255
\ 000000D2 4F3F SBCI R19, 255
\ 000000D4 8308 ST Y, R16
\ 000000D6 8319 STD Y+1, R17
\ 000000D8 832A STD Y+2, R18
\ 000000DA 833B STD Y+3, R19
\ 000000DC CFDA RJMP ??main_6
121
122 sendchar('\r'); // Send OK back.
\ ??main_7:
\ 000000DE E00D LDI R16, 13
\ 000000E0 ........ CALL sendchar
\ 000000E4 CF98 RJMP ??main_1
123 }
124
125 #ifndef REMOVE_BLOCK_SUPPORT
126 // Check block load support.
127 else if(val=='b')
\ ??main_5:
\ 000000E6 36A2 CPI R26, 98
\ 000000E8 F451 BRNE ??main_9
128 {
129 sendchar('Y'); // Report block load supported.
\ 000000EA E509 LDI R16, 89
\ 000000EC ........ CALL sendchar
130 sendchar((BLOCKSIZE>>8) & 0xFF); // MSB first.
\ 000000F0 E001 LDI R16, 1
\ 000000F2 ........ CALL sendchar
131 sendchar(BLOCKSIZE&0xFF); // Report BLOCKSIZE (bytes).
\ 000000F6 E000 LDI R16, 0
\ 000000F8 ........ CALL sendchar
\ 000000FC CF8C RJMP ??main_1
132 }
133
134
135 // Start block load.
136 else if(val=='B')
\ ??main_9:
\ 000000FE 34A2 CPI R26, 66
\ 00000100 F489 BRNE ??main_10
137 {
138 temp_int = (recchar()<<8) | recchar(); // Get block size.
\ 00000102 ........ CALL recchar
\ 00000106 2FB0 MOV R27, R16
\ 00000108 ........ CALL recchar
\ 0000010C 2F1B MOV R17, R27
\ 0000010E 01C8 MOVW R25:R24, R17:R16
139 val = recchar(); // Get memtype.
\ 00000110 ........ CALL recchar
\ 00000114 2FA0 MOV R26, R16
140 sendchar( BlockLoad(temp_int,val,&address) ); // Block load.
\ 00000116 01AE MOVW R21:R20, R29:R28
\ 00000118 2F2A MOV R18, R26
\ 0000011A 018C MOVW R17:R16, R25:R24
\ 0000011C .... RCALL BlockLoad
\ 0000011E ........ CALL sendchar
\ 00000122 CF79 RJMP ??main_1
141 }
142
143
144 // Start block read.
145 else if(val=='g')
\ ??main_10:
\ 00000124 36A7 CPI R26, 103
\ 00000126 F479 BRNE ??main_11
146 {
147 temp_int = (recchar()<<8) | recchar(); // Get block size.
\ 00000128 ........ CALL recchar
\ 0000012C 2FB0 MOV R27, R16
\ 0000012E ........ CALL recchar
\ 00000132 2F1B MOV R17, R27
\ 00000134 01C8 MOVW R25:R24, R17:R16
148 val = recchar(); // Get memtype
\ 00000136 ........ CALL recchar
\ 0000013A 2FA0 MOV R26, R16
149 BlockRead(temp_int,val,&address); // Block read
\ 0000013C 01AE MOVW R21:R20, R29:R28
\ 0000013E 2F2A MOV R18, R26
\ 00000140 018C MOVW R17:R16, R25:R24
\ 00000142 .... RCALL BlockRead
\ 00000144 CF68 RJMP ??main_1
150 }
151 #endif
152
153 #ifndef REMOVE_FLASH_BYTE_SUPPORT
154 // Read program memory.
155 else if(val=='R')
\ ??main_11:
\ 00000146 35A2 CPI R26, 82
\ 00000148 F5B9 BRNE ??main_12
156 {
157 // Send high byte, then low byte of flash word.
158 _WAIT_FOR_SPM();
\ ??main_13:
\ 0000014A B707 IN R16, 0x37
\ 0000014C 2F10 MOV R17, R16
\ 0000014E FD10 SBRC R17, 0
\ 00000150 CFFC RJMP ??main_13
159 _ENABLE_RWW_SECTION();
\ 00000152 E111 LDI R17, 17
\ 00000154 E000 LDI R16, 0
\ 00000156 2E00 MOV R0, R16
\ 00000158 BF17 OUT 0x37, R17
\ 0000015A 95E8 SPM
160 #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
161 sendchar( _LOAD_PROGRAM_MEMORY( (address << 1)+1 ) );
\ 0000015C 8108 LD R16, Y
\ 0000015E 8119 LDD R17, Y+1
\ 00000160 812A LDD R18, Y+2
\ 00000162 0F00 LSL R16
\ 00000164 1F11 ROL R17
\ 00000166 1F22 ROL R18
\ 00000168 5F0F SUBI R16, 255
\ 0000016A 4F1F SBCI R17, 255
\ 0000016C 4F2F SBCI R18, 255
\ 0000016E 01F8 MOVW R31:R30, R17:R16
\ 00000170 2F32 MOV R19, R18
\ 00000172 BF3B OUT 0x3B, R19
\ 00000174 9006 ELPM R0, Z
\ 00000176 E000 LDI R16, 0
\ 00000178 BF0B OUT 0x3B, R16
\ 0000017A 2D00 MOV R16, R0
\ 0000017C ........ CALL sendchar
162 sendchar( _LOAD_PROGRAM_MEMORY( (address << 1)+0 ) );
\ 00000180 8108 LD R16, Y
\ 00000182 8119 LDD R17, Y+1
\ 00000184 812A LDD R18, Y+2
\ 00000186 0F00 LSL R16
\ 00000188 1F11 ROL R17
\ 0000018A 1F22 ROL R18
\ 0000018C 01F8 MOVW R31:R30, R17:R16
\ 0000018E 2F32 MOV R19, R18
\ 00000190 BF3B OUT 0x3B, R19
\ 00000192 9006 ELPM R0, Z
\ 00000194 2D00 MOV R16, R0
\ 00000196 E010 LDI R17, 0
\ 00000198 BF1B OUT 0x3B, R17
\ 0000019A ........ CALL sendchar
163 #pragma diag_default=Pe1053 // Back to default.
164
165 address++; // Auto-advance to next Flash word.
\ 0000019E 8108 LD R16, Y
\ 000001A0 8119 LDD R17, Y+1
\ 000001A2 812A LDD R18, Y+2
\ 000001A4 813B LDD R19, Y+3
\ 000001A6 5F0F SUBI R16, 255
\ 000001A8 4F1F SBCI R17, 255
\ 000001AA 4F2F SBCI R18, 255
\ 000001AC 4F3F SBCI R19, 255
\ 000001AE 8308 ST Y, R16
\ 000001B0 8319 STD Y+1, R17
\ 000001B2 832A STD Y+2, R18
\ 000001B4 833B STD Y+3, R19
\ 000001B6 CF2F RJMP ??main_1
166 }
167
168
169 // Write program memory, low byte.
170 else if(val=='c')
\ ??main_12:
\ 000001B8 36A3 CPI R26, 99
\ 000001BA F441 BRNE ??main_14
171 { // NOTE: Always use this command before sending high byte.
172 temp_int=recchar(); // Get low byte for later _FILL_TEMP_WORD.
\ 000001BC ........ CALL recchar
\ 000001C0 E010 LDI R17, 0
\ 000001C2 01C8 MOVW R25:R24, R17:R16
173 sendchar('\r'); // Send OK back.
\ 000001C4 E00D LDI R16, 13
\ 000001C6 ........ CALL sendchar
\ 000001CA CF25 RJMP ??main_1
174 }
175
176
177 // Write program memory, high byte.
178 else if(val=='C')
\ ??main_14:
\ 000001CC 34A3 CPI R26, 67
\ 000001CE F539 BRNE ??main_15
179 {
180 temp_int |= (recchar()<<8); // Get and insert high byte.
\ 000001D0 ........ CALL recchar
\ 000001D4 2F30 MOV R19, R16
\ 000001D6 E020 LDI R18, 0
\ 000001D8 2B82 OR R24, R18
\ 000001DA 2B93 OR R25, R19
181 _WAIT_FOR_SPM();
\ ??main_16:
\ 000001DC B707 IN R16, 0x37
\ 000001DE 2F10 MOV R17, R16
\ 000001E0 FD10 SBRC R17, 0
\ 000001E2 CFFC RJMP ??main_16
182 #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
183 _FILL_TEMP_WORD( (address << 1), temp_int ); // Convert word-address to byte-address and fill.
\ 000001E4 E001 LDI R16, 1
\ 000001E6 8148 LD R20, Y
\ 000001E8 8159 LDD R21, Y+1
\ 000001EA 816A LDD R22, Y+2
\ 000001EC 0F44 LSL R20
\ 000001EE 1F55 ROL R21
\ 000001F0 1F66 ROL R22
\ 000001F2 01FA MOVW R31:R30, R21:R20
\ 000001F4 2F36 MOV R19, R22
\ 000001F6 BF3B OUT 0x3B, R19
\ 000001F8 010C MOVW R1:R0, R25:R24
\ 000001FA BF07 OUT 0x37, R16
\ 000001FC 95E8 SPM
184 #pragma diag_default=Pe1053 // Back to default.
185 address++; // Auto-advance to next Flash word.
\ 000001FE 8108 LD R16, Y
\ 00000200 8119 LDD R17, Y+1
\ 00000202 812A LDD R18, Y+2
\ 00000204 813B LDD R19, Y+3
\ 00000206 5F0F SUBI R16, 255
\ 00000208 4F1F SBCI R17, 255
\ 0000020A 4F2F SBCI R18, 255
\ 0000020C 4F3F SBCI R19, 255
\ 0000020E 8308 ST Y, R16
\ 00000210 8319 STD Y+1, R17
\ 00000212 832A STD Y+2, R18
\ 00000214 833B STD Y+3, R19
186 sendchar('\r'); // Send OK back.
\ 00000216 E00D LDI R16, 13
\ 00000218 ........ CALL sendchar
\ 0000021C CEFC RJMP ??main_1
187 }
188
189
190 // Write page.
191 else if(val== 'm')
\ ??main_15:
\ 0000021E 36AD CPI R26, 109
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -