📄 mp3.lst
字号:
0319 04D3 CPC R13,R3
031A F428 BCC 0x0320
031B 89EA LDD R30,Y+18
031C 89FB LDD R31,Y+19
031D 92E1 ST R14,Z+
031E 8BFB STD Y+19,R31
031F 8BEA STD Y+18,R30
(0263) j++;
0320 01C6 MOVW R24,R12
0321 9601 ADIW R24,1
0322 016C MOVW R12,R24
(0264) if ((j >= from) && (j < (from + qte))) *ptr++ = (unsigned char)(word >> 8);
0323 840E LDD R0,Y+14
0324 841F LDD R1,Y+15
0325 1580 CP R24,R0
0326 0591 CPC R25,R1
0327 F080 BCS 0x0338
0328 0110 MOVW R2,R0
0329 8808 LDD R0,Y+16
032A 8819 LDD R1,Y+17
032B 0C20 ADD R2,R0
032C 1C31 ADC R3,R1
032D 1582 CP R24,R2
032E 0593 CPC R25,R3
032F F440 BCC 0x0338
0330 0117 MOVW R2,R14
0331 2C23 MOV R2,R3
0332 2433 CLR R3
0333 89EA LDD R30,Y+18
0334 89FB LDD R31,Y+19
0335 9221 ST R2,Z+
0336 8BFB STD Y+19,R31
0337 8BEA STD Y+18,R30
(0265) j++;
0338 01C6 MOVW R24,R12
0339 9601 ADIW R24,1
033A 016C MOVW R12,R24
(0266) while(busy);
033B DF07 RCALL _ata_bsy
033C 2300 TST R16
033D F7E9 BNE 0x033B
033E 01C5 MOVW R24,R10
033F 9601 ADIW R24,1
0340 015C MOVW R10,R24
0341 01C5 MOVW R24,R10
0342 3080 CPI R24,0
0343 E0E1 LDI R30,1
0344 079E CPC R25,R30
0345 F408 BCC 0x0347
0346 CFC4 RJMP 0x030B
(0267) }
(0268) }
0347 940E1531 CALL pop_gset5
0349 9622 ADIW R28,2
034A 9508 RET
_ata_write_sector:
i --> R12
ptr --> R10
lbasector --> Y+8
device --> R12
034B 933A ST R19,-Y
034C 932A ST R18,-Y
034D 940E1553 CALL push_gset4
034F 2EC0 MOV R12,R16
0350 84AC LDD R10,Y+12
0351 84BD LDD R11,Y+13
(0269)
(0270) //******************************************************************
(0271) //* WRITE A SECTOR
(0272) //* device = 0x00 or 0x01
(0273) //*
(0274) //******************************************************************
(0275) void ata_write_sector(unsigned char device, unsigned long lbasector, unsigned char *ptr)
(0276) {
(0277) unsigned int i;
(0278)
(0279) lbasector &= 0x0FFFFFFF;
0352 EF4F LDI R20,0xFF
0353 EF5F LDI R21,0xFF
0354 EF6F LDI R22,0xFF
0355 E07F LDI R23,0xF
0356 01FE MOVW R30,R28
0357 8420 LDD R2,Z+8
0358 8431 LDD R3,Z+9
0359 8442 LDD R4,Z+10
035A 8453 LDD R5,Z+11
035B 2224 AND R2,R20
035C 2235 AND R3,R21
035D 2246 AND R4,R22
035E 2257 AND R5,R23
035F 8620 STD Z+8,R2
0360 8631 STD Z+9,R3
0361 8642 STD Z+10,R4
0362 8653 STD Z+11,R5
(0280)
(0281) switch (device)
0363 24DD CLR R13
0364 20CC TST R12
0365 F411 BNE 0x0368
0366 20DD TST R13
0367 F031 BEQ 0x036E
0368 01C6 MOVW R24,R12
0369 3081 CPI R24,1
036A E0E0 LDI R30,0
036B 079E CPC R25,R30
036C F0D9 BEQ 0x0388
036D C034 RJMP 0x03A2
(0282) {
(0283) case 0x00:
(0284) ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xE0);
036E E188 LDI R24,0x18
036F E090 LDI R25,0
0370 01FE MOVW R30,R28
0371 8420 LDD R2,Z+8
0372 8431 LDD R3,Z+9
0373 8442 LDD R4,Z+10
0374 8453 LDD R5,Z+11
0375 938A ST R24,-Y
0376 0181 MOVW R16,R2
0377 0192 MOVW R18,R4
0378 940E15C0 CALL lsr32
037A 0118 MOVW R2,R16
037B 0129 MOVW R4,R18
037C EE40 LDI R20,0xE0
037D E050 LDI R21,0
037E E060 LDI R22,0
037F E070 LDI R23,0
0380 2A24 OR R2,R20
0381 2A35 OR R3,R21
0382 2A46 OR R4,R22
0383 2A57 OR R5,R23
0384 2D22 MOV R18,R2
0385 EF05 LDI R16,0xF5
0386 DE53 RCALL _ata_write_byte
(0285) break;
0387 C033 RJMP 0x03BB
(0286) case 0x01:
(0287) ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xF0);
0388 E188 LDI R24,0x18
0389 E090 LDI R25,0
038A 01FE MOVW R30,R28
038B 8420 LDD R2,Z+8
038C 8431 LDD R3,Z+9
038D 8442 LDD R4,Z+10
038E 8453 LDD R5,Z+11
038F 938A ST R24,-Y
0390 0181 MOVW R16,R2
0391 0192 MOVW R18,R4
0392 940E15C0 CALL lsr32
0394 0118 MOVW R2,R16
0395 0129 MOVW R4,R18
0396 EF40 LDI R20,0xF0
0397 E050 LDI R21,0
0398 E060 LDI R22,0
0399 E070 LDI R23,0
039A 2A24 OR R2,R20
039B 2A35 OR R3,R21
039C 2A46 OR R4,R22
039D 2A57 OR R5,R23
039E 2D22 MOV R18,R2
039F EF05 LDI R16,0xF5
03A0 DE39 RCALL _ata_write_byte
(0288) break;
03A1 C019 RJMP 0x03BB
(0289) default:
(0290) ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xE0);
03A2 E188 LDI R24,0x18
03A3 E090 LDI R25,0
03A4 01FE MOVW R30,R28
03A5 8420 LDD R2,Z+8
03A6 8431 LDD R3,Z+9
03A7 8442 LDD R4,Z+10
03A8 8453 LDD R5,Z+11
03A9 938A ST R24,-Y
03AA 0181 MOVW R16,R2
03AB 0192 MOVW R18,R4
03AC 940E15C0 CALL lsr32
03AE 0118 MOVW R2,R16
03AF 0129 MOVW R4,R18
03B0 EE40 LDI R20,0xE0
03B1 E050 LDI R21,0
03B2 E060 LDI R22,0
03B3 E070 LDI R23,0
03B4 2A24 OR R2,R20
03B5 2A35 OR R3,R21
03B6 2A46 OR R4,R22
03B7 2A57 OR R5,R23
03B8 2D22 MOV R18,R2
03B9 EF05 LDI R16,0xF5
03BA DE1F RCALL _ata_write_byte
(0291) break;
(0292) }
(0293) while(busy);
03BB DE87 RCALL _ata_bsy
03BC 2300 TST R16
03BD F7E9 BNE 0x03BB
(0294) ata_write_byte(ATA_IO_CYL_H,lbasector >> 16);
03BE 01FE MOVW R30,R28
03BF 8420 LDD R2,Z+8
03C0 8431 LDD R3,Z+9
03C1 8442 LDD R4,Z+10
03C2 8453 LDD R5,Z+11
03C3 0112 MOVW R2,R4
03C4 2444 CLR R4
03C5 2455 CLR R5
03C6 2D22 MOV R18,R2
03C7 ED0D LDI R16,0xDD
03C8 DE11 RCALL _ata_write_byte
(0295) while(busy);
03C9 DE79 RCALL _ata_bsy
03CA 2300 TST R16
03CB F7E9 BNE 0x03C9
(0296) ata_write_byte(ATA_IO_CYL_L,lbasector >> 8);
03CC E088 LDI R24,0x8
03CD E090 LDI R25,0
03CE 01FE MOVW R30,R28
03CF 8420 LDD R2,Z+8
03D0 8431 LDD R3,Z+9
03D1 8442 LDD R4,Z+10
03D2 8453 LDD R5,Z+11
03D3 938A ST R24,-Y
03D4 0181 MOVW R16,R2
03D5 0192 MOVW R18,R4
03D6 940E15C0 CALL lsr32
03D8 2F20 MOV R18,R16
03D9 ED05 LDI R16,0xD5
03DA DDFF RCALL _ata_write_byte
(0297) while(busy);
03DB DE67 RCALL _ata_bsy
03DC 2300 TST R16
03DD F7E9 BNE 0x03DB
(0298) ata_write_byte(ATA_IO_SECTORNUM,lbasector);
03DE 01FE MOVW R30,R28
03DF 8420 LDD R2,Z+8
03E0 8431 LDD R3,Z+9
03E1 8442 LDD R4,Z+10
03E2 8453 LDD R5,Z+11
03E3 2D22 MOV R18,R2
03E4 EE0D LDI R16,0xED
03E5 DDF4 RCALL _ata_write_byte
(0299) while(busy);
03E6 DE5C RCALL _ata_bsy
03E7 2300 TST R16
03E8 F7E9 BNE 0x03E6
(0300) ata_write_byte(ATA_IO_SECTORCNT,0x01);
03E9 E021 LDI R18,1
03EA EE05 LDI R16,0xE5
03EB DDEE RCALL _ata_write_byte
(0301) while(busy);
03EC DE56 RCALL _ata_bsy
03ED 2300 TST R16
03EE F7E9 BNE 0x03EC
(0302) ata_write_byte(ATA_IO_CMD,CMD_WRITE_SECTORS);
03EF E320 LDI R18,0x30
03F0 EF0D LDI R16,0xFD
03F1 DDE8 RCALL _ata_write_byte
(0303) while(busy);
03F2 DE50 RCALL _ata_bsy
03F3 2300 TST R16
03F4 F7E9 BNE 0x03F2
(0304) while(!drq);
03F5 DE55 RCALL _ata_drq
03F6 2300 TST R16
03F7 F3E9 BEQ 0x03F5
(0305)
(0306) for (i=0;i<256;i++)
03F8 24CC CLR R12
03F9 24DD CLR R13
03FA C014 RJMP 0x040F
(0307) {
(0308) ata_write_word(ATA_IO_DATA,(unsigned int)(*(ptr+1)<<8)+*ptr);
03FB 01F5 MOVW R30,R10
03FC 8020 LDD R2,Z+0
03FD 2433 CLR R3
03FE 8121 LDD R18,Z+1
03FF 2733 CLR R19
0400 2F32 MOV R19,R18
0401 2722 CLR R18
0402 0D22 ADD R18,R2
0403 1D33 ADC R19,R3
0404 EC05 LDI R16,0xC5
0405 DD93 RCALL _ata_write_word
(0309) ptr += 2;
0406 01C5 MOVW R24,R10
0407 9602 ADIW R24,2
0408 015C MOVW R10,R24
(0310) while(busy);
0409 DE39 RCALL _ata_bsy
040A 2300 TST R16
040B F7E9 BNE 0x0409
040C 01C6 MOVW R24,R12
040D 9601 ADIW R24,1
040E 016C MOVW R12,R24
040F 01C6 MOVW R24,R12
0410 3080 CPI R24,0
0411 E0E1 LDI R30,1
0412 079E CPC R25,R30
0413 F338 BCS 0x03FB
(0311) }
(0312) }
0414 940E152E CALL pop_gset4
0416 9622 ADIW R28,2
0417 9508 RET
_InitFat:
0418 940E154B CALL push_gset2
041A 9728 SBIW R28,0x8
FILE: C:\DATA\MP3\Player\Code2\fat.c
(0001) #include <iom128v.h>
(0002) #include <macros.h>
(0003) #include <string.h>
(0004) #include <stdio.h>
(0005) #include "vs1001.h"
(0006) #include "generic.h"
(0007) #include "remote.h"
(0008) #include "fat.h"
(0009) #include "ata.h"
(0010)
(0011) //******************************************************************
(0012) //* FAT Global Variable
(0013) //******************************************************************
(0014) struct PartRecord Part;
(0015) struct BootRecord Boot;
(0016) struct FileInfo File;
(0017) unsigned long FirstDataSector;
(0018)
(0019) //*************************************
(0020) // void init_fat(void)
(0021) //*************************************
(0022) void InitFat(void)
(0023) {
(0024) ata_read_sector_byte(0, 0, 446, sizeof(Part) , (unsigned char*)&Part);
041B EA8A LDI R24,0xAA
041C E092 LDI R25,2
041D 839F STD Y+7,R25
041E 838E STD Y+6,R24
041F E180 LDI R24,0x10
0420 E090 LDI R25,0
0421 839D STD Y+5,R25
0422 838C STD Y+4,R24
0423 EB8E LDI R24,0xBE
0424 E091 LDI R25,1
0425 839B STD Y+3,R25
0426 838A STD Y+2,R24
0427 E040 LDI R20,0
0428 E050 LDI R21,0
0429 E060 LDI R22,0
042A E070 LDI R23,0
042B 8368 STD Y+0,R22
042C 8379 STD Y+1,R23
042D 019A MOVW R18,R20
042E 2700 CLR R16
042F 940E025B CALL _ata_read_sector_byte
(0025) ata_read_sector_byte(0, Part.StartLBA, 0, sizeof(Boot) , (unsigned char*)&Boot);
0431 E786 LDI R24,0x76
0432 E092 LDI R25,2
0433 839F STD Y+7,R25
0434 838E STD Y+6,R24
0435 E384 LDI R24,0x34
0436 E090 LDI R25,0
0437 839D STD Y+5,R25
0438 838C STD Y+4,R24
0439 2422 CLR R2
043A 2433 CLR R3
043B 823B STD Y+3,R3
043C 822A STD Y+2,R2
043D 904002B4 LDS R4,0x2B4
043F 905002B5 LDS R5,0x2B5
0441 902002B2 LDS R2,0x2B2
0443 903002B3 LDS R3,0x2B3
0445 8248 STD Y+0,R4
0446 8259 STD Y+1,R5
0447 0191 MOVW R18,R2
0448 2700 CLR R16
0449 940E025B CALL _ata_read_sector_byte
(0026) FirstDataSector = Part.StartLBA + Boot.ResSectors + (Boot.FATs * Boot.FATSize);
044B 9040029C LDS R4,0x29C
044D 9050029D LDS R5,0x29D
044F 9020029A LDS R2,0x29A
0451 9030029B LDS R3,0x29B
0453 90600286 LDS R6,0x286
0455 2477 CLR R7
0456 2488 CLR R8
0457 2499 CLR R9
0458 925A ST R5,-Y
0459 924A ST R4,-Y
045A 923A ST R3,-Y
045B 922A ST R2,-Y
045C 0183 MOVW R16,R6
045D 0194 MOVW R18,R8
045E 940E14F8 CALL empy32s
0460 90200284 LDS R2,0x284
0462 90300285 LDS R3,0x285
0464 2444 CLR R4
0465 2455 CLR R5
0466 908002B4 LDS R8,0x2B4
0468 909002B5 LDS R9,0x2B5
046A 906002B2 LDS R6,0x2B2
046C 907002B3 LDS R7,0x2B3
046E 0C62 ADD R6,R2
046F 1C73 ADC R7,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -