⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp3.lst

📁 diy硬盘mp3的程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -