Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1029 | chrv | 1 | |
2 | AVRA Ver. 1.2.3 evoflash.asm Mon Nov 14 18:42:55 2011 |
||
3 | |||
4 | |||
5 | .LIST |
||
6 | .LISTMAC |
||
7 | |||
8 | .DEF FF_FL =R08 |
||
9 | .DEF FF =R13 ;всегда = $FF |
||
10 | .DEF ONE =R14 ;всегда = $01 |
||
11 | .DEF NULL =R15 ;всегда = $00 |
||
12 | .DEF DATA =R16 |
||
13 | .DEF TEMP =R17 |
||
14 | .DEF COUNT =R18 |
||
15 | .DEF BITS =R19 |
||
16 | ;локально используются: R0,R1,R20,R21,R24,R25 |
||
17 | |||
18 | .EQU DBSIZE_HI =HIGH(4096) |
||
19 | .EQU DBMASK_HI =HIGH(4095) |
||
20 | .EQU nCONFIG =PORTF0 |
||
21 | .EQU nSTATUS =PORTF1 |
||
22 | .EQU CONF_DONE =PORTF2 |
||
23 | |||
24 | .EQU CMD_17 =$51 ;read_single_block |
||
25 | .EQU ACMD_41 =$69 ;sd_send_op_cond |
||
26 | |||
27 | .EQU SD_CS0 =$57 |
||
28 | .EQU SD_CS1 =$5F |
||
29 | .EQU FLASH_LOADDR =$F0 |
||
30 | .EQU FLASH_MIDADDR =$F1 |
||
31 | .EQU FLASH_HIADDR =$F2 |
||
32 | .EQU FLASH_DATA =$F3 |
||
33 | .EQU FLASH_CTRL =$F4 |
||
34 | .EQU SCR_LOADDR =$40 |
||
35 | .EQU SCR_HIADDR =$41 |
||
36 | .EQU SCR_CHAR =$44 |
||
37 | .EQU SCR_MODE =$4E |
||
38 | ; |
||
39 | ;-------------------------------------- |
||
40 | ; |
||
41 | .DSEG |
||
42 | .ORG $0100 |
||
43 | BUFFER: |
||
44 | .ORG $0300 |
||
45 | BUF4FAT: |
||
46 | .ORG $0500 |
||
47 | D:000500 CAL_FAT:.BYTE 1 ;тип обнаруженной FAT |
||
48 | D:000501 MANYFAT:.BYTE 1 ;количество FAT-таблиц |
||
49 | D:000502 BYTSSEC:.BYTE 1 ;количество секторов в кластере |
||
50 | D:000503 ROOTCLS:.BYTE 4 ;сектор начала root директории |
||
51 | D:000507 SEC_FAT:.BYTE 4 ;количество секторов одной FAT |
||
52 | D:00050b RSVDSEC:.BYTE 2 ;размер резервной области |
||
53 | D:00050d STARTRZ:.BYTE 4 ;начало диска/раздела |
||
54 | D:000511 FRSTDAT:.BYTE 4 ;адрес первого сектора данных от BPB |
||
55 | D:000515 SEC_DSC:.BYTE 4 ;количество секторов на диске/разделе |
||
56 | D:000519 CLS_DSC:.BYTE 4 ;количество кластеров на диске/разделе |
||
57 | D:00051d FATSTR0:.BYTE 4 ;начало первой FAT таблицы |
||
58 | D:000521 FATSTR1:.BYTE 4 ;начало второй FAT таблицы |
||
59 | D:000525 TEK_DIR:.BYTE 4 ;кластер текущей директории |
||
60 | D:000529 KCLSDIR:.BYTE 1 ;кол-во кластеров директории |
||
61 | D:00052a NUMSECK:.BYTE 1 ;счетчик секторов в кластере |
||
62 | D:00052b TFILCLS:.BYTE 4 ;текущий кластер |
||
63 | D:00052f MPHWOST:.BYTE 1 ;кол-во секторов в последнем кластере |
||
64 | D:000530 KOL_CLS:.BYTE 4 ;кол-во кластеров файла минус 1 |
||
65 | D:000534 ZTFILCLS:.BYTE 4 |
||
66 | D:000538 ZMPHWOST:.BYTE 1 |
||
67 | D:000539 ZKOL_CLS:.BYTE 4 |
||
68 | D:00053d SDERROR:.BYTE 1 |
||
69 | LASTSECFLAG: |
||
70 | D:00053e .BYTE 1 |
||
71 | D:00053f F_ADDR0:.BYTE 1 |
||
72 | D:000540 F_ADDR1:.BYTE 1 |
||
73 | D:000541 F_ADDR2:.BYTE 1 |
||
74 | D:000542 ERRFLG1:.BYTE 1 |
||
75 | D:000543 ERRFLG2:.BYTE 1 |
||
76 | ; |
||
77 | ;-------------------------------------- |
||
78 | ; |
||
79 | .CSEG |
||
80 | .ORG 0 |
||
81 | C:000000 940c 1525 JMP START |
||
82 | C:000002 940c 1525 JMP START ;EXT_INT0 ; IRQ0 Handler |
||
83 | C:000004 940c 1525 JMP START ;EXT_INT1 ; IRQ1 Handler |
||
84 | C:000006 940c 1525 JMP START ;EXT_INT2 ; IRQ2 Handler |
||
85 | C:000008 940c 1525 JMP START ;EXT_INT3 ; IRQ3 Handler |
||
86 | C:00000a 940c 1525 JMP START ;EXT_INT4 ; IRQ4 Handler |
||
87 | C:00000c 940c 1525 JMP START ;EXT_INT5 ; IRQ5 Handler |
||
88 | C:00000e 940c 1525 JMP START ;EXT_INT6 ; IRQ6 Handler |
||
89 | C:000010 940c 1525 JMP START ;EXT_INT7 ; IRQ7 Handler |
||
90 | C:000012 940c 1525 JMP START ;TIM2_COMP ; Timer2 Compare Handler |
||
91 | C:000014 940c 1525 JMP START ;TIM2_OVF ; Timer2 Overflow Handler |
||
92 | C:000016 940c 1525 JMP START ;TIM1_CAPT ; Timer1 Capture Handler |
||
93 | C:000018 940c 1525 JMP START ;TIM1_COMPA ; Timer1 CompareA Handler |
||
94 | C:00001a 940c 1525 JMP START ;TIM1_COMPB ; Timer1 CompareB Handler |
||
95 | C:00001c 940c 1525 JMP START ;TIM1_OVF ; Timer1 Overflow Handler |
||
96 | C:00001e 940c 1525 JMP START ;TIM0_COMP ; Timer0 Compare Handler |
||
97 | C:000020 940c 1525 JMP START ;TIM0_OVF ; Timer0 Overflow Handler |
||
98 | C:000022 940c 1525 JMP START ;SPI_STC ; SPI Transfer Complete Handler |
||
99 | C:000024 940c 1525 JMP START ;USART0_RXC ; USART0 RX Complete Handler |
||
100 | C:000026 940c 1525 JMP START ;USART0_DRE ; USART0,UDR Empty Handler |
||
101 | C:000028 940c 1525 JMP START ;USART0_TXC ; USART0 TX Complete Handler |
||
102 | C:00002a 940c 1525 JMP START ;ADC ; ADC Conversion Complete Handler |
||
103 | C:00002c 940c 1525 JMP START ;EE_RDY ; EEPROM Ready Handler |
||
104 | C:00002e 940c 1525 JMP START ;ANA_COMP ; Analog Comparator Handler |
||
105 | C:000030 940c 1525 JMP START ;TIM1_COMPC ; Timer1 CompareC Handler |
||
106 | C:000032 940c 1525 JMP START ;TIM3_CAPT ; Timer3 Capture Handler |
||
107 | C:000034 940c 1525 JMP START ;TIM3_COMPA ; Timer3 CompareA Handler |
||
108 | C:000036 940c 1525 JMP START ;TIM3_COMPB ; Timer3 CompareB Handler |
||
109 | C:000038 940c 1525 JMP START ;TIM3_COMPC ; Timer3 CompareC Handler |
||
110 | C:00003a 940c 1525 JMP START ;TIM3_OVF ; Timer3 Overflow Handler |
||
111 | C:00003c 940c 1525 JMP START ;USART1_RXC ; USART1 RX Complete Handler |
||
112 | C:00003e 940c 1525 JMP START ;USART1_DRE ; USART1,UDR Empty Handler |
||
113 | C:000040 940c 1525 JMP START ;USART1_TXC ; USART1 TX Complete Handler |
||
114 | C:000042 940c 1525 JMP START ;TWI_INT ; Two-wire Serial Interface Interrupt Handler |
||
115 | C:000044 940c 1525 JMP START ;SPM_RDY ; SPM Ready Handler |
||
116 | ; |
||
117 | ;-------------------------------------- |
||
118 | ; |
||
119 | MSG_CFGFPGA: |
||
120 | .DB $0D,$0A,$0A,$0A,"Load FPGA configuration... ",0 |
||
121 | C:000046 0D0A0A0A4C6F6164204650474120636F6E66696775726174696F6E2E2E2E2000 |
||
122 | MSG_OK: |
||
123 | .DB "Ok!",$0A |
||
124 | C:000056 4F6B210A |
||
125 | MSG_NEWLINE: |
||
126 | .DB $0D,$0A,0,0 |
||
127 | C:000058 0D0A0000 |
||
128 | ; |
||
129 | MSG_TITLE: |
||
130 | .DB " ZX Evolution Flasher ",0 |
||
131 | C:00005A 20205A582045766F6C7574696F6E20466C61736865722000 |
||
132 | MSG_ID_FLASH: |
||
133 | .DB "ID flash memory chip: ",0,0 |
||
134 | C:000066 494420666C617368206D656D6F727920636869703A200000 |
||
135 | MSG_OPENFILE: |
||
136 | .DB "Open file from SD-card...",0 |
||
137 | C:000072 4F70656E2066696C652066726F6D2053442D636172642E2E2E00 |
||
138 | MSG_SDERROR: |
||
139 | .DB "SD error: ",0,0 |
||
140 | C:00007F 5344206572726F723A200000 |
||
141 | MSG_CARD: |
||
142 | .DB "Card",0,0 |
||
143 | C:000085 436172640000 |
||
144 | MSG_READERROR: |
||
145 | .DB "Read error",0,0 |
||
146 | C:000088 52656164206572726F720000 |
||
147 | MSG_FAT: |
||
148 | .DB "FAT",0 |
||
149 | C:00008E 46415400 |
||
150 | MSG_FILE: |
||
151 | .DB "File",0,0 |
||
152 | C:000090 46696C650000 |
||
153 | MSG_NOTFOUND: |
||
154 | .DB " not found",0,0 |
||
155 | C:000093 206E6F7420666F756E640000 |
||
156 | MSG_EMPTY: |
||
157 | .DB " empty",0,0 |
||
158 | C:000099 20656D7074790000 |
||
159 | MSG_TOOBIG: |
||
160 | .DB " too big",0,0 |
||
161 | C:00009D 20746F6F206269670000 |
||
162 | MSG_F_ERASE: |
||
163 | .DB "Erase...",0,0 |
||
164 | C:0000A2 45726173652E2E2E0000 |
||
165 | MSG_F_WRITE: |
||
166 | .DB "Write...",0,0 |
||
167 | C:0000A7 57726974652E2E2E0000 |
||
168 | MSG_F_CHECK: |
||
169 | .DB "Check...",0,0 |
||
170 | C:0000AC 436865636B2E2E2E0000 |
||
171 | MSG_F_COMPLETE: |
||
172 | .DB "Successfully complete.",0,0 |
||
173 | C:0000B1 5375636365737366756C6C7920636F6D706C6574652E0000 |
||
174 | MSG_F_ERROR: |
||
175 | .DB "ERROR!",0,0 |
||
176 | C:0000BD 4552524F52210000 |
||
177 | MSG_HALT: |
||
178 | .DB "HALT!",0 |
||
179 | C:0000C1 48414C542100 |
||
180 | ; |
||
181 | CMD00: .DB $40,$00,$00,$00,$00,$95 |
||
182 | C:0000C4 400000000095 |
||
183 | CMD08: .DB $48,$00,$00,$01,$AA,$87 |
||
184 | C:0000C7 48000001AA87 |
||
185 | CMD16: .DB $50,$00,$00,$02,$00,$FF |
||
186 | C:0000CA 5000000200FF |
||
187 | CMD55: .DB $77,$00,$00,$00,$00,$FF ;app_cmd |
||
188 | C:0000CD 7700000000FF |
||
189 | CMD58: .DB $7A,$00,$00,$00,$00,$FF ;read_ocr |
||
190 | C:0000D0 7A00000000FF |
||
191 | CMD59: .DB $7B,$00,$00,$00,$00,$FF ;crc_on_off |
||
192 | C:0000D3 7B00000000FF |
||
193 | FILENAME: |
||
194 | .DB "ZXEVO ROM",0 |
||
195 | C:0000D6 5A5845564F202020524F4D00 |
||
196 | ; |
||
197 | PACKED_FPGA: |
||
198 | .LIST |
||
199 | .INCLUDE "_NVRAM.ASM" |
||
200 | ; |
||
201 | ;-------------------------------------- |
||
202 | ; |
||
203 | .EQU RTC_ADDRESS =$A0 ; Address of PCF8583 RTC chip. |
||
204 | .EQU RTC_COMMON_MODE_REG =$FE ; RTC's register for common modes. |
||
205 | ;.EQU MODE_VGA =$01 ; VGA mode (0 - not set/1 - set). |
||
206 | |||
207 | .EQU TW_START =$08 |
||
208 | .EQU TW_REP_START =$10 |
||
209 | .EQU TW_MT_SLA_ACK =$18 |
||
210 | .EQU TW_MT_DATA_ACK =$28 |
||
211 | .EQU TW_MR_SLA_ACK =$40 |
||
212 | |||
213 | .MACRO TW_SEND_STOP |
||
214 | LDI TEMP,(1<<TWINT)|(1<<TWEN)|(1<<TWSTO) |
||
215 | STS TWCR,TEMP |
||
216 | .ENDMACRO |
||
217 | ; |
||
218 | ;-------------------------------------- |
||
219 | ;out: DATA == mode (bit.0 - CLR == TV mode, SET == VGA mode) |
||
220 | NVRAM_READ_MODE: |
||
221 | ;init i2c |
||
222 | ;SCL frequency = CPU clk/ ( 16 + 2* (TWBR) * 4^(TWPS) ) |
||
223 | ;11052000 / (16 + 2*48 ) = 98678,5Hz (100000Hz recommended for PCF8583) |
||
224 | C:0014d6 92f0 0071 STS TWSR,NULL |
||
225 | C:0014d8 e310 LDI TEMP,48 |
||
226 | C:0014d9 9310 0070 STS TWBR,TEMP |
||
227 | |||
228 | ;reset RTC |
||
229 | ;write 0 to control/status register [0] on PCF8583 |
||
230 | |||
231 | C:0014db d027 RCALL TW_SEND_START |
||
232 | C:0014dc 7108 ANDI DATA,TW_START|TW_REP_START |
||
233 | C:0014dd f051 BREQ RTC_ERROR1 |
||
234 | |||
235 | C:0014de ea00 LDI DATA,RTC_ADDRESS |
||
236 | C:0014df d02e RCALL TW_SEND_ADDR |
||
237 | C:0014e0 3108 CPI DATA,TW_MT_SLA_ACK |
||
238 | C:0014e1 f431 BRNE RTC_ERROR1 |
||
239 | |||
240 | C:0014e2 e000 LDI DATA,0 |
||
241 | C:0014e3 d02a RCALL TW_SEND_DATA |
||
242 | C:0014e4 3208 CPI DATA,TW_MT_DATA_ACK |
||
243 | C:0014e5 f411 BRNE RTC_ERROR1 |
||
244 | |||
245 | C:0014e6 e000 LDI DATA,0 |
||
246 | C:0014e7 d026 RCALL TW_SEND_DATA |
||
247 | RTC_ERROR1: |
||
248 | C:0014e8 + TW_SEND_STOP |
||
249 | C:0014e8 e914 LDI TEMP,(1<<TWINT)|(1<<TWEN)|(1<<TWSTO) |
||
250 | C:0014e9 9310 0074 STS TWCR,TEMP |
||
251 | |||
252 | ;restore mode register from NVRAM |
||
253 | |||
254 | C:0014eb d017 RCALL TW_SEND_START |
||
255 | C:0014ec 7108 ANDI DATA,TW_START|TW_REP_START |
||
256 | C:0014ed f081 BREQ RTC_ERROR2 |
||
257 | |||
258 | C:0014ee ea00 LDI DATA,RTC_ADDRESS |
||
259 | C:0014ef d01e RCALL TW_SEND_ADDR |
||
260 | C:0014f0 3108 CPI DATA,TW_MT_SLA_ACK |
||
261 | C:0014f1 f461 BRNE RTC_ERROR2 |
||
262 | |||
263 | C:0014f2 ef0e LDI DATA,RTC_COMMON_MODE_REG |
||
264 | C:0014f3 d01a RCALL TW_SEND_DATA |
||
265 | C:0014f4 3208 CPI DATA,TW_MT_DATA_ACK |
||
266 | C:0014f5 f441 BRNE RTC_ERROR2 |
||
267 | |||
268 | C:0014f6 d00c RCALL TW_SEND_START |
||
269 | C:0014f7 3100 CPI DATA,TW_REP_START |
||
270 | |||
271 | C:0014f8 ea01 LDI DATA,RTC_ADDRESS|$01 |
||
272 | C:0014f9 d014 RCALL TW_SEND_ADDR |
||
273 | C:0014fa 3400 CPI DATA,TW_MR_SLA_ACK |
||
274 | C:0014fb f411 BRNE RTC_ERROR2 |
||
275 | |||
276 | C:0014fc d01e RCALL TW_READ_DATA |
||
277 | C:0014fd c001 RJMP RTC_OK2 |
||
278 | RTC_ERROR2: |
||
279 | C:0014fe e000 LDI DATA,0 |
||
280 | RTC_OK2: |
||
281 | C:0014ff + TW_SEND_STOP |
||
282 | C:0014ff e914 LDI TEMP,(1<<TWINT)|(1<<TWEN)|(1<<TWSTO) |
||
283 | C:001500 9310 0074 STS TWCR,TEMP |
||
284 | C:001502 9508 RET |
||
285 | ; |
||
286 | ;-------------------------------------- |
||
287 | ;out: DATA == i2c status |
||
288 | TW_SEND_START: |
||
289 | ;start transmit |
||
290 | C:001503 ea04 LDI DATA,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN) |
||
291 | C:001504 9300 0074 STS TWCR,DATA |
||
292 | ;wait for flag |
||
293 | TW_SS_WAIT: |
||
294 | C:001506 9100 0074 LDS DATA,TWCR |
||
295 | C:001508 ff07 SBRS DATA,TWINT |
||
296 | C:001509 cffc RJMP TW_SS_WAIT |
||
297 | ;return status |
||
298 | C:00150a 9100 0071 LDS DATA,TWSR |
||
299 | C:00150c 7f08 ANDI DATA,$F8 |
||
300 | C:00150d 9508 RET |
||
301 | ; |
||
302 | ;-------------------------------------- |
||
303 | ;in: DATA == data/address |
||
304 | ;out: DATA == i2c status |
||
305 | TW_SEND_ADDR: |
||
306 | TW_SEND_DATA: |
||
307 | ;set data/address |
||
308 | C:00150e 9300 0073 STS TWDR,DATA |
||
309 | ;enable transmit |
||
310 | C:001510 e804 LDI DATA,(1<<TWINT)|(1<<TWEN) |
||
311 | C:001511 9300 0074 STS TWCR,DATA |
||
312 | ;wait for end transmit |
||
313 | TW_SD_WAIT: |
||
314 | C:001513 9100 0074 LDS DATA,TWCR |
||
315 | C:001515 ff07 SBRS DATA,TWINT |
||
316 | C:001516 cffc RJMP TW_SD_WAIT |
||
317 | ;return status |
||
318 | C:001517 9100 0071 LDS DATA,TWSR |
||
319 | C:001519 7f08 ANDI DATA,$F8 |
||
320 | C:00151a 9508 RET |
||
321 | ; |
||
322 | ;-------------------------------------- |
||
323 | ;out: DATA == data |
||
324 | TW_READ_DATA: |
||
325 | ;enable transmit |
||
326 | C:00151b e804 LDI DATA,(1<<TWINT)|(1<<TWEN) |
||
327 | C:00151c 9300 0074 STS TWCR,DATA |
||
328 | ;wait for flag set |
||
329 | TW_RD_WAIT: |
||
330 | C:00151e 9100 0074 LDS DATA,TWCR |
||
331 | C:001520 ff07 SBRS DATA,TWINT |
||
332 | C:001521 cffc RJMP TW_RD_WAIT |
||
333 | ;get data |
||
334 | C:001522 9100 0073 LDS DATA,TWDR |
||
335 | ;NOT return status |
||
336 | ; LDS DATA,TWSR |
||
337 | ; ANDI DATA,$F8 |
||
338 | C:001524 9508 RET |
||
339 | ; |
||
340 | ;-------------------------------------- |
||
341 | ; |
||
342 | ; |
||
343 | ; |
||
344 | ;-------------------------------------- |
||
345 | ; |
||
346 | C:001525 94f8 START: CLI |
||
347 | C:001526 24ff CLR NULL |
||
348 | C:001527 e011 LDI TEMP,$01 |
||
349 | C:001528 2ee1 MOV ONE,TEMP |
||
350 | C:001529 ef1f LDI TEMP,$FF |
||
351 | C:00152a 2ed1 MOV FF,TEMP |
||
352 | ;WatchDog OFF |
||
353 | C:00152b e11f LDI TEMP,0B00011111 |
||
354 | C:00152c bd11 OUT WDTCR,TEMP |
||
355 | C:00152d bcf1 OUT WDTCR,NULL |
||
356 | |||
357 | C:00152e bef4 OUT MCUCSR,NULL |
||
358 | ; |
||
359 | C:00152f ef1f LDI TEMP,LOW(RAMEND) |
||
360 | C:001530 bf1d OUT SPL,TEMP |
||
361 | C:001531 e110 LDI TEMP,HIGH(RAMEND) |
||
362 | C:001532 bf1e OUT SPH,TEMP |
||
363 | ; |
||
364 | C:001533 beeb OUT RAMPZ,ONE |
||
365 | ; |
||
366 | C:001534 ef1f LDI TEMP, 0B11111111 |
||
367 | C:001535 + OUTPORT PORTG,TEMP |
||
368 | C:001535 9310 0065 STS PORTG+$20*(PORTG<$40),TEMP |
||
369 | C:001537 e010 LDI TEMP, 0B00000000 |
||
370 | C:001538 + OUTPORT DDRG,TEMP |
||
371 | C:001538 9310 0064 STS DDRG+$20*(DDRG<$40),TEMP |
||
372 | |||
373 | C:00153a e018 LDI TEMP, 0B00001000 |
||
374 | C:00153b + OUTPORT PORTF,TEMP |
||
375 | C:00153b 9310 0062 STS PORTF+$20*(PORTF<$40),TEMP |
||
376 | C:00153d + OUTPORT DDRF,TEMP |
||
377 | C:00153d 9310 0061 STS DDRF+$20*(DDRF<$40),TEMP |
||
378 | |||
379 | C:00153f ef13 LDI TEMP, 0B11110011 |
||
380 | C:001540 b913 OUT PORTE,TEMP |
||
381 | C:001541 e010 LDI TEMP, 0B00000000 |
||
382 | C:001542 b912 OUT DDRE,TEMP |
||
383 | |||
384 | C:001543 ef1f LDI TEMP, 0B11111111 |
||
385 | C:001544 bb12 OUT PORTD,TEMP |
||
386 | C:001545 e010 LDI TEMP, 0B00000000 |
||
387 | C:001546 bb11 OUT DDRD,TEMP |
||
388 | |||
389 | C:001547 ed1f LDI TEMP, 0B11011111 |
||
390 | C:001548 bb15 OUT PORTC,TEMP |
||
391 | C:001549 e010 LDI TEMP, 0B00000000 |
||
392 | C:00154a bb14 OUT DDRC,TEMP |
||
393 | |||
394 | C:00154b ef19 LDI TEMP, 0B11111001 |
||
395 | C:00154c bb18 OUT PORTB,TEMP |
||
396 | C:00154d e817 LDI TEMP, 0B10000111 |
||
397 | C:00154e bb17 OUT DDRB,TEMP |
||
398 | |||
399 | C:00154f ef1f LDI TEMP, 0B11111111 |
||
400 | C:001550 bb1b OUT PORTA,TEMP |
||
401 | C:001551 e010 LDI TEMP, 0B00000000 |
||
402 | C:001552 bb1a OUT DDRA,TEMP |
||
403 | ;UART1 Set baud rate |
||
404 | C:001553 + OUTPORT UBRR1H,NULL |
||
405 | C:001553 92f0 0098 STS UBRR1H+$20*(UBRR1H<$40),NULL |
||
406 | C:001555 e015 LDI TEMP,5 ;115200 baud @ 11059.2 kHz, Normal speed |
||
407 | C:001556 + OUTPORT UBRR1L,TEMP |
||
408 | C:001556 9310 0099 STS UBRR1L+$20*(UBRR1L<$40),TEMP |
||
409 | ;UART1 Normal Speed |
||
410 | C:001558 + OUTPORT UCSR1A,NULL |
||
411 | C:001558 92f0 009b STS UCSR1A+$20*(UCSR1A<$40),NULL |
||
412 | ;UART1 data8bit, 2stopbits |
||
413 | C:00155a e01e LDI TEMP,(1<<UCSZ1)|(1<<UCSZ0)|(1<<USBS) |
||
414 | C:00155b + OUTPORT UCSR1C,TEMP |
||
415 | C:00155b 9310 009d STS UCSR1C+$20*(UCSR1C<$40),TEMP |
||
416 | ;UART1 Разрешаем передачу |
||
417 | C:00155d e018 LDI TEMP,(1<<TXEN) |
||
418 | C:00155e + OUTPORT UCSR1B,TEMP |
||
419 | C:00155e 9310 009a STS UCSR1B+$20*(UCSR1B<$40),TEMP |
||
420 | ;SPI init |
||
421 | C:001560 e011 LDI TEMP,(1<<SPI2X) |
||
422 | C:001561 b91e OUT SPSR,TEMP |
||
423 | C:001562 e710 LDI TEMP,(1<<SPE)|(1<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA) |
||
424 | C:001563 b91d OUT SPCR,TEMP |
||
425 | ;ждём включения ATX, а потом ещё чуть-чуть. |
||
426 | C:001564 9b00 UP11: SBIS PINF,0 ;PINC,5 ; а если powergood нет вообще ? |
||
427 | C:001565 cffe RJMP UP11 |
||
428 | C:001566 e005 LDI DATA,5 |
||
429 | C:001567 d631 RCALL DELAY |
||
430 | |||
431 | C:001568 + LDIZ MSG_CFGFPGA*2 |
||
432 | C:001568 e8ec LDI ZL,LOW(MSG_CFGFPGA*2) |
||
433 | C:001569 e0f0 LDI ZH,HIGH(MSG_CFGFPGA*2) |
||
434 | C:00156a d5e3 RCALL UART_PRINTSTRZ |
||
435 | ;загрузка FPGA |
||
436 | C:00156b + INPORT TEMP,DDRF |
||
437 | C:00156b 9110 0061 LDS TEMP,DDRF+$20*(DDRF<$40) |
||
438 | C:00156d 6011 SBR TEMP,(1<<nCONFIG) |
||
439 | C:00156e + OUTPORT DDRF,TEMP |
||
440 | C:00156e 9310 0061 STS DDRF+$20*(DDRF<$40),TEMP |
||
441 | |||
442 | C:001570 e913 LDI TEMP,147 ;40 us @ 11.0592 MHz |
||
443 | C:001571 951a LDFPGA1:DEC TEMP ;1 |
||
444 | C:001572 f7f1 BRNE LDFPGA1 ;2 |
||
445 | |||
446 | C:001573 + INPORT TEMP,DDRF |
||
447 | C:001573 9110 0061 LDS TEMP,DDRF+$20*(DDRF<$40) |
||
448 | C:001575 7f1e CBR TEMP,(1<<nCONFIG) |
||
449 | C:001576 + OUTPORT DDRF,TEMP |
||
450 | C:001576 9310 0061 STS DDRF+$20*(DDRF<$40),TEMP |
||
451 | |||
452 | C:001578 9b01 LDFPGA2:SBIS PINF,nSTATUS |
||
453 | C:001579 cffe RJMP LDFPGA2 |
||
454 | |||
455 | C:00157a + LDIZ PACKED_FPGA*2 |
||
456 | C:00157a ebe8 LDI ZL,LOW(PACKED_FPGA*2) |
||
457 | C:00157b e0f1 LDI ZH,HIGH(PACKED_FPGA*2) |
||
458 | C:00157c + LDIY BUFFER |
||
459 | C:00157c e0c0 LDI YL,LOW(BUFFER) |
||
460 | C:00157d e0d1 LDI YH,HIGH(BUFFER) |
||
461 | ;(не трогаем стек! всё ОЗУ под буфер) |
||
462 | C:00157e e810 LDI TEMP,$80 |
||
463 | C:00157f 9005 MS: LPM R0,Z+ |
||
464 | C:001580 9209 ST Y+,R0 |
||
465 | ;-begin-PUT_BYTE_1--- |
||
466 | C:001581 b80f OUT SPDR,R0 |
||
467 | C:001582 9b77 PUTB1: SBIS SPSR,SPIF |
||
468 | C:001583 cffe RJMP PUTB1 |
||
469 | ;-end---PUT_BYTE_1--- |
||
470 | C:001584 50d1 SUBI YH,HIGH(BUFFER) ; |
||
471 | C:001585 70df ANDI YH,DBMASK_HI ;Y warp |
||
472 | C:001586 + ADDI YH,HIGH(BUFFER) ; |
||
473 | C:001586 5fdf SUBI YH,(-HIGH(BUFFER)&$FF) |
||
474 | C:001587 e052 M0: LDI R21,$02 |
||
475 | C:001588 ef4f LDI R20,$FF |
||
476 | M1: |
||
477 | C:001589 0f11 M1X: ADD TEMP,TEMP |
||
478 | C:00158a f411 BRNE M2 |
||
479 | C:00158b 9115 LPM TEMP,Z+ |
||
480 | C:00158c 1f11 ROL TEMP |
||
481 | C:00158d 1f44 M2: ROL R20 |
||
482 | C:00158e f7d0 BRCC M1X |
||
483 | C:00158f 955a DEC R21 |
||
484 | C:001590 f449 BRNE X2 |
||
485 | C:001591 e002 LDI DATA,2 |
||
486 | C:001592 9545 ASR R20 |
||
487 | C:001593 f080 BRCS N1 |
||
488 | C:001594 9503 INC DATA |
||
489 | C:001595 9543 INC R20 |
||
490 | C:001596 f051 BREQ N2 |
||
491 | C:001597 e053 LDI R21,$03 |
||
492 | C:001598 e34f LDI R20,$3F |
||
493 | C:001599 cfef RJMP M1 |
||
494 | |||
495 | C:00159a 955a X2: DEC R21 |
||
496 | C:00159b f4b1 BRNE X3 |
||
497 | C:00159c 9546 LSR R20 |
||
498 | C:00159d f308 BRCS MS |
||
499 | C:00159e 9553 INC R21 |
||
500 | C:00159f cfe9 RJMP M1 |
||
501 | |||
502 | C:0015a0 0f04 X6: ADD DATA,R20 |
||
503 | C:0015a1 e054 N2: LDI R21,$04 |
||
504 | C:0015a2 ef4f LDI R20,$FF |
||
505 | C:0015a3 cfe5 RJMP M1 |
||
506 | |||
507 | C:0015a4 9543 N1: INC R20 |
||
508 | C:0015a5 f4d1 BRNE M4 |
||
509 | C:0015a6 9553 INC R21 |
||
510 | C:0015a7 9547 N5: ROR R20 |
||
511 | C:0015a8 f158 BRCS DEMLZEND |
||
512 | C:0015a9 1f55 ROL R21 |
||
513 | C:0015aa 0f11 ADD TEMP,TEMP |
||
514 | C:0015ab f411 BRNE N6 |
||
515 | C:0015ac 9115 LPM TEMP,Z+ |
||
516 | C:0015ad 1f11 ROL TEMP |
||
517 | C:0015ae f7c0 N6: BRCC N5 |
||
518 | C:0015af 0f05 ADD DATA,R21 |
||
519 | C:0015b0 e056 LDI R21,6 |
||
520 | C:0015b1 cfd7 RJMP M1 |
||
521 | C:0015b2 955a X3: DEC R21 |
||
522 | C:0015b3 f411 BRNE X4 |
||
523 | C:0015b4 e001 LDI DATA,1 |
||
524 | C:0015b5 c00b RJMP M3 |
||
525 | C:0015b6 955a X4: DEC R21 |
||
526 | C:0015b7 f429 BRNE X5 |
||
527 | C:0015b8 9543 INC R20 |
||
528 | C:0015b9 f431 BRNE M4 |
||
529 | C:0015ba e055 LDI R21,$05 |
||
530 | C:0015bb e14f LDI R20,$1F |
||
531 | C:0015bc cfcc RJMP M1 |
||
532 | C:0015bd 955a X5: DEC R21 |
||
533 | C:0015be f709 BRNE X6 |
||
534 | C:0015bf 2f54 MOV R21,R20 |
||
535 | C:0015c0 9145 M4: LPM R20,Z+ |
||
536 | C:0015c1 955a M3: DEC R21 |
||
537 | C:0015c2 2fa4 MOV XL,R20 |
||
538 | C:0015c3 2fb5 MOV XH,R21 |
||
539 | C:0015c4 0fac ADD XL,YL |
||
540 | C:0015c5 1fbd ADC XH,YH |
||
541 | LDIRLOOP: |
||
542 | C:0015c6 50b1 SUBI XH,HIGH(BUFFER) ; |
||
543 | C:0015c7 70bf ANDI XH,DBMASK_HI ;X warp |
||
544 | C:0015c8 + ADDI XH,HIGH(BUFFER) ; |
||
545 | C:0015c8 5fbf SUBI XH,(-HIGH(BUFFER)&$FF) |
||
546 | C:0015c9 900d LD R0,X+ |
||
547 | C:0015ca 9209 ST Y+,R0 |
||
548 | ;-begin-PUT_BYTE_2--- |
||
549 | C:0015cb b80f OUT SPDR,R0 |
||
550 | C:0015cc 9b77 PUTB2: SBIS SPSR,SPIF |
||
551 | C:0015cd cffe RJMP PUTB2 |
||
552 | ;-end---PUT_BYTE_2--- |
||
553 | C:0015ce 50d1 SUBI YH,HIGH(BUFFER) ; |
||
554 | C:0015cf 70df ANDI YH,DBMASK_HI ;Y warp |
||
555 | C:0015d0 + ADDI YH,HIGH(BUFFER) ; |
||
556 | C:0015d0 5fdf SUBI YH,(-HIGH(BUFFER)&$FF) |
||
557 | C:0015d1 950a DEC DATA |
||
558 | C:0015d2 f799 BRNE LDIRLOOP |
||
559 | |||
560 | C:0015d3 cfb3 RJMP M0 |
||
561 | ;теперь можно юзать стек |
||
562 | DEMLZEND: |
||
563 | C:0015d4 9b02 SBIS PINF,CONF_DONE |
||
564 | C:0015d5 cffe RJMP DEMLZEND |
||
565 | ;SPI reinit |
||
566 | C:0015d6 e510 LDI TEMP,(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA) |
||
567 | C:0015d7 b91d OUT SPCR,TEMP |
||
568 | |||
569 | C:0015d8 9a16 SBI DDRE,6 |
||
570 | C:0015d9 + LED_OFF |
||
571 | C:0015d9 9ac7 SBI PORTB,7 |
||
572 | C:0015da + LDIZ MSG_OK*2 |
||
573 | C:0015da eaec LDI ZL,LOW(MSG_OK*2) |
||
574 | C:0015db e0f0 LDI ZH,HIGH(MSG_OK*2) |
||
575 | C:0015dc d571 RCALL UART_PRINTSTRZ |
||
576 | ; - - - - - - - - - - - - - - - - - - - |
||
577 | C:0015dd def8 RCALL NVRAM_READ_MODE |
||
578 | C:0015de e41e LDI TEMP,SCR_MODE |
||
579 | C:0015df d560 RCALL FPGA_REG |
||
580 | ; - - - - - - - - - - - - - - - - - - - |
||
581 | C:0015e0 e0a0 LDI XL,0 |
||
582 | C:0015e1 e0b0 LDI XH,0 |
||
583 | C:0015e2 d571 RCALL SET_CURSOR |
||
584 | C:0015e3 + LDIZ MSG_TITLE*2 |
||
585 | C:0015e3 ebe4 LDI ZL,LOW(MSG_TITLE*2) |
||
586 | C:0015e4 e0f0 LDI ZH,HIGH(MSG_TITLE*2) |
||
587 | C:0015e5 d57a RCALL PRINTSTRZ |
||
588 | |||
589 | C:0015e6 + LDIZ LARGEBOOTSTART*2-4 |
||
590 | C:0015e6 efec LDI ZL,LOW(LARGEBOOTSTART*2-4) |
||
591 | C:0015e7 edff LDI ZH,HIGH(LARGEBOOTSTART*2-4) |
||
592 | ; OUT RAMPZ,ONE |
||
593 | C:0015e8 91a7 ELPM XL,Z+ |
||
594 | C:0015e9 91b6 ELPM XH,Z |
||
595 | C:0015ea 2f0a MOV DATA,XL |
||
596 | C:0015eb 710f ANDI DATA,$1F |
||
597 | C:0015ec f0d9 BREQ PRVERS9 |
||
598 | C:0015ed 2f1b MOV TEMP,XH |
||
599 | C:0015ee 0faa LSL XL |
||
600 | C:0015ef 1f11 ROL TEMP |
||
601 | C:0015f0 0faa LSL XL |
||
602 | C:0015f1 1f11 ROL TEMP |
||
603 | C:0015f2 0faa LSL XL |
||
604 | C:0015f3 1f11 ROL TEMP |
||
605 | C:0015f4 701f ANDI TEMP,$0F |
||
606 | C:0015f5 f091 BREQ PRVERS9 |
||
607 | C:0015f6 301d CPI TEMP,13 |
||
608 | C:0015f7 f480 BRCC PRVERS9 |
||
609 | C:0015f8 2f2b MOV COUNT,XH |
||
610 | C:0015f9 9526 LSR COUNT |
||
611 | C:0015fa 732f ANDI COUNT,$3F |
||
612 | C:0015fb 3029 CPI COUNT,9 |
||
613 | C:0015fc f058 BRCS PRVERS9 |
||
614 | C:0015fd 930f PUSH DATA |
||
615 | C:0015fe e208 LDI DATA,$28 ;"(" |
||
616 | C:0015ff d57b RCALL PUTCHAR |
||
617 | C:001600 2f02 MOV DATA,COUNT |
||
618 | C:001601 d564 RCALL DECBYTE |
||
619 | C:001602 2f01 MOV DATA,TEMP |
||
620 | C:001603 d562 RCALL DECBYTE |
||
621 | C:001604 910f POP DATA |
||
622 | C:001605 d560 RCALL DECBYTE |
||
623 | C:001606 e209 LDI DATA,$29 ;")" |
||
624 | C:001607 d573 RCALL PUTCHAR |
||
625 | PRVERS9: |
||
626 | ; - - - - - - - - - - - - - - - - - - - |
||
627 | ;информация о Flash-ROM чипе |
||
628 | C:001608 d543 RCALL UART_NEWLINE |
||
629 | C:001609 e0a0 LDI XL,0 |
||
630 | C:00160a e0b2 LDI XH,2 |
||
631 | C:00160b d548 RCALL SET_CURSOR |
||
632 | C:00160c + LDIZ MSG_ID_FLASH*2 |
||
633 | C:00160c ecec LDI ZL,LOW(MSG_ID_FLASH*2) |
||
634 | C:00160d e0f0 LDI ZH,HIGH(MSG_ID_FLASH*2) |
||
635 | C:00160e d551 RCALL PRINTSTRZ |
||
636 | |||
637 | C:00160f d4b3 RCALL F_ID |
||
638 | C:001610 2f0e MOV DATA,ZL |
||
639 | C:001611 d560 RCALL HEXBYTE |
||
640 | C:001612 e200 LDI DATA,$20 |
||
641 | C:001613 d567 RCALL PUTCHAR |
||
642 | C:001614 2f0f MOV DATA,ZH |
||
643 | C:001615 d55c RCALL HEXBYTE |
||
644 | ; - - - - - - - - - - - - - - - - - - - |
||
645 | C:001616 d535 RCALL UART_NEWLINE |
||
646 | C:001617 e0a0 LDI XL,0 |
||
647 | C:001618 e0b3 LDI XH,3 |
||
648 | C:001619 d53a RCALL SET_CURSOR |
||
649 | C:00161a + LDIZ MSG_OPENFILE*2 |
||
650 | C:00161a eee4 LDI ZL,LOW(MSG_OPENFILE*2) |
||
651 | C:00161b e0f0 LDI ZH,HIGH(MSG_OPENFILE*2) |
||
652 | C:00161c d543 RCALL PRINTSTRZ |
||
653 | ; |
||
654 | ;инициализация SD карточки |
||
655 | C:00161d e51f LDI TEMP,SD_CS1 |
||
656 | C:00161e ef0f SER DATA |
||
657 | C:00161f d520 RCALL FPGA_REG |
||
658 | C:001620 e210 LDI TEMP,32 |
||
659 | C:001621 d2ad RCALL SD_RD_DUMMY |
||
660 | |||
661 | C:001622 e517 LDI TEMP,SD_CS0 |
||
662 | C:001623 ef0f SER DATA |
||
663 | C:001624 d51b RCALL FPGA_REG |
||
664 | C:001625 ef8f SER R24 |
||
665 | C:001626 + SDINIT1:LDIZ CMD00*2 |
||
666 | C:001626 e8e8 LDI ZL,LOW(CMD00*2) |
||
667 | C:001627 e0f1 LDI ZH,HIGH(CMD00*2) |
||
668 | C:001628 d2ab RCALL SD_WR_PGM_6 |
||
669 | C:001629 958a DEC R24 |
||
670 | C:00162a f411 BRNE SDINIT2 |
||
671 | C:00162b e001 LDI DATA,1 ;нет SD |
||
672 | C:00162c c44a RJMP SD_ERROR |
||
673 | C:00162d 3001 SDINIT2:CPI DATA,$01 |
||
674 | C:00162e f7b9 BRNE SDINIT1 |
||
675 | |||
676 | C:00162f + LDIZ CMD08*2 |
||
677 | C:00162f e8ee LDI ZL,LOW(CMD08*2) |
||
678 | C:001630 e0f1 LDI ZH,HIGH(CMD08*2) |
||
679 | C:001631 d2a2 RCALL SD_WR_PGM_6 |
||
680 | C:001632 e080 LDI R24,$00 |
||
681 | C:001633 ff02 SBRS DATA,2 |
||
682 | C:001634 e480 LDI R24,$40 |
||
683 | C:001635 e014 LDI TEMP,4 |
||
684 | C:001636 d298 RCALL SD_RD_DUMMY |
||
685 | |||
686 | C:001637 + SDINIT3:LDIZ CMD55*2 |
||
687 | C:001637 e9ea LDI ZL,LOW(CMD55*2) |
||
688 | C:001638 e0f1 LDI ZH,HIGH(CMD55*2) |
||
689 | C:001639 d29a RCALL SD_WR_PGM_6 |
||
690 | C:00163a e012 LDI TEMP,2 |
||
691 | C:00163b d293 RCALL SD_RD_DUMMY |
||
692 | C:00163c e609 LDI DATA,ACMD_41 |
||
693 | C:00163d d290 RCALL SD_EXCHANGE |
||
694 | C:00163e 2f08 MOV DATA,R24 |
||
695 | C:00163f d28e RCALL SD_EXCHANGE |
||
696 | |||
697 | C:001640 + LDIZ CMD55*2+2 |
||
698 | C:001640 e9ec LDI ZL,LOW(CMD55*2+2) |
||
699 | C:001641 e0f1 LDI ZH,HIGH(CMD55*2+2) |
||
700 | C:001642 e014 LDI TEMP,4 |
||
701 | C:001643 d293 RCALL SD_WR_PGX |
||
702 | C:001644 2300 TST DATA |
||
703 | C:001645 f789 BRNE SDINIT3 |
||
704 | |||
705 | C:001646 + SDINIT4:LDIZ CMD59*2 |
||
706 | C:001646 eae6 LDI ZL,LOW(CMD59*2) |
||
707 | C:001647 e0f1 LDI ZH,HIGH(CMD59*2) |
||
708 | C:001648 d28b RCALL SD_WR_PGM_6 |
||
709 | C:001649 2300 TST DATA |
||
710 | C:00164a f7d9 BRNE SDINIT4 |
||
711 | |||
712 | C:00164b + SDINIT5:LDIZ CMD16*2 |
||
713 | C:00164b e9e4 LDI ZL,LOW(CMD16*2) |
||
714 | C:00164c e0f1 LDI ZH,HIGH(CMD16*2) |
||
715 | C:00164d d286 RCALL SD_WR_PGM_6 |
||
716 | C:00164e 2300 TST DATA |
||
717 | C:00164f f7d9 BRNE SDINIT5 |
||
718 | ; |
||
719 | ; - - - - - - - - - - - - - - - - - - - |
||
720 | ;поиск FAT, инициализация переменных |
||
721 | C:001650 + WC_FAT: LDIX 0 |
||
722 | C:001650 e0a0 LDI XL,LOW(0) |
||
723 | C:001651 e0b0 LDI XH,HIGH(0) |
||
724 | C:001652 + LDIY 0 |
||
725 | C:001652 e0c0 LDI YL,LOW(0) |
||
726 | C:001653 e0d0 LDI YH,HIGH(0) |
||
727 | C:001654 d2c2 RCALL LOADLST |
||
728 | C:001655 + LDIZ BUF4FAT+$01BE |
||
729 | C:001655 ebee LDI ZL,LOW(BUF4FAT+$01BE) |
||
730 | C:001656 e0f4 LDI ZH,HIGH(BUF4FAT+$01BE) |
||
731 | C:001657 8100 LD DATA,Z |
||
732 | C:001658 2300 TST DATA |
||
733 | C:001659 f4b9 BRNE RDFAT05 |
||
734 | C:00165a ece2 LDI ZL,$C2 |
||
735 | C:00165b 8100 LD DATA,Z |
||
736 | C:00165c e010 LDI TEMP,0 |
||
737 | C:00165d 3001 CPI DATA,$01 |
||
738 | C:00165e f051 BREQ RDFAT06 |
||
739 | C:00165f e012 LDI TEMP,2 |
||
740 | C:001660 300b CPI DATA,$0B |
||
741 | C:001661 f039 BREQ RDFAT06 |
||
742 | C:001662 300c CPI DATA,$0C |
||
743 | C:001663 f029 BREQ RDFAT06 |
||
744 | C:001664 e011 LDI TEMP,1 |
||
745 | C:001665 3006 CPI DATA,$06 |
||
746 | C:001666 f011 BREQ RDFAT06 |
||
747 | C:001667 300e CPI DATA,$0E |
||
748 | C:001668 f441 BRNE RDFAT05 |
||
749 | C:001669 9310 0500 RDFAT06:STS CAL_FAT,TEMP |
||
750 | C:00166b ece6 LDI ZL,$C6 |
||
751 | C:00166c 91a1 LD XL,Z+ |
||
752 | C:00166d 91b1 LD XH,Z+ |
||
753 | C:00166e 91c1 LD YL,Z+ |
||
754 | C:00166f 81d0 LD YH,Z |
||
755 | C:001670 c02f RJMP RDFAT00 |
||
756 | C:001671 + RDFAT05:LDIZ BUF4FAT |
||
757 | C:001671 e0e0 LDI ZL,LOW(BUF4FAT) |
||
758 | C:001672 e0f3 LDI ZH,HIGH(BUF4FAT) |
||
759 | C:001673 8535 LDD BITS,Z+$0D |
||
760 | C:001674 e000 LDI DATA,0 |
||
761 | C:001675 e010 LDI TEMP,0 |
||
762 | C:001676 e028 LDI COUNT,8 |
||
763 | C:001677 9537 RDF051: ROR BITS |
||
764 | C:001678 1d0f ADC DATA,NULL |
||
765 | C:001679 952a DEC COUNT |
||
766 | C:00167a f7e1 BRNE RDF051 |
||
767 | C:00167b 950a DEC DATA |
||
768 | C:00167c f409 BRNE RDF052 |
||
769 | C:00167d 9513 INC TEMP |
||
770 | C:00167e 8506 RDF052: LDD DATA,Z+$0E |
||
771 | C:00167f 8407 LDD R0,Z+$0F |
||
772 | C:001680 2900 OR DATA,R0 |
||
773 | C:001681 f009 BREQ RDF053 |
||
774 | C:001682 9513 INC TEMP |
||
775 | C:001683 8903 RDF053: LDD DATA,Z+$13 |
||
776 | C:001684 8804 LDD R0,Z+$14 |
||
777 | C:001685 2900 OR DATA,R0 |
||
778 | C:001686 f409 BRNE RDF054 |
||
779 | C:001687 9513 INC TEMP |
||
780 | C:001688 a100 RDF054: LDD DATA,Z+$20 |
||
781 | C:001689 a001 LDD R0,Z+$21 |
||
782 | C:00168a 2900 OR DATA,R0 |
||
783 | C:00168b a002 LDD R0,Z+$22 |
||
784 | C:00168c 2900 OR DATA,R0 |
||
785 | C:00168d a003 LDD R0,Z+$23 |
||
786 | C:00168e 2900 OR DATA,R0 |
||
787 | C:00168f f409 BRNE RDF055 |
||
788 | C:001690 9513 INC TEMP |
||
789 | C:001691 8905 RDF055: LDD DATA,Z+$15 |
||
790 | C:001692 7f00 ANDI DATA,$F0 |
||
791 | C:001693 3f00 CPI DATA,$F0 |
||
792 | C:001694 f409 BRNE RDF056 |
||
793 | C:001695 9513 INC TEMP |
||
794 | C:001696 3014 RDF056: CPI TEMP,4 |
||
795 | C:001697 f011 BREQ RDF057 |
||
796 | C:001698 e003 LDI DATA,3 ;не найдена FAT |
||
797 | C:001699 c3dd RJMP SD_ERROR |
||
798 | C:00169a 92d0 0500 RDF057: STS CAL_FAT,FF |
||
799 | C:00169c + LDIY 0 |
||
800 | C:00169c e0c0 LDI YL,LOW(0) |
||
801 | C:00169d e0d0 LDI YH,HIGH(0) |
||
802 | C:00169e + LDIX 0 |
||
803 | C:00169e e0a0 LDI XL,LOW(0) |
||
804 | C:00169f e0b0 LDI XH,HIGH(0) |
||
805 | C:0016a0 + RDFAT00:STSX STARTRZ+0 |
||
806 | C:0016a0 93a0 050d STS STARTRZ+0,XL |
||
807 | C:0016a2 93b0 050e STS STARTRZ+0+1,XH |
||
808 | C:0016a4 + STSY STARTRZ+2 |
||
809 | C:0016a4 93c0 050f STS STARTRZ+2,YL |
||
810 | C:0016a6 93d0 0510 STS STARTRZ+2+1,YH |
||
811 | C:0016a8 d26e RCALL LOADLST |
||
812 | C:0016a9 + LDIY 0 |
||
813 | C:0016a9 e0c0 LDI YL,LOW(0) |
||
814 | C:0016aa e0d0 LDI YH,HIGH(0) |
||
815 | C:0016ab 89a6 LDD XL,Z+22 |
||
816 | C:0016ac 89b7 LDD XH,Z+23 ;bpb_fatsz16 |
||
817 | C:0016ad 2f0b MOV DATA,XH |
||
818 | C:0016ae 2b0a OR DATA,XL |
||
819 | C:0016af f421 BRNE RDFAT01 ;если не fat12/16 (bpb_fatsz16=0) |
||
820 | C:0016b0 a1a4 LDD XL,Z+36 ;то берем bpb_fatsz32 из смещения +36 |
||
821 | C:0016b1 a1b5 LDD XH,Z+37 |
||
822 | C:0016b2 a1c6 LDD YL,Z+38 |
||
823 | C:0016b3 a1d7 LDD YH,Z+39 |
||
824 | C:0016b4 + RDFAT01:STSX SEC_FAT+0 |
||
825 | C:0016b4 93a0 0507 STS SEC_FAT+0,XL |
||
826 | C:0016b6 93b0 0508 STS SEC_FAT+0+1,XH |
||
827 | C:0016b8 + STSY SEC_FAT+2 ;число секторов на fat-таблицу |
||
828 | C:0016b8 93c0 0509 STS SEC_FAT+2,YL |
||
829 | C:0016ba 93d0 050a STS SEC_FAT+2+1,YH |
||
830 | C:0016bc + LDIY 0 |
||
831 | C:0016bc e0c0 LDI YL,LOW(0) |
||
832 | C:0016bd e0d0 LDI YH,HIGH(0) |
||
833 | C:0016be 89a3 LDD XL,Z+19 |
||
834 | C:0016bf 89b4 LDD XH,Z+20 ;bpb_totsec16 |
||
835 | C:0016c0 2f0b MOV DATA,XH |
||
836 | C:0016c1 2b0a OR DATA,XL |
||
837 | C:0016c2 f421 BRNE RDFAT02 ;если не fat12/16 (bpb_totsec16=0) |
||
838 | C:0016c3 a1a0 LDD XL,Z+32 ;то берем из bpb_totsec32 смещения +32 |
||
839 | C:0016c4 a1b1 LDD XH,Z+33 |
||
840 | C:0016c5 a1c2 LDD YL,Z+34 |
||
841 | C:0016c6 a1d3 LDD YH,Z+35 |
||
842 | C:0016c7 + RDFAT02:STSX SEC_DSC+0 |
||
843 | C:0016c7 93a0 0515 STS SEC_DSC+0,XL |
||
844 | C:0016c9 93b0 0516 STS SEC_DSC+0+1,XH |
||
845 | C:0016cb + STSY SEC_DSC+2 ;к-во секторов на диске/разделе |
||
846 | C:0016cb 93c0 0517 STS SEC_DSC+2,YL |
||
847 | C:0016cd 93d0 0518 STS SEC_DSC+2+1,YH |
||
848 | ;вычисляем rootdirsectors |
||
849 | C:0016cf 89a1 LDD XL,Z+17 |
||
850 | C:0016d0 89b2 LDD XH,Z+18 ;bpb_rootentcnt |
||
851 | C:0016d1 + LDIY 0 |
||
852 | C:0016d1 e0c0 LDI YL,LOW(0) |
||
853 | C:0016d2 e0d0 LDI YH,HIGH(0) |
||
854 | C:0016d3 2f0b MOV DATA,XH |
||
855 | C:0016d4 2b0a OR DATA,XL |
||
856 | C:0016d5 f019 BREQ RDFAT03 |
||
857 | C:0016d6 e100 LDI DATA,$10 |
||
858 | C:0016d7 d315 RCALL BCDE_A |
||
859 | C:0016d8 01ed MOVW YL,XL ;это реализована формула |
||
860 | ;rootdirsectors = ( (bpb_rootentcnt*32)+(bpb_bytspersec-1) )/bpb_bytspersec |
||
861 | ;в Y rootdirsectors |
||
862 | ;если fat32, то Y=0 всегда |
||
863 | C:0016d9 93df RDFAT03:PUSH YH |
||
864 | C:0016da 93cf PUSH YL |
||
865 | C:0016db 8900 LDD DATA,Z+16 ;bpb_numfats |
||
866 | C:0016dc 9300 0501 STS MANYFAT,DATA |
||
867 | C:0016de + LDSX SEC_FAT+0 |
||
868 | C:0016de 91a0 0507 LDS XL,SEC_FAT+0 |
||
869 | C:0016e0 91b0 0508 LDS XH,SEC_FAT+0+1 |
||
870 | C:0016e2 + LDSY SEC_FAT+2 |
||
871 | C:0016e2 91c0 0509 LDS YL,SEC_FAT+2 |
||
872 | C:0016e4 91d0 050a LDS YH,SEC_FAT+2+1 |
||
873 | C:0016e6 950a DEC DATA |
||
874 | C:0016e7 0faa RDF031: LSL XL |
||
875 | C:0016e8 1fbb ROL XH |
||
876 | C:0016e9 1fcc ROL YL |
||
877 | C:0016ea 1fdd ROL YH |
||
878 | C:0016eb 950a DEC DATA |
||
879 | C:0016ec f7d1 BRNE RDF031 |
||
880 | C:0016ed 918f POP R24 |
||
881 | C:0016ee 919f POP R25 |
||
882 | ;полный размер fat-области в секторах |
||
883 | C:0016ef d316 RCALL HLDEPBC ;прибавили rootdirsectors |
||
884 | C:0016f0 8586 LDD R24,Z+14 |
||
885 | C:0016f1 8597 LDD R25,Z+15 ;bpb_rsvdseccnt |
||
886 | C:0016f2 9380 050b STS RSVDSEC+0,R24 |
||
887 | C:0016f4 9390 050c STS RSVDSEC+1,R25 |
||
888 | C:0016f6 d30f RCALL HLDEPBC ;прибавили bpb_resvdseccnt |
||
889 | C:0016f7 + STSX FRSTDAT+0 |
||
890 | C:0016f7 93a0 0511 STS FRSTDAT+0,XL |
||
891 | C:0016f9 93b0 0512 STS FRSTDAT+0+1,XH |
||
892 | C:0016fb + STSY FRSTDAT+2 ;положили номер первого сектора данных |
||
893 | C:0016fb 93c0 0513 STS FRSTDAT+2,YL |
||
894 | C:0016fd 93d0 0514 STS FRSTDAT+2+1,YH |
||
895 | C:0016ff + LDIZ SEC_DSC |
||
896 | C:0016ff e1e5 LDI ZL,LOW(SEC_DSC) |
||
897 | C:001700 e0f5 LDI ZH,HIGH(SEC_DSC) |
||
898 | C:001701 d2ee RCALL BCDEHLM ;вычли из полного к-ва секторов раздела |
||
899 | C:001702 + LDIZ BUF4FAT |
||
900 | C:001702 e0e0 LDI ZL,LOW(BUF4FAT) |
||
901 | C:001703 e0f3 LDI ZH,HIGH(BUF4FAT) |
||
902 | C:001704 8505 LDD DATA,Z+13 |
||
903 | C:001705 9300 0502 STS BYTSSEC,DATA |
||
904 | C:001707 d2e5 RCALL BCDE_A ;разделили на к-во секторов в кластере |
||
905 | C:001708 + STSX CLS_DSC+0 |
||
906 | C:001708 93a0 0519 STS CLS_DSC+0,XL |
||
907 | C:00170a 93b0 051a STS CLS_DSC+0+1,XH |
||
908 | C:00170c + STSY CLS_DSC+2 ;положили кол-во кластеров на разделе |
||
909 | C:00170c 93c0 051b STS CLS_DSC+2,YL |
||
910 | C:00170e 93d0 051c STS CLS_DSC+2+1,YH |
||
911 | |||
912 | C:001710 9100 0500 LDS DATA,CAL_FAT |
||
913 | C:001712 3f0f CPI DATA,$FF |
||
914 | C:001713 f519 BRNE RDFAT04 |
||
915 | C:001714 + LDSX CLS_DSC+0 |
||
916 | C:001714 91a0 0519 LDS XL,CLS_DSC+0 |
||
917 | C:001716 91b0 051a LDS XH,CLS_DSC+0+1 |
||
918 | C:001718 + LDSY CLS_DSC+2 |
||
919 | C:001718 91c0 051b LDS YL,CLS_DSC+2 |
||
920 | C:00171a 91d0 051c LDS YH,CLS_DSC+2+1 |
||
921 | C:00171c + PUSHY |
||
922 | C:00171c 93cf PUSH YL |
||
923 | C:00171d 93df PUSH YH |
||
924 | C:00171e + PUSHX |
||
925 | C:00171e 93af PUSH XL |
||
926 | C:00171f 93bf PUSH XH |
||
927 | C:001720 0faa LSL XL |
||
928 | C:001721 1fbb ROL XH |
||
929 | C:001722 1fcc ROL YL |
||
930 | C:001723 1fdd ROL YH |
||
931 | C:001724 d2e6 RCALL RASCHET |
||
932 | C:001725 e001 LDI DATA,1 |
||
933 | C:001726 + POPX |
||
934 | C:001726 91bf POP XH |
||
935 | C:001727 91af POP XL |
||
936 | C:001728 + POPY |
||
937 | C:001728 91df POP YH |
||
938 | C:001729 91cf POP YL |
||
939 | C:00172a f061 BREQ RDFAT04 |
||
940 | C:00172b 0faa LSL XL |
||
941 | C:00172c 1fbb ROL XH |
||
942 | C:00172d 1fcc ROL YL |
||
943 | C:00172e 1fdd ROL YH |
||
944 | C:00172f 0faa LSL XL |
||
945 | C:001730 1fbb ROL XH |
||
946 | C:001731 1fcc ROL YL |
||
947 | C:001732 1fdd ROL YH |
||
948 | C:001733 d2d7 RCALL RASCHET |
||
949 | C:001734 e002 LDI DATA,2 |
||
950 | C:001735 f009 BREQ RDFAT04 |
||
951 | C:001736 2700 CLR DATA |
||
952 | C:001737 9300 0500 RDFAT04:STS CAL_FAT,DATA |
||
953 | ;для fat12/16 вычисляем адрес первого сектора директории |
||
954 | ;для fat32 берем по смещемию +44 |
||
955 | ;на выходе YX == сектор rootdir |
||
956 | C:001739 + LDIX 0 |
||
957 | C:001739 e0a0 LDI XL,LOW(0) |
||
958 | C:00173a e0b0 LDI XH,HIGH(0) |
||
959 | C:00173b + LDIY 0 |
||
960 | C:00173b e0c0 LDI YL,LOW(0) |
||
961 | C:00173c e0d0 LDI YH,HIGH(0) |
||
962 | C:00173d 2300 TST DATA |
||
963 | C:00173e f031 BREQ FSRROO2 |
||
964 | C:00173f 950a DEC DATA |
||
965 | C:001740 f021 BREQ FSRROO2 |
||
966 | C:001741 a5a4 LDD XL,Z+44 |
||
967 | C:001742 a5b5 LDD XH,Z+45 |
||
968 | C:001743 a5c6 LDD YL,Z+46 |
||
969 | C:001744 a5d7 LDD YH,Z+47 |
||
970 | C:001745 + FSRROO2:STSX ROOTCLS+0 |
||
971 | C:001745 93a0 0503 STS ROOTCLS+0,XL |
||
972 | C:001747 93b0 0504 STS ROOTCLS+0+1,XH |
||
973 | C:001749 + STSY ROOTCLS+2 ;сектор root директории |
||
974 | C:001749 93c0 0505 STS ROOTCLS+2,YL |
||
975 | C:00174b 93d0 0506 STS ROOTCLS+2+1,YH |
||
976 | C:00174d + STSX TEK_DIR+0 |
||
977 | C:00174d 93a0 0525 STS TEK_DIR+0,XL |
||
978 | C:00174f 93b0 0526 STS TEK_DIR+0+1,XH |
||
979 | C:001751 + STSY TEK_DIR+2 |
||
980 | C:001751 93c0 0527 STS TEK_DIR+2,YL |
||
981 | C:001753 93d0 0528 STS TEK_DIR+2+1,YH |
||
982 | |||
983 | C:001755 + FSRR121:PUSHX |
||
984 | C:001755 93af PUSH XL |
||
985 | C:001756 93bf PUSH XH |
||
986 | C:001757 + PUSHY |
||
987 | C:001757 93cf PUSH YL |
||
988 | C:001758 93df PUSH YH |
||
989 | C:001759 + LDSX RSVDSEC |
||
990 | C:001759 91a0 050b LDS XL,RSVDSEC |
||
991 | C:00175b 91b0 050c LDS XH,RSVDSEC+1 |
||
992 | C:00175d + LDIY 0 |
||
993 | C:00175d e0c0 LDI YL,LOW(0) |
||
994 | C:00175e e0d0 LDI YH,HIGH(0) |
||
995 | C:00175f + LDIZ STARTRZ |
||
996 | C:00175f e0ed LDI ZL,LOW(STARTRZ) |
||
997 | C:001760 e0f5 LDI ZH,HIGH(STARTRZ) |
||
998 | C:001761 d29b RCALL BCDEHLP |
||
999 | C:001762 + STSX FATSTR0+0 |
||
1000 | C:001762 93a0 051d STS FATSTR0+0,XL |
||
1001 | C:001764 93b0 051e STS FATSTR0+0+1,XH |
||
1002 | C:001766 + STSY FATSTR0+2 |
||
1003 | C:001766 93c0 051f STS FATSTR0+2,YL |
||
1004 | C:001768 93d0 0520 STS FATSTR0+2+1,YH |
||
1005 | C:00176a + LDIZ SEC_FAT |
||
1006 | C:00176a e0e7 LDI ZL,LOW(SEC_FAT) |
||
1007 | C:00176b e0f5 LDI ZH,HIGH(SEC_FAT) |
||
1008 | C:00176c d290 RCALL BCDEHLP |
||
1009 | C:00176d + STSX FATSTR1+0 |
||
1010 | C:00176d 93a0 0521 STS FATSTR1+0,XL |
||
1011 | C:00176f 93b0 0522 STS FATSTR1+0+1,XH |
||
1012 | C:001771 + STSY FATSTR1+2 |
||
1013 | C:001771 93c0 0523 STS FATSTR1+2,YL |
||
1014 | C:001773 93d0 0524 STS FATSTR1+2+1,YH |
||
1015 | C:001775 + POPY |
||
1016 | C:001775 91df POP YH |
||
1017 | C:001776 91cf POP YL |
||
1018 | C:001777 + POPX |
||
1019 | C:001777 91bf POP XH |
||
1020 | C:001778 91af POP XL |
||
1021 | |||
1022 | C:001779 e011 LDI TEMP,1 |
||
1023 | C:00177a 2e0a MOV R0,XL |
||
1024 | C:00177b 2a0b OR R0,XH |
||
1025 | C:00177c 2a0c OR R0,YL |
||
1026 | C:00177d 2a0d OR R0,YH |
||
1027 | C:00177e f039 BREQ LASTCLS |
||
1028 | C:00177f 931f NEXTCLS:PUSH TEMP |
||
1029 | C:001780 d1e4 RCALL RDFATZP |
||
1030 | C:001781 d1d1 RCALL LST_CLS |
||
1031 | C:001782 911f POP TEMP |
||
1032 | C:001783 f410 BRCC LASTCLS |
||
1033 | C:001784 9513 INC TEMP |
||
1034 | C:001785 cff9 RJMP NEXTCLS |
||
1035 | C:001786 9310 0529 LASTCLS:STS KCLSDIR,TEMP |
||
1036 | C:001788 + LDIY 0 |
||
1037 | C:001788 e0c0 LDI YL,LOW(0) |
||
1038 | C:001789 e0d0 LDI YH,HIGH(0) |
||
1039 | C:00178a d192 RCALL RDDIRSC |
||
1040 | ; |
||
1041 | ; - - - - - - - - - - - - - - - - - - - |
||
1042 | ;поиск файла в директории |
||
1043 | C:00178b + LDIY 0 ;номер описателя файла |
||
1044 | C:00178b e0c0 LDI YL,LOW(0) |
||
1045 | C:00178c e0d0 LDI YH,HIGH(0) |
||
1046 | C:00178d c006 RJMP FNDMP32 |
||
1047 | |||
1048 | C:00178e 9621 FNDMP31:ADIW YL,1 ;номер++ ─────────┐ |
||
1049 | C:00178f 96b0 ADIW ZL,$20 ;следующий описатель │ |
||
1050 | C:001790 30f5 CPI ZH,HIGH(BUF4FAT+512); │ |
||
1051 | ;вылезли за сектор? │ |
||
1052 | C:001791 f411 BRNE FNDMP32 ;нет ещё │ |
||
1053 | C:001792 d18a RCALL RDDIRSC ;считываем следующий │ |
||
1054 | C:001793 f4b9 BRNE FNDMP37 ;кончились сектора в директории ═│═╗ |
||
1055 | C:001794 8503 FNDMP32:LDD DATA,Z+$0B ;атрибуты │ ║ |
||
1056 | C:001795 fd03 SBRC DATA,3 ;длиное имя/имя диска? │ ║ |
||
1057 | C:001796 cff7 RJMP FNDMP31 ;да ────────────────────────────┤ ║ |
||
1058 | C:001797 fd04 SBRC DATA,4 ;директория? │ ║ |
||
1059 | C:001798 cff5 RJMP FNDMP31 ;да ────────────────────────────┤ ║ |
||
1060 | C:001799 8100 LD DATA,Z ;первый символ │ ║ |
||
1061 | C:00179a 3e05 CPI DATA,$E5 ;удалённый файл? │ ║ |
||
1062 | C:00179b f391 BREQ FNDMP31 ;да ────────────────────────────┘ ║ |
||
1063 | C:00179c 2300 TST DATA ;пустой описатель? (конец списка) ╚═ в этой директории |
||
1064 | C:00179d f069 BREQ FNDMP37 ;да ═════════════════════════════════ нет нашёго файла |
||
1065 | C:00179e 93ef PUSH ZL |
||
1066 | C:00179f 01df MOVW XL,ZL |
||
1067 | C:0017a0 + LDIZ FILENAME*2 |
||
1068 | C:0017a0 eaec LDI ZL,LOW(FILENAME*2) |
||
1069 | C:0017a1 e0f1 LDI ZH,HIGH(FILENAME*2) |
||
1070 | C:0017a2 9105 DALSHE: LPM DATA,Z+ |
||
1071 | C:0017a3 2300 TST DATA |
||
1072 | C:0017a4 f041 BREQ NASHEL |
||
1073 | C:0017a5 911d LD TEMP,X+ |
||
1074 | C:0017a6 1701 CP DATA,TEMP |
||
1075 | C:0017a7 f3d1 BREQ DALSHE |
||
1076 | ;не совпало |
||
1077 | C:0017a8 2ffb MOV ZH,XH |
||
1078 | C:0017a9 91ef POP ZL |
||
1079 | C:0017aa cfe3 RJMP FNDMP31 |
||
1080 | ;нет такого файла |
||
1081 | FNDMP37: |
||
1082 | C:0017ab e004 LDI DATA,4 ;нет файла |
||
1083 | C:0017ac c2ca RJMP SD_ERROR |
||
1084 | ;найден описатель |
||
1085 | C:0017ad 2ffb NASHEL: MOV ZH,XH |
||
1086 | C:0017ae 91ef POP ZL |
||
1087 | ; |
||
1088 | ; - - - - - - - - - - - - - - - - - - - |
||
1089 | ;инициализация переменных |
||
1090 | ;для последующего чтения файла |
||
1091 | ;Z указывает на описатель файла |
||
1092 | C:0017af 8da2 LDD XL,Z+$1A |
||
1093 | C:0017b0 8db3 LDD XH,Z+$1B |
||
1094 | C:0017b1 89c4 LDD YL,Z+$14 |
||
1095 | C:0017b2 89d5 LDD YH,Z+$15 ;считали номер первого кластера файла |
||
1096 | C:0017b3 + STSX TFILCLS+0 |
||
1097 | C:0017b3 93a0 052b STS TFILCLS+0,XL |
||
1098 | C:0017b5 93b0 052c STS TFILCLS+0+1,XH |
||
1099 | C:0017b7 + STSY TFILCLS+2 |
||
1100 | C:0017b7 93c0 052d STS TFILCLS+2,YL |
||
1101 | C:0017b9 93d0 052e STS TFILCLS+2+1,YH |
||
1102 | C:0017bb + STSX ZTFILCLS+0 |
||
1103 | C:0017bb 93a0 0534 STS ZTFILCLS+0,XL |
||
1104 | C:0017bd 93b0 0535 STS ZTFILCLS+0+1,XH |
||
1105 | C:0017bf + STSY ZTFILCLS+2 |
||
1106 | C:0017bf 93c0 0536 STS ZTFILCLS+2,YL |
||
1107 | C:0017c1 93d0 0537 STS ZTFILCLS+2+1,YH |
||
1108 | C:0017c3 8da4 LDD XL,Z+$1C |
||
1109 | C:0017c4 8db5 LDD XH,Z+$1D |
||
1110 | C:0017c5 8dc6 LDD YL,Z+$1E |
||
1111 | C:0017c6 8dd7 LDD YH,Z+$1F ;считали длину файла |
||
1112 | |||
1113 | C:0017c7 2f0a MOV DATA,XL |
||
1114 | C:0017c8 2b0b OR DATA,XH |
||
1115 | C:0017c9 2b0c OR DATA,YL |
||
1116 | C:0017ca 2b0d OR DATA,YH |
||
1117 | C:0017cb f411 BRNE F01 |
||
1118 | C:0017cc e005 LDI DATA,5 ;пустой файл |
||
1119 | C:0017cd c2a9 RJMP SD_ERROR |
||
1120 | F01: |
||
1121 | C:0017ce e008 LDI DATA,$08 |
||
1122 | C:0017cf 15ae CP XL,ONE |
||
1123 | C:0017d0 05bf CPC XH,NULL |
||
1124 | C:0017d1 07c0 CPC YL,DATA |
||
1125 | C:0017d2 05df CPC YH,NULL |
||
1126 | C:0017d3 f010 BRCS F02 |
||
1127 | C:0017d4 e005 LDI DATA,5 ;большой файл |
||
1128 | C:0017d5 c2a1 RJMP SD_ERROR |
||
1129 | F02: |
||
1130 | C:0017d6 ef8f LDI R24,LOW(511) |
||
1131 | C:0017d7 e091 LDI R25,HIGH(511) |
||
1132 | C:0017d8 d22d RCALL HLDEPBC |
||
1133 | C:0017d9 d20a RCALL BCDE200 ;получили кол-во секторов |
||
1134 | C:0017da 9711 SBIW XL,1 |
||
1135 | C:0017db 09cf SBC YL,NULL |
||
1136 | C:0017dc 09df SBC YH,NULL |
||
1137 | C:0017dd 9100 0502 LDS DATA,BYTSSEC |
||
1138 | C:0017df 950a DEC DATA |
||
1139 | C:0017e0 230a AND DATA,XL |
||
1140 | C:0017e1 9503 INC DATA |
||
1141 | C:0017e2 9300 052f STS MPHWOST,DATA ;кол-во секторов в последнем кластере |
||
1142 | C:0017e4 9300 0538 STS ZMPHWOST,DATA |
||
1143 | C:0017e6 9100 0502 LDS DATA,BYTSSEC |
||
1144 | C:0017e8 d204 RCALL BCDE_A |
||
1145 | C:0017e9 + STSX KOL_CLS+0 |
||
1146 | C:0017e9 93a0 0530 STS KOL_CLS+0,XL |
||
1147 | C:0017eb 93b0 0531 STS KOL_CLS+0+1,XH |
||
1148 | C:0017ed + STSY KOL_CLS+2 |
||
1149 | C:0017ed 93c0 0532 STS KOL_CLS+2,YL |
||
1150 | C:0017ef 93d0 0533 STS KOL_CLS+2+1,YH |
||
1151 | C:0017f1 + STSX ZKOL_CLS+0 |
||
1152 | C:0017f1 93a0 0539 STS ZKOL_CLS+0,XL |
||
1153 | C:0017f3 93b0 053a STS ZKOL_CLS+0+1,XH |
||
1154 | C:0017f5 + STSY ZKOL_CLS+2 |
||
1155 | C:0017f5 93c0 053b STS ZKOL_CLS+2,YL |
||
1156 | C:0017f7 93d0 053c STS ZKOL_CLS+2+1,YH |
||
1157 | C:0017f9 92f0 052a STS NUMSECK,NULL |
||
1158 | ; - - - - - - - - - - - - - - - - - - - |
||
1159 | ;всё нормально, начинаем |
||
1160 | ;стирание |
||
1161 | C:0017fb d350 RCALL UART_NEWLINE |
||
1162 | C:0017fc e0a0 LDI XL,0 |
||
1163 | C:0017fd e0b4 LDI XH,4 |
||
1164 | C:0017fe d355 RCALL SET_CURSOR |
||
1165 | C:0017ff + LDIZ MSG_F_ERASE*2 |
||
1166 | C:0017ff e4e4 LDI ZL,LOW(MSG_F_ERASE*2) |
||
1167 | C:001800 e0f1 LDI ZH,HIGH(MSG_F_ERASE*2) |
||
1168 | C:001801 d35e RCALL PRINTSTRZ |
||
1169 | C:001802 d2ef RCALL F_ERASE |
||
1170 | ;запись |
||
1171 | C:001803 d348 RCALL UART_NEWLINE |
||
1172 | C:001804 e0a0 LDI XL,0 |
||
1173 | C:001805 e0b5 LDI XH,5 |
||
1174 | C:001806 d34d RCALL SET_CURSOR |
||
1175 | C:001807 + LDIZ MSG_F_WRITE*2 |
||
1176 | C:001807 e4ee LDI ZL,LOW(MSG_F_WRITE*2) |
||
1177 | C:001808 e0f1 LDI ZH,HIGH(MSG_F_WRITE*2) |
||
1178 | C:001809 d356 RCALL PRINTSTRZ |
||
1179 | C:00180a e0a0 LDI XL,0 |
||
1180 | C:00180b e1b0 LDI XH,16 |
||
1181 | C:00180c d347 RCALL SET_CURSOR |
||
1182 | C:00180d e001 LDI DATA,$01 ;"░" |
||
1183 | C:00180e e414 LDI TEMP,SCR_CHAR |
||
1184 | C:00180f d330 RCALL FPGA_REG |
||
1185 | C:001810 ef1f LDI TEMP,$FF |
||
1186 | C:001811 + FCHXY1: SPICS_CLR |
||
1187 | C:001811 98c0 CBI PORTB,0 |
||
1188 | C:001812 + SPICS_SET |
||
1189 | C:001812 9ac0 SBI PORTB,0 |
||
1190 | C:001813 951a DEC TEMP |
||
1191 | C:001814 f7e1 BRNE FCHXY1 |
||
1192 | C:001815 e0a0 LDI XL,0 |
||
1193 | C:001816 e1b0 LDI XH,16 |
||
1194 | C:001817 d33c RCALL SET_CURSOR |
||
1195 | |||
1196 | C:001818 92f0 053f STS F_ADDR0,NULL |
||
1197 | C:00181a 92f0 0540 STS F_ADDR1,NULL |
||
1198 | C:00181c 92f0 0541 STS F_ADDR2,NULL |
||
1199 | |||
1200 | C:00181e d1f6 F13: RCALL NEXTSEC |
||
1201 | C:00181f 9300 053e STS LASTSECFLAG,DATA |
||
1202 | |||
1203 | C:001821 + LDIZ BUFFER |
||
1204 | C:001821 e0e0 LDI ZL,LOW(BUFFER) |
||
1205 | C:001822 e0f1 LDI ZH,HIGH(BUFFER) |
||
1206 | C:001823 91a0 053f LDS XL,F_ADDR0 |
||
1207 | C:001825 91b0 0540 LDS XH,F_ADDR1 |
||
1208 | C:001827 91c0 0541 LDS YL,F_ADDR2 |
||
1209 | |||
1210 | C:001829 d2a8 F11: RCALL F_WRITE |
||
1211 | C:00182a 9611 ADIW XL,1 |
||
1212 | C:00182b 1dcf ADC YL,NULL |
||
1213 | C:00182c 9631 ADIW ZL,1 |
||
1214 | C:00182d 30f3 CPI ZH,HIGH(BUFFER+512) |
||
1215 | C:00182e f7d1 BRNE F11 |
||
1216 | |||
1217 | C:00182f + LED_OFF |
||
1218 | C:00182f 9ac7 SBI PORTB,7 |
||
1219 | C:001830 fdb1 SBRC XH,1 |
||
1220 | C:001831 + LED_ON ;мигать при программировании |
||
1221 | C:001831 98c7 CBI PORTB,7 |
||
1222 | |||
1223 | C:001832 93a0 053f STS F_ADDR0,XL |
||
1224 | C:001834 93b0 0540 STS F_ADDR1,XH |
||
1225 | C:001836 93c0 0541 STS F_ADDR2,YL |
||
1226 | |||
1227 | C:001838 30a0 CPI XL,$00 |
||
1228 | C:001839 f431 BRNE F12 |
||
1229 | C:00183a 2f0b MOV DATA,XH |
||
1230 | C:00183b 7007 ANDI DATA,$07 |
||
1231 | C:00183c f419 BRNE F12 |
||
1232 | C:00183d e002 LDI DATA,$02 ;"▒" |
||
1233 | C:00183e e414 LDI TEMP,SCR_CHAR |
||
1234 | C:00183f d300 RCALL FPGA_REG |
||
1235 | F12: |
||
1236 | C:001840 9100 053e LDS DATA,LASTSECFLAG |
||
1237 | C:001842 2300 TST DATA |
||
1238 | C:001843 f6d1 BRNE F13 |
||
1239 | ;проверка |
||
1240 | C:001844 d2bb RCALL F_RST |
||
1241 | C:001845 ef14 LDI TEMP,FLASH_CTRL |
||
1242 | C:001846 e003 LDI DATA,0B00000011 |
||
1243 | C:001847 d2f8 RCALL FPGA_REG |
||
1244 | C:001848 d303 RCALL UART_NEWLINE |
||
1245 | C:001849 e0a0 LDI XL,0 |
||
1246 | C:00184a e0b6 LDI XH,6 |
||
1247 | C:00184b d308 RCALL SET_CURSOR |
||
1248 | C:00184c + LDIZ MSG_F_CHECK*2 |
||
1249 | C:00184c e5e8 LDI ZL,LOW(MSG_F_CHECK*2) |
||
1250 | C:00184d e0f1 LDI ZH,HIGH(MSG_F_CHECK*2) |
||
1251 | C:00184e d311 RCALL PRINTSTRZ |
||
1252 | C:00184f e0a0 LDI XL,0 |
||
1253 | C:001850 e1b0 LDI XH,16 |
||
1254 | C:001851 d302 RCALL SET_CURSOR |
||
1255 | |||
1256 | C:001852 + LDSX ZTFILCLS+0 |
||
1257 | C:001852 91a0 0534 LDS XL,ZTFILCLS+0 |
||
1258 | C:001854 91b0 0535 LDS XH,ZTFILCLS+0+1 |
||
1259 | C:001856 + LDSY ZTFILCLS+2 |
||
1260 | C:001856 91c0 0536 LDS YL,ZTFILCLS+2 |
||
1261 | C:001858 91d0 0537 LDS YH,ZTFILCLS+2+1 |
||
1262 | C:00185a + STSX TFILCLS+0 |
||
1263 | C:00185a 93a0 052b STS TFILCLS+0,XL |
||
1264 | C:00185c 93b0 052c STS TFILCLS+0+1,XH |
||
1265 | C:00185e + STSY TFILCLS+2 |
||
1266 | C:00185e 93c0 052d STS TFILCLS+2,YL |
||
1267 | C:001860 93d0 052e STS TFILCLS+2+1,YH |
||
1268 | C:001862 9100 0538 LDS DATA,ZMPHWOST |
||
1269 | C:001864 9300 052f STS MPHWOST,DATA |
||
1270 | C:001866 + LDSX ZKOL_CLS+0 |
||
1271 | C:001866 91a0 0539 LDS XL,ZKOL_CLS+0 |
||
1272 | C:001868 91b0 053a LDS XH,ZKOL_CLS+0+1 |
||
1273 | C:00186a + LDSY ZKOL_CLS+2 |
||
1274 | C:00186a 91c0 053b LDS YL,ZKOL_CLS+2 |
||
1275 | C:00186c 91d0 053c LDS YH,ZKOL_CLS+2+1 |
||
1276 | C:00186e + STSX KOL_CLS+0 |
||
1277 | C:00186e 93a0 0530 STS KOL_CLS+0,XL |
||
1278 | C:001870 93b0 0531 STS KOL_CLS+0+1,XH |
||
1279 | C:001872 + STSY KOL_CLS+2 |
||
1280 | C:001872 93c0 0532 STS KOL_CLS+2,YL |
||
1281 | C:001874 93d0 0533 STS KOL_CLS+2+1,YH |
||
1282 | C:001876 92f0 052a STS NUMSECK,NULL |
||
1283 | C:001878 92f0 0542 STS ERRFLG1,NULL |
||
1284 | C:00187a 92f0 0543 STS ERRFLG2,NULL |
||
1285 | ; |
||
1286 | C:00187c 92f0 053f STS F_ADDR0,NULL |
||
1287 | C:00187e 92f0 0540 STS F_ADDR1,NULL |
||
1288 | C:001880 92f0 0541 STS F_ADDR2,NULL |
||
1289 | |||
1290 | C:001882 d192 F25: RCALL NEXTSEC |
||
1291 | C:001883 9300 053e STS LASTSECFLAG,DATA |
||
1292 | C:001885 + LDIZ BUFFER |
||
1293 | C:001885 e0e0 LDI ZL,LOW(BUFFER) |
||
1294 | C:001886 e0f1 LDI ZH,HIGH(BUFFER) |
||
1295 | C:001887 91a0 053f LDS XL,F_ADDR0 |
||
1296 | C:001889 91b0 0540 LDS XH,F_ADDR1 |
||
1297 | C:00188b 91c0 0541 LDS YL,F_ADDR2 |
||
1298 | |||
1299 | C:00188d d2a6 F21: RCALL F_IN |
||
1300 | C:00188e 9111 LD TEMP,Z+ |
||
1301 | C:00188f 1701 CP DATA,TEMP |
||
1302 | C:001890 f011 BREQ F26 |
||
1303 | C:001891 92e0 0542 STS ERRFLG1,ONE |
||
1304 | C:001893 9611 F26: ADIW XL,1 |
||
1305 | C:001894 1dcf ADC YL,NULL |
||
1306 | C:001895 30f3 CPI ZH,HIGH(BUFFER+512) |
||
1307 | C:001896 f7b1 BRNE F21 |
||
1308 | |||
1309 | C:001897 + LED_OFF |
||
1310 | C:001897 9ac7 SBI PORTB,7 |
||
1311 | C:001898 fdb3 SBRC XH,3 |
||
1312 | C:001899 + LED_ON ;мигать при проверке |
||
1313 | C:001899 98c7 CBI PORTB,7 |
||
1314 | |||
1315 | C:00189a 93a0 053f STS F_ADDR0,XL |
||
1316 | C:00189c 93b0 0540 STS F_ADDR1,XH |
||
1317 | C:00189e 93c0 0541 STS F_ADDR2,YL |
||
1318 | |||
1319 | C:0018a0 30a0 CPI XL,$00 |
||
1320 | C:0018a1 f481 BRNE F22 |
||
1321 | C:0018a2 2f0b MOV DATA,XH |
||
1322 | C:0018a3 7007 ANDI DATA,$07 |
||
1323 | C:0018a4 f469 BRNE F22 |
||
1324 | C:0018a5 9110 0542 LDS TEMP,ERRFLG1 |
||
1325 | C:0018a7 2311 TST TEMP |
||
1326 | C:0018a8 f031 BREQ F23 |
||
1327 | C:0018a9 92e0 0543 STS ERRFLG2,ONE |
||
1328 | C:0018ab 92f0 0542 STS ERRFLG1,NULL |
||
1329 | C:0018ad e508 LDI DATA,$58 ;"X" |
||
1330 | C:0018ae c001 RJMP F24 |
||
1331 | C:0018af e003 F23: LDI DATA,$03 ;"█" |
||
1332 | C:0018b0 e414 F24: LDI TEMP,SCR_CHAR |
||
1333 | C:0018b1 d28e RCALL FPGA_REG |
||
1334 | F22: |
||
1335 | C:0018b2 9100 053e LDS DATA,LASTSECFLAG |
||
1336 | C:0018b4 2300 TST DATA |
||
1337 | C:0018b5 f661 BRNE F25 |
||
1338 | ;стоп |
||
1339 | C:0018b6 + LED_OFF |
||
1340 | C:0018b6 9ac7 SBI PORTB,7 |
||
1341 | C:0018b7 d294 RCALL UART_NEWLINE |
||
1342 | C:0018b8 e0a0 LDI XL,0 |
||
1343 | C:0018b9 e0b7 LDI XH,7 |
||
1344 | C:0018ba d299 RCALL SET_CURSOR |
||
1345 | C:0018bb + LDIZ MSG_F_ERROR*2 |
||
1346 | C:0018bb e7ea LDI ZL,LOW(MSG_F_ERROR*2) |
||
1347 | C:0018bc e0f1 LDI ZH,HIGH(MSG_F_ERROR*2) |
||
1348 | C:0018bd 9110 0543 LDS TEMP,ERRFLG2 |
||
1349 | C:0018bf 2311 TST TEMP |
||
1350 | C:0018c0 f411 BRNE F91 |
||
1351 | C:0018c1 + LDIZ MSG_F_COMPLETE*2 |
||
1352 | C:0018c1 e6e2 LDI ZL,LOW(MSG_F_COMPLETE*2) |
||
1353 | C:0018c2 e0f1 LDI ZH,HIGH(MSG_F_COMPLETE*2) |
||
1354 | C:0018c3 d29c F91: RCALL PRINTSTRZ |
||
1355 | C:0018c4 d287 RCALL UART_NEWLINE |
||
1356 | C:0018c5 e0a0 LDI XL,0 |
||
1357 | C:0018c6 e0b9 LDI XH,9 |
||
1358 | C:0018c7 d28c RCALL SET_CURSOR |
||
1359 | C:0018c8 + LDIZ MSG_HALT*2 |
||
1360 | C:0018c8 e8e2 LDI ZL,LOW(MSG_HALT*2) |
||
1361 | C:0018c9 e0f1 LDI ZH,HIGH(MSG_HALT*2) |
||
1362 | C:0018ca d295 RCALL PRINTSTRZ |
||
1363 | C:0018cb 9816 CBI DDRE,6 |
||
1364 | C:0018cc cfff STOP1: RJMP STOP1 |
||
1365 | |||
1366 | ; |
||
1367 | ;-------------------------------------- |
||
1368 | ;out: DATA |
||
1369 | SD_RECEIVE: |
||
1370 | C:0018cd ef0f SER DATA |
||
1371 | ; - - - - - - - - - - - - - - - - - - - |
||
1372 | ;in: DATA |
||
1373 | ;out: DATA |
||
1374 | SD_EXCHANGE: |
||
1375 | C:0018ce c276 RJMP FPGA_SAME_REG |
||
1376 | ; |
||
1377 | ;-------------------------------------- |
||
1378 | ;in; TEMP - n |
||
1379 | SD_RD_DUMMY: |
||
1380 | C:0018cf ef0f SER DATA |
||
1381 | C:0018d0 dffd RCALL SD_EXCHANGE |
||
1382 | C:0018d1 951a DEC TEMP |
||
1383 | C:0018d2 f7e1 BRNE SD_RD_DUMMY |
||
1384 | C:0018d3 9508 RET |
||
1385 | ; |
||
1386 | ;-------------------------------------- |
||
1387 | ;in: Z |
||
1388 | SD_WR_PGM_6: |
||
1389 | C:0018d4 e012 LDI TEMP,2 |
||
1390 | C:0018d5 dff9 RCALL SD_RD_DUMMY |
||
1391 | C:0018d6 e016 LDI TEMP,6 |
||
1392 | SD_WR_PGX: |
||
1393 | C:0018d7 9105 SDWRP61:LPM DATA,Z+ |
||
1394 | C:0018d8 dff5 RCALL SD_EXCHANGE |
||
1395 | C:0018d9 951a DEC TEMP |
||
1396 | C:0018da f7e1 BRNE SDWRP61 |
||
1397 | ; - - - - - - - - - - - - - - - - - - - |
||
1398 | ;out: DATA |
||
1399 | SD_WAIT_NOTFF: |
||
1400 | C:0018db e210 LDI TEMP,32 |
||
1401 | C:0018dc ef0f SDWNFF2:SER DATA |
||
1402 | C:0018dd dff0 RCALL SD_EXCHANGE |
||
1403 | C:0018de 3f0f CPI DATA,$FF |
||
1404 | C:0018df f411 BRNE SDWNFF1 |
||
1405 | C:0018e0 951a DEC TEMP |
||
1406 | C:0018e1 f7d1 BRNE SDWNFF2 |
||
1407 | C:0018e2 9508 SDWNFF1:RET |
||
1408 | ; |
||
1409 | ;-------------------------------------- |
||
1410 | ;in: Z - куда |
||
1411 | ; Y,X - №сектора |
||
1412 | SD_READ_SECTOR: |
||
1413 | C:0018e3 + PUSHZ |
||
1414 | C:0018e3 93ef PUSH ZL |
||
1415 | C:0018e4 93ff PUSH ZH |
||
1416 | C:0018e5 + LDIZ CMD58*2 |
||
1417 | C:0018e5 eae0 LDI ZL,LOW(CMD58*2) |
||
1418 | C:0018e6 e0f1 LDI ZH,HIGH(CMD58*2) |
||
1419 | C:0018e7 dfec RCALL SD_WR_PGM_6 |
||
1420 | C:0018e8 dfe4 RCALL SD_RECEIVE |
||
1421 | C:0018e9 fd06 SBRC DATA,6 |
||
1422 | C:0018ea c007 RJMP SDRDSE1 |
||
1423 | C:0018eb 0faa LSL XL |
||
1424 | C:0018ec 1fbb ROL XH |
||
1425 | C:0018ed 1fcc ROL YL |
||
1426 | C:0018ee 2fdc MOV YH,YL |
||
1427 | C:0018ef 2fcb MOV YL,XH |
||
1428 | C:0018f0 2fba MOV XH,XL |
||
1429 | C:0018f1 27aa CLR XL |
||
1430 | SDRDSE1: |
||
1431 | C:0018f2 e015 LDI TEMP,3+2 |
||
1432 | C:0018f3 dfdb RCALL SD_RD_DUMMY |
||
1433 | |||
1434 | C:0018f4 e501 LDI DATA,CMD_17 |
||
1435 | C:0018f5 dfd8 RCALL SD_EXCHANGE |
||
1436 | C:0018f6 2f0d MOV DATA,YH |
||
1437 | C:0018f7 dfd6 RCALL SD_EXCHANGE |
||
1438 | C:0018f8 2f0c MOV DATA,YL |
||
1439 | C:0018f9 dfd4 RCALL SD_EXCHANGE |
||
1440 | C:0018fa 2f0b MOV DATA,XH |
||
1441 | C:0018fb dfd2 RCALL SD_EXCHANGE |
||
1442 | C:0018fc 2f0a MOV DATA,XL |
||
1443 | C:0018fd dfd0 RCALL SD_EXCHANGE |
||
1444 | C:0018fe ef0f SER DATA |
||
1445 | C:0018ff dfce RCALL SD_EXCHANGE |
||
1446 | |||
1447 | C:001900 ef8f SER R24 |
||
1448 | C:001901 dfd9 SDRDSE2:RCALL SD_WAIT_NOTFF |
||
1449 | C:001902 958a DEC R24 |
||
1450 | C:001903 f069 BREQ SDRDSE8 |
||
1451 | C:001904 3f0e CPI DATA,$FE |
||
1452 | C:001905 f7d9 BRNE SDRDSE2 |
||
1453 | |||
1454 | C:001906 + POPZ |
||
1455 | C:001906 91ff POP ZH |
||
1456 | C:001907 91ef POP ZL |
||
1457 | C:001908 e080 LDI R24,$00 |
||
1458 | C:001909 e092 LDI R25,$02 |
||
1459 | C:00190a dfc2 SDRDSE3:RCALL SD_RECEIVE |
||
1460 | C:00190b 9301 ST Z+,DATA |
||
1461 | C:00190c 9701 SBIW R24,1 |
||
1462 | C:00190d f7e1 BRNE SDRDSE3 |
||
1463 | |||
1464 | C:00190e e012 LDI TEMP,2 |
||
1465 | C:00190f dfbf RCALL SD_RD_DUMMY |
||
1466 | ;SDRDSE4:RCALL SD_WAIT_NOTFF |
||
1467 | ; CPI DATA,$FF |
||
1468 | ; BRNE SDRDSE4 |
||
1469 | C:001910 9508 RET |
||
1470 | |||
1471 | SDRDSE8: |
||
1472 | C:001911 e002 LDI DATA,2 ;ошибка при чтении сектора |
||
1473 | C:001912 c164 RJMP SD_ERROR |
||
1474 | ; |
||
1475 | ;-------------------------------------- |
||
1476 | ;чтение сектора данных |
||
1477 | LOAD_DATA: |
||
1478 | C:001913 + LDIZ BUFFER |
||
1479 | C:001913 e0e0 LDI ZL,LOW(BUFFER) |
||
1480 | C:001914 e0f1 LDI ZH,HIGH(BUFFER) |
||
1481 | C:001915 dfcd RCALL SD_READ_SECTOR ;читать один сектор |
||
1482 | C:001916 9508 RET |
||
1483 | ; |
||
1484 | ;-------------------------------------- |
||
1485 | ;чтение сектора служ.инф. (FAT/DIR/...) |
||
1486 | C:001917 + LOADLST:LDIZ BUF4FAT |
||
1487 | C:001917 e0e0 LDI ZL,LOW(BUF4FAT) |
||
1488 | C:001918 e0f3 LDI ZH,HIGH(BUF4FAT) |
||
1489 | C:001919 dfc9 RCALL SD_READ_SECTOR ;читать один сектор |
||
1490 | C:00191a + LDIZ BUF4FAT |
||
1491 | C:00191a e0e0 LDI ZL,LOW(BUF4FAT) |
||
1492 | C:00191b e0f3 LDI ZH,HIGH(BUF4FAT) |
||
1493 | C:00191c 9508 RET |
||
1494 | ; |
||
1495 | ;-------------------------------------- |
||
1496 | ;чтение сектора dir по номеру описателя (Y) |
||
1497 | ;на выходе: DATA=#ff (sreg.Z=0) выход за пределы dir |
||
1498 | C:00191d + RDDIRSC:PUSHY |
||
1499 | C:00191d 93cf PUSH YL |
||
1500 | C:00191e 93df PUSH YH |
||
1501 | C:00191f 01de MOVW XL,YL |
||
1502 | C:001920 + LDIY 0 |
||
1503 | C:001920 e0c0 LDI YL,LOW(0) |
||
1504 | C:001921 e0d0 LDI YH,HIGH(0) |
||
1505 | C:001922 e100 LDI DATA,$10 |
||
1506 | C:001923 d0c9 RCALL BCDE_A |
||
1507 | C:001924 93af PUSH XL |
||
1508 | C:001925 9100 0502 LDS DATA,BYTSSEC |
||
1509 | C:001927 930f PUSH DATA |
||
1510 | C:001928 d0c4 RCALL BCDE_A |
||
1511 | C:001929 9100 0529 LDS DATA,KCLSDIR |
||
1512 | C:00192b 950a DEC DATA |
||
1513 | C:00192c 170a CP DATA,XL |
||
1514 | C:00192d f438 BRCC RDDIRS3 |
||
1515 | C:00192e 91cf POP YL |
||
1516 | C:00192f 91cf POP YL |
||
1517 | C:001930 + POPY |
||
1518 | C:001930 91df POP YH |
||
1519 | C:001931 91cf POP YL |
||
1520 | C:001932 ef0f SER DATA |
||
1521 | C:001933 2300 TST DATA |
||
1522 | C:001934 9508 RET |
||
1523 | C:001935 + RDDIRS3:LDSY TEK_DIR+2 |
||
1524 | C:001935 91c0 0527 LDS YL,TEK_DIR+2 |
||
1525 | C:001937 91d0 0528 LDS YH,TEK_DIR+2+1 |
||
1526 | C:001939 2f0a MOV DATA,XL |
||
1527 | C:00193a 2300 TST DATA |
||
1528 | C:00193b + LDSX TEK_DIR+0 |
||
1529 | C:00193b 91a0 0525 LDS XL,TEK_DIR+0 |
||
1530 | C:00193d 91b0 0526 LDS XH,TEK_DIR+0+1 |
||
1531 | C:00193f f029 BREQ RDDIRS1 |
||
1532 | C:001940 930f RDDIRS2:PUSH DATA |
||
1533 | C:001941 d023 RCALL RDFATZP |
||
1534 | C:001942 910f POP DATA |
||
1535 | C:001943 950a DEC DATA |
||
1536 | C:001944 f7d9 BRNE RDDIRS2 |
||
1537 | C:001945 d07c RDDIRS1:RCALL REALSEC |
||
1538 | C:001946 900f POP R0 |
||
1539 | C:001947 940a DEC R0 |
||
1540 | C:001948 910f POP DATA |
||
1541 | C:001949 2100 AND DATA,R0 |
||
1542 | C:00194a 0fa0 ADD XL,DATA |
||
1543 | C:00194b 1dbf ADC XH,NULL |
||
1544 | C:00194c 1dcf ADC YL,NULL |
||
1545 | C:00194d 1ddf ADC YH,NULL |
||
1546 | C:00194e dfc8 RCALL LOADLST |
||
1547 | C:00194f + POPY |
||
1548 | C:00194f 91df POP YH |
||
1549 | C:001950 91cf POP YL |
||
1550 | C:001951 2700 CLR DATA |
||
1551 | C:001952 9508 RET |
||
1552 | ; |
||
1553 | ;-------------------------------------- |
||
1554 | ;out: sreg.C == CLR - EOCmark |
||
1555 | ;(chng: TEMP) |
||
1556 | C:001953 e01f LST_CLS:LDI TEMP,$0F |
||
1557 | C:001954 9100 0500 LDS DATA,CAL_FAT |
||
1558 | C:001956 2300 TST DATA |
||
1559 | C:001957 f419 BRNE LST_CL1 |
||
1560 | C:001958 3fa7 CPI XL,$F7 |
||
1561 | C:001959 07b1 CPC XH,TEMP |
||
1562 | C:00195a 9508 RET |
||
1563 | C:00195b 950a LST_CL1:DEC DATA |
||
1564 | C:00195c f419 BRNE LST_CL2 |
||
1565 | C:00195d 3fa7 CPI XL,$F7 |
||
1566 | C:00195e 05bd CPC XH,FF |
||
1567 | C:00195f 9508 RET |
||
1568 | C:001960 3fa7 LST_CL2:CPI XL,$F7 |
||
1569 | C:001961 05bd CPC XH,FF |
||
1570 | C:001962 05cd CPC YL,FF |
||
1571 | C:001963 07d1 CPC YH,TEMP |
||
1572 | C:001964 9508 RET |
||
1573 | ; |
||
1574 | ;-------------------------------------- |
||
1575 | ; |
||
1576 | C:001965 9100 0500 RDFATZP:LDS DATA,CAL_FAT |
||
1577 | C:001967 2300 TST DATA |
||
1578 | C:001968 f131 BREQ RDFATS0 ;FAT12 |
||
1579 | C:001969 950a DEC DATA |
||
1580 | C:00196a f071 BREQ RDFATS1 ;FAT16 |
||
1581 | ;FAT32 |
||
1582 | C:00196b 0faa LSL XL |
||
1583 | C:00196c 1fbb ROL XH |
||
1584 | C:00196d 1fcc ROL YL |
||
1585 | C:00196e 1fdd ROL YH |
||
1586 | C:00196f 2f0a MOV DATA,XL |
||
1587 | C:001970 2fab MOV XL,XH |
||
1588 | C:001971 2fbc MOV XH,YL |
||
1589 | C:001972 2fcd MOV YL,YH |
||
1590 | C:001973 27dd CLR YH |
||
1591 | C:001974 d009 RCALL RDFATS2 |
||
1592 | C:001975 9631 ADIW ZL,1 |
||
1593 | C:001976 91c1 LD YL,Z+ |
||
1594 | C:001977 81d0 LD YH,Z |
||
1595 | C:001978 9508 RET |
||
1596 | ;FAT16 |
||
1597 | C:001979 + RDFATS1:LDIY 0 |
||
1598 | C:001979 e0c0 LDI YL,LOW(0) |
||
1599 | C:00197a e0d0 LDI YH,HIGH(0) |
||
1600 | C:00197b 2f0a MOV DATA,XL |
||
1601 | C:00197c 2fab MOV XL,XH |
||
1602 | C:00197d 27bb CLR XH |
||
1603 | C:00197e 930f RDFATS2:PUSH DATA |
||
1604 | C:00197f + PUSHY |
||
1605 | C:00197f 93cf PUSH YL |
||
1606 | C:001980 93df PUSH YH |
||
1607 | C:001981 + LDIZ FATSTR0 |
||
1608 | C:001981 e1ed LDI ZL,LOW(FATSTR0) |
||
1609 | C:001982 e0f5 LDI ZH,HIGH(FATSTR0) |
||
1610 | C:001983 d079 RCALL BCDEHLP |
||
1611 | C:001984 df92 RCALL LOADLST |
||
1612 | C:001985 + POPY |
||
1613 | C:001985 91df POP YH |
||
1614 | C:001986 91cf POP YL |
||
1615 | C:001987 910f POP DATA |
||
1616 | C:001988 0fe0 ADD ZL,DATA |
||
1617 | C:001989 1dff ADC ZH,NULL |
||
1618 | C:00198a 0fe0 ADD ZL,DATA |
||
1619 | C:00198b 1dff ADC ZH,NULL |
||
1620 | C:00198c 91a1 LD XL,Z+ |
||
1621 | C:00198d 81b0 LD XH,Z |
||
1622 | C:00198e 9508 RET |
||
1623 | ;FAT12 |
||
1624 | C:00198f 01fd RDFATS0:MOVW ZL,XL |
||
1625 | C:001990 0fee LSL ZL |
||
1626 | C:001991 1fff ROL ZH |
||
1627 | C:001992 0fea ADD ZL,XL |
||
1628 | C:001993 1ffb ADC ZH,XH |
||
1629 | C:001994 95f6 LSR ZH |
||
1630 | C:001995 95e7 ROR ZL |
||
1631 | C:001996 2f0a MOV DATA,XL |
||
1632 | C:001997 2faf MOV XL,ZH |
||
1633 | C:001998 27bb CLR XH |
||
1634 | C:001999 27cc CLR YL |
||
1635 | C:00199a 27dd CLR YH |
||
1636 | C:00199b 95a6 LSR XL |
||
1637 | C:00199c 930f PUSH DATA |
||
1638 | C:00199d + PUSHZ |
||
1639 | C:00199d 93ef PUSH ZL |
||
1640 | C:00199e 93ff PUSH ZH |
||
1641 | C:00199f + LDIZ FATSTR0 |
||
1642 | C:00199f e1ed LDI ZL,LOW(FATSTR0) |
||
1643 | C:0019a0 e0f5 LDI ZH,HIGH(FATSTR0) |
||
1644 | C:0019a1 d05b RCALL BCDEHLP |
||
1645 | C:0019a2 df74 RCALL LOADLST |
||
1646 | C:0019a3 + POPY |
||
1647 | C:0019a3 91df POP YH |
||
1648 | C:0019a4 91cf POP YL |
||
1649 | C:0019a5 70d1 ANDI YH,$01 |
||
1650 | C:0019a6 0fec ADD ZL,YL |
||
1651 | C:0019a7 1ffd ADC ZH,YH |
||
1652 | C:0019a8 91c1 LD YL,Z+ |
||
1653 | C:0019a9 30f5 CPI ZH,HIGH(BUF4FAT+512) |
||
1654 | C:0019aa f431 BRNE RDFATS4 |
||
1655 | C:0019ab 93cf PUSH YL |
||
1656 | C:0019ac + LDIY 0 |
||
1657 | C:0019ac e0c0 LDI YL,LOW(0) |
||
1658 | C:0019ad e0d0 LDI YH,HIGH(0) |
||
1659 | C:0019ae 9611 ADIW XL,1 |
||
1660 | C:0019af df67 RCALL LOADLST |
||
1661 | C:0019b0 91cf POP YL |
||
1662 | C:0019b1 910f RDFATS4:POP DATA |
||
1663 | C:0019b2 81b0 LD XH,Z |
||
1664 | C:0019b3 2fac MOV XL,YL |
||
1665 | C:0019b4 + LDIY 0 |
||
1666 | C:0019b4 e0c0 LDI YL,LOW(0) |
||
1667 | C:0019b5 e0d0 LDI YH,HIGH(0) |
||
1668 | C:0019b6 9506 LSR DATA |
||
1669 | C:0019b7 f440 BRCC RDFATS3 |
||
1670 | C:0019b8 95b6 LSR XH |
||
1671 | C:0019b9 95a7 ROR XL |
||
1672 | C:0019ba 95b6 LSR XH |
||
1673 | C:0019bb 95a7 ROR XL |
||
1674 | C:0019bc 95b6 LSR XH |
||
1675 | C:0019bd 95a7 ROR XL |
||
1676 | C:0019be 95b6 LSR XH |
||
1677 | C:0019bf 95a7 ROR XL |
||
1678 | C:0019c0 70bf RDFATS3:ANDI XH,$0F |
||
1679 | C:0019c1 9508 RET |
||
1680 | ; |
||
1681 | ;-------------------------------------- |
||
1682 | ;вычисление реального сектора |
||
1683 | ;на входе YX==номер FAT |
||
1684 | ;на выходе YX==адрес сектора |
||
1685 | C:0019c2 2f0d REALSEC:MOV DATA,YH |
||
1686 | C:0019c3 2b0c OR DATA,YL |
||
1687 | C:0019c4 2b0b OR DATA,XH |
||
1688 | C:0019c5 2b0a OR DATA,XL |
||
1689 | C:0019c6 f459 BRNE REALSE1 |
||
1690 | C:0019c7 + LDIZ FATSTR1 |
||
1691 | C:0019c7 e2e1 LDI ZL,LOW(FATSTR1) |
||
1692 | C:0019c8 e0f5 LDI ZH,HIGH(FATSTR1) |
||
1693 | C:0019c9 + LDSX SEC_FAT+0 |
||
1694 | C:0019c9 91a0 0507 LDS XL,SEC_FAT+0 |
||
1695 | C:0019cb 91b0 0508 LDS XH,SEC_FAT+0+1 |
||
1696 | C:0019cd + LDSY SEC_FAT+2 |
||
1697 | C:0019cd 91c0 0509 LDS YL,SEC_FAT+2 |
||
1698 | C:0019cf 91d0 050a LDS YH,SEC_FAT+2+1 |
||
1699 | C:0019d1 c02b RJMP BCDEHLP |
||
1700 | C:0019d2 9712 REALSE1:SBIW XL,2 ;номер кластера-2 |
||
1701 | C:0019d3 09cf SBC YL,NULL |
||
1702 | C:0019d4 09df SBC YH,NULL |
||
1703 | C:0019d5 9100 0502 LDS DATA,BYTSSEC |
||
1704 | C:0019d7 c004 RJMP REALSE2 |
||
1705 | C:0019d8 0faa REALSE3:LSL XL |
||
1706 | C:0019d9 1fbb ROL XH |
||
1707 | C:0019da 1fcc ROL YL |
||
1708 | C:0019db 1fdd ROL YH |
||
1709 | C:0019dc 9506 REALSE2:LSR DATA |
||
1710 | C:0019dd f7d0 BRCC REALSE3 |
||
1711 | ;умножили на размер кластера |
||
1712 | C:0019de + LDIZ STARTRZ |
||
1713 | C:0019de e0ed LDI ZL,LOW(STARTRZ) |
||
1714 | C:0019df e0f5 LDI ZH,HIGH(STARTRZ) |
||
1715 | C:0019e0 d01c RCALL BCDEHLP ;прибавили смещение от начала диска |
||
1716 | C:0019e1 + LDIZ FRSTDAT |
||
1717 | C:0019e1 e1e1 LDI ZL,LOW(FRSTDAT) |
||
1718 | C:0019e2 e0f5 LDI ZH,HIGH(FRSTDAT) |
||
1719 | C:0019e3 c019 RJMP BCDEHLP ;прибавили смещение от начала раздела |
||
1720 | ; |
||
1721 | ;-------------------------------------- |
||
1722 | ;YX>>9 (деление на 512) |
||
1723 | C:0019e4 2fab BCDE200:MOV XL,XH |
||
1724 | C:0019e5 2fbc MOV XH,YL |
||
1725 | C:0019e6 2fcd MOV YL,YH |
||
1726 | C:0019e7 e0d0 LDI YH,0 |
||
1727 | C:0019e8 e001 LDI DATA,1 |
||
1728 | ; - - - - - - - - - - - - - - - - - - - |
||
1729 | ;YXDATA>>до"переноса" |
||
1730 | ;если в DATA вкл.только один бит, то получается |
||
1731 | ;YX=YX/DATA |
||
1732 | C:0019e9 95d6 BCDE_A1:LSR YH |
||
1733 | C:0019ea 95c7 ROR YL |
||
1734 | C:0019eb 95b7 ROR XH |
||
1735 | C:0019ec 95a7 ROR XL |
||
1736 | C:0019ed 9507 BCDE_A: ROR DATA |
||
1737 | C:0019ee f7d0 BRCC BCDE_A1 |
||
1738 | C:0019ef 9508 RET |
||
1739 | ; |
||
1740 | ;-------------------------------------- |
||
1741 | ;YX=[Z]-YX |
||
1742 | C:0019f0 9101 BCDEHLM:LD DATA,Z+ |
||
1743 | C:0019f1 1b0a SUB DATA,XL |
||
1744 | C:0019f2 2fa0 MOV XL,DATA |
||
1745 | C:0019f3 9101 LD DATA,Z+ |
||
1746 | C:0019f4 0b0b SBC DATA,XH |
||
1747 | C:0019f5 2fb0 MOV XH,DATA |
||
1748 | C:0019f6 9101 LD DATA,Z+ |
||
1749 | C:0019f7 0b0c SBC DATA,YL |
||
1750 | C:0019f8 2fc0 MOV YL,DATA |
||
1751 | C:0019f9 8100 LD DATA,Z |
||
1752 | C:0019fa 0b0d SBC DATA,YH |
||
1753 | C:0019fb 2fd0 MOV YH,DATA |
||
1754 | C:0019fc 9508 RET |
||
1755 | ; |
||
1756 | ;-------------------------------------- |
||
1757 | ;YX=YX+[Z] |
||
1758 | C:0019fd 9101 BCDEHLP:LD DATA,Z+ |
||
1759 | C:0019fe 0fa0 ADD XL,DATA |
||
1760 | C:0019ff 9101 LD DATA,Z+ |
||
1761 | C:001a00 1fb0 ADC XH,DATA |
||
1762 | C:001a01 9101 LD DATA,Z+ |
||
1763 | C:001a02 1fc0 ADC YL,DATA |
||
1764 | C:001a03 8100 LD DATA,Z |
||
1765 | C:001a04 1fd0 ADC YH,DATA |
||
1766 | C:001a05 9508 RET |
||
1767 | ; |
||
1768 | ;-------------------------------------- |
||
1769 | ;YX=YX+R25R24 |
||
1770 | C:001a06 0fa8 HLDEPBC:ADD XL,R24 |
||
1771 | C:001a07 1fb9 ADC XH,R25 |
||
1772 | C:001a08 1dcf ADC YL,NULL |
||
1773 | C:001a09 1ddf ADC YH,NULL |
||
1774 | C:001a0a 9508 RET |
||
1775 | ; |
||
1776 | ;-------------------------------------- |
||
1777 | ; |
||
1778 | C:001a0b dfd8 RASCHET:RCALL BCDE200 |
||
1779 | C:001a0c + LDIZ SEC_FAT |
||
1780 | C:001a0c e0e7 LDI ZL,LOW(SEC_FAT) |
||
1781 | C:001a0d e0f5 LDI ZH,HIGH(SEC_FAT) |
||
1782 | C:001a0e dfe1 RCALL BCDEHLM |
||
1783 | C:001a0f 2f0a MOV DATA,XL |
||
1784 | C:001a10 7f00 ANDI DATA,$F0 |
||
1785 | C:001a11 2b0b OR DATA,XH |
||
1786 | C:001a12 2b0c OR DATA,YL |
||
1787 | C:001a13 2b0d OR DATA,YH |
||
1788 | C:001a14 9508 RET |
||
1789 | ; |
||
1790 | ;-------------------------------------- |
||
1791 | ;чтение очередного сектора файла в BUFFER |
||
1792 | ;out: DATA == 0 - считан последний сектор файла |
||
1793 | NEXTSEC: |
||
1794 | C:001a15 e517 LDI TEMP,SD_CS0 |
||
1795 | C:001a16 ef0f SER DATA |
||
1796 | C:001a17 d128 RCALL FPGA_REG |
||
1797 | |||
1798 | C:001a18 + LDIZ KOL_CLS |
||
1799 | C:001a18 e3e0 LDI ZL,LOW(KOL_CLS) |
||
1800 | C:001a19 e0f5 LDI ZH,HIGH(KOL_CLS) |
||
1801 | C:001a1a 9101 LD DATA,Z+ |
||
1802 | C:001a1b 9111 LD TEMP,Z+ |
||
1803 | C:001a1c 2b01 OR DATA,TEMP |
||
1804 | C:001a1d 9111 LD TEMP,Z+ |
||
1805 | C:001a1e 2b01 OR DATA,TEMP |
||
1806 | C:001a1f 9111 LD TEMP,Z+ |
||
1807 | C:001a20 2b01 OR DATA,TEMP |
||
1808 | C:001a21 f1e1 BREQ LSTCLSF |
||
1809 | C:001a22 + LDSX TFILCLS+0 |
||
1810 | C:001a22 91a0 052b LDS XL,TFILCLS+0 |
||
1811 | C:001a24 91b0 052c LDS XH,TFILCLS+0+1 |
||
1812 | C:001a26 + LDSY TFILCLS+2 |
||
1813 | C:001a26 91c0 052d LDS YL,TFILCLS+2 |
||
1814 | C:001a28 91d0 052e LDS YH,TFILCLS+2+1 |
||
1815 | C:001a2a df97 RCALL REALSEC |
||
1816 | C:001a2b 9100 052a LDS DATA,NUMSECK |
||
1817 | C:001a2d 0fa0 ADD XL,DATA |
||
1818 | C:001a2e 1dbf ADC XH,NULL |
||
1819 | C:001a2f 1dcf ADC YL,NULL |
||
1820 | C:001a30 1ddf ADC YH,NULL |
||
1821 | C:001a31 dee1 RCALL LOAD_DATA |
||
1822 | C:001a32 + LDSX TFILCLS+0 |
||
1823 | C:001a32 91a0 052b LDS XL,TFILCLS+0 |
||
1824 | C:001a34 91b0 052c LDS XH,TFILCLS+0+1 |
||
1825 | C:001a36 + LDSY TFILCLS+2 |
||
1826 | C:001a36 91c0 052d LDS YL,TFILCLS+2 |
||
1827 | C:001a38 91d0 052e LDS YH,TFILCLS+2+1 |
||
1828 | C:001a3a 9100 052a LDS DATA,NUMSECK |
||
1829 | C:001a3c 9503 INC DATA |
||
1830 | C:001a3d 9300 052a STS NUMSECK,DATA |
||
1831 | C:001a3f 9110 0502 LDS TEMP,BYTSSEC |
||
1832 | C:001a41 1710 CP TEMP,DATA |
||
1833 | C:001a42 f4c9 BRNE NEXT_OK |
||
1834 | |||
1835 | C:001a43 92f0 052a STS NUMSECK,NULL |
||
1836 | C:001a45 df1f RCALL RDFATZP |
||
1837 | C:001a46 + STSX TFILCLS+0 |
||
1838 | C:001a46 93a0 052b STS TFILCLS+0,XL |
||
1839 | C:001a48 93b0 052c STS TFILCLS+0+1,XH |
||
1840 | C:001a4a + STSY TFILCLS+2 |
||
1841 | C:001a4a 93c0 052d STS TFILCLS+2,YL |
||
1842 | C:001a4c 93d0 052e STS TFILCLS+2+1,YH |
||
1843 | C:001a4e + LDIZ KOL_CLS |
||
1844 | C:001a4e e3e0 LDI ZL,LOW(KOL_CLS) |
||
1845 | C:001a4f e0f5 LDI ZH,HIGH(KOL_CLS) |
||
1846 | C:001a50 8100 LD DATA,Z |
||
1847 | C:001a51 5001 SUBI DATA,1 |
||
1848 | C:001a52 9301 ST Z+,DATA |
||
1849 | C:001a53 8100 LD DATA,Z |
||
1850 | C:001a54 090f SBC DATA,NULL |
||
1851 | C:001a55 9301 ST Z+,DATA |
||
1852 | C:001a56 8100 LD DATA,Z |
||
1853 | C:001a57 090f SBC DATA,NULL |
||
1854 | C:001a58 9301 ST Z+,DATA |
||
1855 | C:001a59 8100 LD DATA,Z |
||
1856 | C:001a5a 090f SBC DATA,NULL |
||
1857 | C:001a5b 9301 ST Z+,DATA |
||
1858 | C:001a5c ef0f NEXT_OK:SER DATA |
||
1859 | C:001a5d 9508 RET |
||
1860 | |||
1861 | C:001a5e + LSTCLSF:LDSX TFILCLS+0 |
||
1862 | C:001a5e 91a0 052b LDS XL,TFILCLS+0 |
||
1863 | C:001a60 91b0 052c LDS XH,TFILCLS+0+1 |
||
1864 | C:001a62 + LDSY TFILCLS+2 |
||
1865 | C:001a62 91c0 052d LDS YL,TFILCLS+2 |
||
1866 | C:001a64 91d0 052e LDS YH,TFILCLS+2+1 |
||
1867 | C:001a66 df5b RCALL REALSEC |
||
1868 | C:001a67 9100 052a LDS DATA,NUMSECK |
||
1869 | C:001a69 0fa0 ADD XL,DATA |
||
1870 | C:001a6a 1dbf ADC XH,NULL |
||
1871 | C:001a6b 1dcf ADC YL,NULL |
||
1872 | C:001a6c 1ddf ADC YH,NULL |
||
1873 | C:001a6d dea5 RCALL LOAD_DATA |
||
1874 | C:001a6e 9100 052a LDS DATA,NUMSECK |
||
1875 | C:001a70 9503 INC DATA |
||
1876 | C:001a71 9300 052a STS NUMSECK,DATA |
||
1877 | C:001a73 9110 052f LDS TEMP,MPHWOST |
||
1878 | C:001a75 1b01 SUB DATA,TEMP |
||
1879 | C:001a76 9508 RET |
||
1880 | ; |
||
1881 | ;-------------------------------------- |
||
1882 | ;ошибки |
||
1883 | SD_ERROR: |
||
1884 | C:001a77 9300 053d STS SDERROR,DATA |
||
1885 | C:001a79 ef1f LDI TEMP,LOW(RAMEND) |
||
1886 | C:001a7a bf1d OUT SPL,TEMP |
||
1887 | C:001a7b e110 LDI TEMP,HIGH(RAMEND) |
||
1888 | C:001a7c bf1e OUT SPH,TEMP |
||
1889 | |||
1890 | C:001a7d d0ce RCALL UART_NEWLINE |
||
1891 | C:001a7e e0a0 LDI XL,0 |
||
1892 | C:001a7f e0b4 LDI XH,4 |
||
1893 | C:001a80 d0d3 RCALL SET_CURSOR |
||
1894 | C:001a81 + LDIZ MSG_SDERROR*2 |
||
1895 | C:001a81 efee LDI ZL,LOW(MSG_SDERROR*2) |
||
1896 | C:001a82 e0f0 LDI ZH,HIGH(MSG_SDERROR*2) |
||
1897 | C:001a83 d0dc RCALL PRINTSTRZ |
||
1898 | C:001a84 9100 053d LDS DATA,SDERROR |
||
1899 | C:001a86 3001 CPI DATA,1 |
||
1900 | C:001a87 f421 BRNE SD_ERR2 |
||
1901 | C:001a88 + LDIZ MSG_CARD*2 |
||
1902 | C:001a88 e0ea LDI ZL,LOW(MSG_CARD*2) |
||
1903 | C:001a89 e0f1 LDI ZH,HIGH(MSG_CARD*2) |
||
1904 | C:001a8a d0d5 RCALL PRINTSTRZ |
||
1905 | C:001a8b c011 RJMP SD_NOTFOUND |
||
1906 | SD_ERR2: |
||
1907 | C:001a8c 3002 CPI DATA,2 |
||
1908 | C:001a8d f421 BRNE SD_ERR3 |
||
1909 | C:001a8e + LDIZ MSG_READERROR*2 |
||
1910 | C:001a8e e1e0 LDI ZL,LOW(MSG_READERROR*2) |
||
1911 | C:001a8f e0f1 LDI ZH,HIGH(MSG_READERROR*2) |
||
1912 | C:001a90 d0cf RCALL PRINTSTRZ |
||
1913 | C:001a91 c01e RJMP SD_ERR9 |
||
1914 | SD_ERR3: |
||
1915 | C:001a92 3003 CPI DATA,3 |
||
1916 | C:001a93 f421 BRNE SD_ERR4 |
||
1917 | C:001a94 + LDIZ MSG_FAT*2 |
||
1918 | C:001a94 e1ec LDI ZL,LOW(MSG_FAT*2) |
||
1919 | C:001a95 e0f1 LDI ZH,HIGH(MSG_FAT*2) |
||
1920 | C:001a96 d0c9 RCALL PRINTSTRZ |
||
1921 | C:001a97 c005 RJMP SD_NOTFOUND |
||
1922 | SD_ERR4: |
||
1923 | C:001a98 3004 CPI DATA,4 |
||
1924 | C:001a99 f439 BRNE SD_ERR5 |
||
1925 | C:001a9a + LDIZ MSG_FILE*2 |
||
1926 | C:001a9a e2e0 LDI ZL,LOW(MSG_FILE*2) |
||
1927 | C:001a9b e0f1 LDI ZH,HIGH(MSG_FILE*2) |
||
1928 | C:001a9c d0c3 RCALL PRINTSTRZ |
||
1929 | SD_NOTFOUND: |
||
1930 | C:001a9d + LDIZ MSG_NOTFOUND*2 |
||
1931 | C:001a9d e2e6 LDI ZL,LOW(MSG_NOTFOUND*2) |
||
1932 | C:001a9e e0f1 LDI ZH,HIGH(MSG_NOTFOUND*2) |
||
1933 | C:001a9f d0c0 RCALL PRINTSTRZ |
||
1934 | C:001aa0 c00f RJMP SD_ERR9 |
||
1935 | SD_ERR5: |
||
1936 | C:001aa1 3005 CPI DATA,5 |
||
1937 | C:001aa2 f439 BRNE SD_ERR6 |
||
1938 | C:001aa3 + LDIZ MSG_FILE*2 |
||
1939 | C:001aa3 e2e0 LDI ZL,LOW(MSG_FILE*2) |
||
1940 | C:001aa4 e0f1 LDI ZH,HIGH(MSG_FILE*2) |
||
1941 | C:001aa5 d0ba RCALL PRINTSTRZ |
||
1942 | C:001aa6 + LDIZ MSG_EMPTY*2 |
||
1943 | C:001aa6 e3e2 LDI ZL,LOW(MSG_EMPTY*2) |
||
1944 | C:001aa7 e0f1 LDI ZH,HIGH(MSG_EMPTY*2) |
||
1945 | C:001aa8 d0b7 RCALL PRINTSTRZ |
||
1946 | C:001aa9 c006 RJMP SD_ERR9 |
||
1947 | SD_ERR6: |
||
1948 | C:001aaa + LDIZ MSG_FILE*2 |
||
1949 | C:001aaa e2e0 LDI ZL,LOW(MSG_FILE*2) |
||
1950 | C:001aab e0f1 LDI ZH,HIGH(MSG_FILE*2) |
||
1951 | C:001aac d0b3 RCALL PRINTSTRZ |
||
1952 | C:001aad + LDIZ MSG_TOOBIG*2 |
||
1953 | C:001aad e3ea LDI ZL,LOW(MSG_TOOBIG*2) |
||
1954 | C:001aae e0f1 LDI ZH,HIGH(MSG_TOOBIG*2) |
||
1955 | C:001aaf d0b0 RCALL PRINTSTRZ |
||
1956 | SD_ERR9: |
||
1957 | ; |
||
1958 | C:001ab0 91e0 053d LDS ZL,SDERROR |
||
1959 | C:001ab2 + SD_ERR1:LED_ON |
||
1960 | C:001ab2 98c7 CBI PORTB,7 |
||
1961 | C:001ab3 e005 LDI DATA,5 |
||
1962 | C:001ab4 d0d5 RCALL BEEP |
||
1963 | C:001ab5 + LED_OFF |
||
1964 | C:001ab5 9ac7 SBI PORTB,7 |
||
1965 | C:001ab6 e005 LDI DATA,5 |
||
1966 | C:001ab7 d0e1 RCALL DELAY |
||
1967 | C:001ab8 95ea DEC ZL |
||
1968 | C:001ab9 f7c1 BRNE SD_ERR1 |
||
1969 | ; |
||
1970 | C:001aba d091 RCALL UART_NEWLINE |
||
1971 | C:001abb e0a0 LDI XL,0 |
||
1972 | C:001abc e0b6 LDI XH,6 |
||
1973 | C:001abd d096 RCALL SET_CURSOR |
||
1974 | C:001abe + LDIZ MSG_HALT*2 |
||
1975 | C:001abe e8e2 LDI ZL,LOW(MSG_HALT*2) |
||
1976 | C:001abf e0f1 LDI ZH,HIGH(MSG_HALT*2) |
||
1977 | C:001ac0 d09f RCALL PRINTSTRZ |
||
1978 | C:001ac1 9816 CBI DDRE,6 |
||
1979 | C:001ac2 cfff STOP2: RJMP STOP2 |
||
1980 | ; |
||
1981 | ;====================================== |
||
1982 | ;чтение ID Flash-ROM чипа |
||
1983 | ;out: ZL,ZH |
||
1984 | C:001ac3 d03c F_ID: RCALL F_RST |
||
1985 | C:001ac4 e900 LDI DATA,$90 |
||
1986 | C:001ac5 d040 RCALL F_CMD |
||
1987 | C:001ac6 ef14 LDI TEMP,FLASH_CTRL |
||
1988 | C:001ac7 e003 LDI DATA,0B00000011 |
||
1989 | C:001ac8 d077 RCALL FPGA_REG |
||
1990 | C:001ac9 e0a0 LDI XL,$00 |
||
1991 | C:001aca e0b0 LDI XH,$00 |
||
1992 | C:001acb e0c0 LDI YL,$00 |
||
1993 | C:001acc d067 RCALL F_IN |
||
1994 | C:001acd 2fe0 MOV ZL,DATA |
||
1995 | C:001ace e0a1 LDI XL,$01 |
||
1996 | C:001acf d064 RCALL F_IN |
||
1997 | C:001ad0 2ff0 MOV ZH,DATA |
||
1998 | C:001ad1 c02e RJMP F_RST |
||
1999 | ; |
||
2000 | ;-------------------------------------- |
||
2001 | ;запись одного байта во Flash-ROM |
||
2002 | ;in: RAM[Z] == data |
||
2003 | ; XL,XH,YL == address |
||
2004 | C:001ad2 ea00 F_WRITE:LDI DATA,$A0 |
||
2005 | C:001ad3 d032 RCALL F_CMD |
||
2006 | C:001ad4 ef14 LDI TEMP,FLASH_CTRL |
||
2007 | C:001ad5 e001 LDI DATA,0B00000001 |
||
2008 | C:001ad6 d069 RCALL FPGA_REG |
||
2009 | C:001ad7 ef10 LDI TEMP,FLASH_LOADDR |
||
2010 | C:001ad8 2f0a MOV DATA,XL |
||
2011 | C:001ad9 d066 RCALL FPGA_REG |
||
2012 | C:001ada ef11 LDI TEMP,FLASH_MIDADDR |
||
2013 | C:001adb 2f0b MOV DATA,XH |
||
2014 | C:001adc d063 RCALL FPGA_REG |
||
2015 | C:001add ef12 LDI TEMP,FLASH_HIADDR |
||
2016 | C:001ade 2f0c MOV DATA,YL |
||
2017 | C:001adf d060 RCALL FPGA_REG |
||
2018 | C:001ae0 ef13 LDI TEMP,FLASH_DATA |
||
2019 | C:001ae1 8100 LD DATA,Z |
||
2020 | C:001ae2 d05d RCALL FPGA_REG |
||
2021 | C:001ae3 ef14 LDI TEMP,FLASH_CTRL |
||
2022 | C:001ae4 e005 LDI DATA,0B00000101 |
||
2023 | C:001ae5 d05a RCALL FPGA_REG |
||
2024 | C:001ae6 e001 LDI DATA,0B00000001 |
||
2025 | C:001ae7 d05d RCALL FPGA_SAME_REG |
||
2026 | C:001ae8 e003 LDI DATA,0B00000011 |
||
2027 | C:001ae9 d05b RCALL FPGA_SAME_REG |
||
2028 | C:001aea ef13 LDI TEMP,FLASH_DATA |
||
2029 | C:001aeb d054 RCALL FPGA_REG |
||
2030 | C:001aec d058 F_WRIT1:RCALL FPGA_SAME_REG |
||
2031 | C:001aed 8110 LD TEMP,Z |
||
2032 | C:001aee 2701 EOR DATA,TEMP |
||
2033 | C:001aef fd07 SBRC DATA,7 |
||
2034 | C:001af0 cffb RJMP F_WRIT1 |
||
2035 | C:001af1 9508 RET |
||
2036 | ; |
||
2037 | ;-------------------------------------- |
||
2038 | ;стирание Flash-ROM |
||
2039 | C:001af2 e800 F_ERASE:LDI DATA,$80 |
||
2040 | C:001af3 d012 RCALL F_CMD |
||
2041 | C:001af4 e100 LDI DATA,$10 |
||
2042 | C:001af5 d010 RCALL F_CMD |
||
2043 | C:001af6 ef14 LDI TEMP,FLASH_CTRL |
||
2044 | C:001af7 e003 LDI DATA,0B00000011 |
||
2045 | C:001af8 d047 RCALL FPGA_REG |
||
2046 | C:001af9 ef13 LDI TEMP,FLASH_DATA |
||
2047 | C:001afa d045 RCALL FPGA_REG |
||
2048 | C:001afb + F_ERAS1:LED_OFF |
||
2049 | C:001afb 9ac7 SBI PORTB,7 |
||
2050 | C:001afc d048 RCALL FPGA_SAME_REG |
||
2051 | C:001afd + LED_ON |
||
2052 | C:001afd 98c7 CBI PORTB,7 |
||
2053 | C:001afe ff07 SBRS DATA,7 |
||
2054 | C:001aff cffb RJMP F_ERAS1 |
||
2055 | ; |
||
2056 | ; - - - - - - - - - - - - - - - - - - - |
||
2057 | ;сброс Flash-ROM чипа |
||
2058 | C:001b00 ef00 F_RST: LDI DATA,$F0 |
||
2059 | C:001b01 d004 RCALL F_CMD |
||
2060 | C:001b02 e113 LDI TEMP,19 ;~5 us @ 11.0592 MHz |
||
2061 | C:001b03 951a F_RST1: DEC TEMP ;1 |
||
2062 | C:001b04 f7f1 BRNE F_RST1 ;2 |
||
2063 | C:001b05 9508 RET |
||
2064 | ; |
||
2065 | ;-------------------------------------- |
||
2066 | ;комманда в Flash-ROM чип |
||
2067 | ;in: DATA == instructions |
||
2068 | C:001b06 930f F_CMD: PUSH DATA |
||
2069 | C:001b07 ef14 LDI TEMP,FLASH_CTRL |
||
2070 | C:001b08 e001 LDI DATA,0B00000001 |
||
2071 | C:001b09 d036 RCALL FPGA_REG |
||
2072 | C:001b0a ef10 LDI TEMP,FLASH_LOADDR |
||
2073 | C:001b0b e505 LDI DATA,$55 |
||
2074 | C:001b0c d033 RCALL FPGA_REG |
||
2075 | C:001b0d ef11 LDI TEMP,FLASH_MIDADDR |
||
2076 | C:001b0e e505 LDI DATA,$55 |
||
2077 | C:001b0f d030 RCALL FPGA_REG |
||
2078 | C:001b10 ef13 LDI TEMP,FLASH_DATA |
||
2079 | C:001b11 ea0a LDI DATA,$AA |
||
2080 | C:001b12 d02d RCALL FPGA_REG |
||
2081 | C:001b13 ef14 LDI TEMP,FLASH_CTRL |
||
2082 | C:001b14 e005 LDI DATA,0B00000101 |
||
2083 | C:001b15 d02a RCALL FPGA_REG |
||
2084 | C:001b16 e001 LDI DATA,0B00000001 |
||
2085 | C:001b17 d02d RCALL FPGA_SAME_REG |
||
2086 | C:001b18 ef10 LDI TEMP,FLASH_LOADDR |
||
2087 | C:001b19 ea0a LDI DATA,$AA |
||
2088 | C:001b1a d025 RCALL FPGA_REG |
||
2089 | C:001b1b ef11 LDI TEMP,FLASH_MIDADDR |
||
2090 | C:001b1c e20a LDI DATA,$2A |
||
2091 | C:001b1d d022 RCALL FPGA_REG |
||
2092 | C:001b1e ef13 LDI TEMP,FLASH_DATA |
||
2093 | C:001b1f e505 LDI DATA,$55 |
||
2094 | C:001b20 d01f RCALL FPGA_REG |
||
2095 | C:001b21 ef14 LDI TEMP,FLASH_CTRL |
||
2096 | C:001b22 e005 LDI DATA,0B00000101 |
||
2097 | C:001b23 d01c RCALL FPGA_REG |
||
2098 | C:001b24 e001 LDI DATA,0B00000001 |
||
2099 | C:001b25 d01f RCALL FPGA_SAME_REG |
||
2100 | C:001b26 ef10 LDI TEMP,FLASH_LOADDR |
||
2101 | C:001b27 e505 LDI DATA,$55 |
||
2102 | C:001b28 d017 RCALL FPGA_REG |
||
2103 | C:001b29 ef11 LDI TEMP,FLASH_MIDADDR |
||
2104 | C:001b2a e505 LDI DATA,$55 |
||
2105 | C:001b2b d014 RCALL FPGA_REG |
||
2106 | C:001b2c ef13 LDI TEMP,FLASH_DATA |
||
2107 | C:001b2d 910f POP DATA |
||
2108 | C:001b2e d011 RCALL FPGA_REG |
||
2109 | C:001b2f ef14 LDI TEMP,FLASH_CTRL |
||
2110 | C:001b30 e005 LDI DATA,0B00000101 |
||
2111 | C:001b31 d00e RCALL FPGA_REG |
||
2112 | C:001b32 e001 LDI DATA,0B00000001 |
||
2113 | C:001b33 c011 RJMP FPGA_SAME_REG |
||
2114 | ; |
||
2115 | ;-------------------------------------- |
||
2116 | ;чтение одного байта Flash-ROM |
||
2117 | ;in: XL,XH,YL == address |
||
2118 | ;out: DATA == data |
||
2119 | C:001b34 ef10 F_IN: LDI TEMP,FLASH_LOADDR |
||
2120 | C:001b35 2f0a MOV DATA,XL |
||
2121 | C:001b36 d009 RCALL FPGA_REG |
||
2122 | C:001b37 ef11 LDI TEMP,FLASH_MIDADDR |
||
2123 | C:001b38 2f0b MOV DATA,XH |
||
2124 | C:001b39 d006 RCALL FPGA_REG |
||
2125 | C:001b3a ef12 LDI TEMP,FLASH_HIADDR |
||
2126 | C:001b3b 2f0c MOV DATA,YL |
||
2127 | C:001b3c d003 RCALL FPGA_REG |
||
2128 | C:001b3d ef13 LDI TEMP,FLASH_DATA |
||
2129 | C:001b3e ef0f LDI DATA,$FF |
||
2130 | C:001b3f c000 RJMP FPGA_REG |
||
2131 | ; |
||
2132 | ;-------------------------------------- |
||
2133 | ;обмен с регистрами в FPGA |
||
2134 | ;in: TEMP == номер регистра |
||
2135 | ; DATA == данные |
||
2136 | ;out: DATA == данные |
||
2137 | FPGA_REG: |
||
2138 | C:001b40 930f PUSH DATA |
||
2139 | C:001b41 + SPICS_SET |
||
2140 | C:001b41 9ac0 SBI PORTB,0 |
||
2141 | C:001b42 b91f OUT SPDR,TEMP |
||
2142 | C:001b43 d003 RCALL RD_WHEN_RDY |
||
2143 | C:001b44 910f POP DATA |
||
2144 | ;обмен без установки регистра |
||
2145 | ;in: DATA == данные |
||
2146 | ;out: DATA == данные |
||
2147 | FPGA_SAME_REG: |
||
2148 | C:001b45 + SPICS_CLR |
||
2149 | C:001b45 98c0 CBI PORTB,0 |
||
2150 | C:001b46 b90f OUT SPDR,DATA |
||
2151 | ;ожидание окончания обмена с FPGA по SPI |
||
2152 | ;и чтение пришедших данных |
||
2153 | ;out: DATA == данные |
||
2154 | RD_WHEN_RDY: |
||
2155 | C:001b47 9b77 SBIS SPSR,SPIF |
||
2156 | C:001b48 cffe RJMP RD_WHEN_RDY |
||
2157 | C:001b49 b10f IN DATA,SPDR |
||
2158 | C:001b4a + SPICS_SET |
||
2159 | C:001b4a 9ac0 SBI PORTB,0 |
||
2160 | C:001b4b 9508 RET |
||
2161 | ; |
||
2162 | ;-------------------------------------- |
||
2163 | ; |
||
2164 | UART_NEWLINE: |
||
2165 | C:001b4c + LDIZ MSG_NEWLINE*2 |
||
2166 | C:001b4c ebe0 LDI ZL,LOW(MSG_NEWLINE*2) |
||
2167 | C:001b4d e0f0 LDI ZH,HIGH(MSG_NEWLINE*2) |
||
2168 | ; |
||
2169 | ; - - - - - - - - - - - - - - - - - - - |
||
2170 | ;вывод строки на UART |
||
2171 | ;in: Z == указательна строку (в младших 64K) |
||
2172 | UART_PRINTSTRZ: |
||
2173 | C:001b4e 9105 UPSTRZ1:LPM DATA,Z+ |
||
2174 | C:001b4f 2300 TST DATA |
||
2175 | C:001b50 f011 BREQ UPSTRZ2 |
||
2176 | C:001b51 d02f RCALL UART_PUTCHAR |
||
2177 | C:001b52 cffb RJMP UPSTRZ1 |
||
2178 | C:001b53 9508 UPSTRZ2:RET |
||
2179 | ; |
||
2180 | ;-------------------------------------- |
||
2181 | ;установка позиции печати на экране |
||
2182 | ;in: XL == x (0..31) |
||
2183 | ; XH == y (0..23) |
||
2184 | SET_CURSOR: |
||
2185 | C:001b54 e210 LDI TEMP,32 |
||
2186 | C:001b55 9fb1 MUL XH,TEMP |
||
2187 | C:001b56 27bb CLR XH |
||
2188 | C:001b57 0da0 ADD XL,R0 |
||
2189 | C:001b58 1db1 ADC XH,R1 |
||
2190 | C:001b59 9711 SBIW XL,1 |
||
2191 | C:001b5a e410 LDI TEMP,SCR_LOADDR |
||
2192 | C:001b5b 2f0a MOV DATA,XL |
||
2193 | C:001b5c dfe3 RCALL FPGA_REG |
||
2194 | C:001b5d e411 LDI TEMP,SCR_HIADDR |
||
2195 | C:001b5e 2f0b MOV DATA,XH |
||
2196 | C:001b5f cfe0 RJMP FPGA_REG |
||
2197 | ; |
||
2198 | ;-------------------------------------- |
||
2199 | ;вывод строки на экран и на UART |
||
2200 | ;in: Z == указательна строку (в младших 64K) |
||
2201 | PRINTSTRZ: |
||
2202 | C:001b60 9105 PRSTRZ1:LPM DATA,Z+ |
||
2203 | C:001b61 2300 TST DATA |
||
2204 | C:001b62 f011 BREQ PRSTRZ2 |
||
2205 | C:001b63 d017 RCALL PUTCHAR |
||
2206 | C:001b64 cffb RJMP PRSTRZ1 |
||
2207 | C:001b65 9508 PRSTRZ2:RET |
||
2208 | ; |
||
2209 | ;-------------------------------------- |
||
2210 | ;out byte in dec |
||
2211 | ;in: DATA == byte (0..99) |
||
2212 | C:001b66 5d00 DECBYTE:SUBI DATA,208 |
||
2213 | C:001b67 ff07 SBRS DATA,7 |
||
2214 | C:001b68 5300 SUBI DATA,48 |
||
2215 | C:001b69 5e08 SUBI DATA,232 |
||
2216 | C:001b6a ff06 SBRS DATA,6 |
||
2217 | C:001b6b 5108 SUBI DATA,24 |
||
2218 | C:001b6c 5f04 SUBI DATA,244 |
||
2219 | C:001b6d ff05 SBRS DATA,5 |
||
2220 | C:001b6e 500c SUBI DATA,12 |
||
2221 | C:001b6f 5f0a SUBI DATA,250 |
||
2222 | C:001b70 ff04 SBRS DATA,4 |
||
2223 | C:001b71 5006 SUBI DATA,6 |
||
2224 | ; |
||
2225 | ; - - - - - - - - - - - - - - - - - - - |
||
2226 | ;out byte in hex |
||
2227 | ;in: DATA == byte |
||
2228 | C:001b72 930f HEXBYTE:PUSH DATA |
||
2229 | C:001b73 9502 SWAP DATA |
||
2230 | C:001b74 d001 RCALL HEXHALF |
||
2231 | C:001b75 910f POP DATA |
||
2232 | C:001b76 700f HEXHALF:ANDI DATA,$0F |
||
2233 | C:001b77 300a CPI DATA,$0A |
||
2234 | C:001b78 f008 BRCS HEXBYT1 |
||
2235 | C:001b79 + ADDI DATA,$07 |
||
2236 | C:001b79 5f09 SUBI DATA,(-$07&$FF) |
||
2237 | C:001b7a + HEXBYT1:ADDI DATA,$30 |
||
2238 | C:001b7a 5d00 SUBI DATA,(-$30&$FF) |
||
2239 | ; |
||
2240 | ; - - - - - - - - - - - - - - - - - - - |
||
2241 | ;вывод символа на экран и на UART |
||
2242 | ;in: DATA == char |
||
2243 | C:001b7b 930f PUTCHAR:PUSH DATA |
||
2244 | C:001b7c 931f PUSH TEMP |
||
2245 | C:001b7d e414 LDI TEMP,SCR_CHAR |
||
2246 | C:001b7e dfc1 RCALL FPGA_REG |
||
2247 | C:001b7f 911f POP TEMP |
||
2248 | C:001b80 910f POP DATA |
||
2249 | UART_PUTCHAR: |
||
2250 | C:001b81 931f PUSH TEMP |
||
2251 | C:001b82 + UPCHR1: INPORT TEMP,UCSR1A |
||
2252 | C:001b82 9110 009b LDS TEMP,UCSR1A+$20*(UCSR1A<$40) |
||
2253 | C:001b84 ff15 SBRS TEMP,UDRE |
||
2254 | C:001b85 cffc RJMP UPCHR1 |
||
2255 | C:001b86 + OUTPORT UDR1,DATA |
||
2256 | C:001b86 9300 009c STS UDR1+$20*(UDR1<$40),DATA |
||
2257 | C:001b88 911f POP TEMP |
||
2258 | C:001b89 9508 RET |
||
2259 | ; |
||
2260 | ;-------------------------------------- |
||
2261 | ;in: DATA == продолжительность *0.1 сек |
||
2262 | BEEP: |
||
2263 | C:001b8a e614 BEE2: LDI TEMP,100;100 периодов 1кГц |
||
2264 | C:001b8b 981e BEE1: CBI PORTE,6 |
||
2265 | C:001b8c d007 RCALL BEEPDLY |
||
2266 | C:001b8d 9a1e SBI PORTE,6 |
||
2267 | C:001b8e d005 RCALL BEEPDLY |
||
2268 | C:001b8f 951a DEC TEMP |
||
2269 | C:001b90 f7d1 BRNE BEE1 |
||
2270 | C:001b91 950a DEC DATA |
||
2271 | C:001b92 f7b9 BRNE BEE2 |
||
2272 | C:001b93 9508 RET |
||
2273 | |||
2274 | C:001b94 e684 BEEPDLY:LDI R24,$64 |
||
2275 | C:001b95 e095 LDI R25,$05 |
||
2276 | C:001b96 9701 BEEPDL1:SBIW R24,1 |
||
2277 | C:001b97 f7f1 BRNE BEEPDL1 |
||
2278 | C:001b98 9508 RET |
||
2279 | ; |
||
2280 | ;-------------------------------------- |
||
2281 | ;in: DATA == продолжительность *0.1 сек |
||
2282 | C:001b99 e14e DELAY: LDI R20,$1E ;\ |
||
2283 | C:001b9a ef5e LDI R21,$FE ;/ 0,1 ᥪ @ 11.0592MHz |
||
2284 | C:001b9b 95c8 DELAY1: LPM ;3 |
||
2285 | C:001b9c 95c8 LPM ;3 |
||
2286 | C:001b9d 95c8 LPM ;3 |
||
2287 | C:001b9e 95c8 LPM ;3 |
||
2288 | C:001b9f 5041 SUBI R20,1 ;1 |
||
2289 | C:001ba0 4050 SBCI R21,0 ;1 |
||
2290 | C:001ba1 4000 SBCI DATA,0 ;1 |
||
2291 | C:001ba2 f7c1 BRNE DELAY1 ;2(1) |
||
2292 | C:001ba3 9508 RET |
||
2293 | ; |
||
2294 | ;-------------------------------------- |
||
2295 | ; |
||
2296 | |||
2297 | |||
2298 | Segment usage: |
||
2299 | Code : 7076 words (14152 bytes) |
||
2300 | Data : 68 bytes |
||
2301 | EEPROM : 0 bytes |
||
2302 | |||
2303 | Assembly completed with no errors. |