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

📄 mp3.lst

📁 使用硬盘制作mp3的源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    04CA 9060036C  LDS	R6,0x36C
    04CC 9070036D  LDS	R7,0x36D
    04CE 0C62      ADD	R6,R2
    04CF 1C73      ADC	R7,R3
    04D0 1C84      ADC	R8,R4
    04D1 1C95      ADC	R9,R5
    04D2 0E60      ADD	R6,R16
    04D3 1E71      ADC	R7,R17
    04D4 1E82      ADC	R8,R18
    04D5 1E93      ADC	R9,R19
    04D6 92700221  STS	FirstDataSector+1,R7
    04D8 92600220  STS	FirstDataSector,R6
    04DA 92900223  STS	FirstDataSector+3,R9
    04DC 92800222  STS	FirstDataSector+2,R8
    04DE 9628      ADIW	R28,0x8
    04DF 940E15C5  CALL	pop_gset2
    04E1 9508      RET
_Clust2LBA:
  clust                --> Y+4
    04E2 940E14D5  CALL	push_arg4
    04E4 940E15D7  CALL	push_gset2
(0027) }
(0028) 
(0029) //*************************************
(0030) // unsigned long clust2LBA(unsigned long clust)
(0031) //*************************************
(0032) unsigned long Clust2LBA(unsigned long clust)
(0033) {
(0034) return ((clust-2) * Boot.SecPerClust) + FirstDataSector;
    04E6 E042      LDI	R20,2
    04E7 E050      LDI	R21,0
    04E8 E060      LDI	R22,0
    04E9 E070      LDI	R23,0
    04EA 01FE      MOVW	R30,R28
    04EB 8024      LDD	R2,Z+4
    04EC 8035      LDD	R3,Z+5
    04ED 8046      LDD	R4,Z+6
    04EE 8057      LDD	R5,Z+7
    04EF 1A24      SUB	R2,R20
    04F0 0A35      SBC	R3,R21
    04F1 0A46      SBC	R4,R22
    04F2 0A57      SBC	R5,R23
    04F3 9060033D  LDS	R6,0x33D
    04F5 2477      CLR	R7
    04F6 2488      CLR	R8
    04F7 2499      CLR	R9
    04F8 929A      ST	R9,-Y
    04F9 928A      ST	R8,-Y
    04FA 927A      ST	R7,-Y
    04FB 926A      ST	R6,-Y
    04FC 0181      MOVW	R16,R2
    04FD 0192      MOVW	R18,R4
    04FE 940E1595  CALL	empy32s
    0500 0118      MOVW	R2,R16
    0501 0129      MOVW	R4,R18
    0502 90800222  LDS	R8,FirstDataSector+2
    0504 90900223  LDS	R9,FirstDataSector+3
    0506 90600220  LDS	R6,FirstDataSector
    0508 90700221  LDS	R7,FirstDataSector+1
    050A 0C26      ADD	R2,R6
    050B 1C37      ADC	R3,R7
    050C 1C48      ADC	R4,R8
    050D 1C59      ADC	R5,R9
    050E 0181      MOVW	R16,R2
    050F 0192      MOVW	R18,R4
    0510 940E15C5  CALL	pop_gset2
    0512 9624      ADIW	R28,4
    0513 9508      RET
_GetNextCluster:
  Fat32_Entry          --> Y+16
  FatSectorOffset      --> Y+12
  FatSectorNum         --> Y+8
  Clust                --> Y+24
    0514 940E14D5  CALL	push_arg4
    0516 940E15D7  CALL	push_gset2
    0518 9764      SBIW	R28,0x14
(0035) }
(0036) 
(0037) //****************************************************************
(0038) // unsigned long GetNextCluster(unsigned long Clust)
(0039) // 
(0040) // Description: 
(0041) // Returns the FAT32 Entry for the given Cluster Number. 
(0042) // The FAT32 Entry is the next cluster number of the cluster 
(0043) // chain. **May return a termination 
(0044) // 
(0045) // if Fat32_Entry >= 0x0FFFFFF8 EOC (End of Chain) 
(0046) // if Fat32_Entry == 0x0FFFFFF7 Bad Cluster 
(0047) //****************************************************************
(0048) unsigned long GetNextCluster(unsigned long Clust)
(0049) {
(0050) unsigned long FatSectorNum;
(0051) unsigned long FatSectorOffset;
(0052) unsigned long Fat32_Entry;
(0053) 
(0054) FatSectorNum = Part.StartLBA + Boot.ResSectors + ((Clust * 4) / Boot.BytesPerSec);;
    0519 01FE      MOVW	R30,R28
    051A 8C20      LDD	R2,Z+24
    051B 8C31      LDD	R3,Z+25
    051C 8C42      LDD	R4,Z+26
    051D 8C53      LDD	R5,Z+27
    051E E044      LDI	R20,4
    051F E050      LDI	R21,0
    0520 E060      LDI	R22,0
    0521 E070      LDI	R23,0
    0522 925A      ST	R5,-Y
    0523 924A      ST	R4,-Y
    0524 923A      ST	R3,-Y
    0525 922A      ST	R2,-Y
    0526 018A      MOVW	R16,R20
    0527 019B      MOVW	R18,R22
    0528 940E1595  CALL	empy32s
    052A 9020033B  LDS	R2,0x33B
    052C 9030033C  LDS	R3,0x33C
    052E 2444      CLR	R4
    052F 2455      CLR	R5
    0530 925A      ST	R5,-Y
    0531 924A      ST	R4,-Y
    0532 923A      ST	R3,-Y
    0533 922A      ST	R2,-Y
    0534 940E1514  CALL	div32u
    0536 9020033E  LDS	R2,0x33E
    0538 9030033F  LDS	R3,0x33F
    053A 2444      CLR	R4
    053B 2455      CLR	R5
    053C 9080036E  LDS	R8,0x36E
    053E 9090036F  LDS	R9,0x36F
    0540 9060036C  LDS	R6,0x36C
    0542 9070036D  LDS	R7,0x36D
    0544 0C62      ADD	R6,R2
    0545 1C73      ADC	R7,R3
    0546 1C84      ADC	R8,R4
    0547 1C95      ADC	R9,R5
    0548 0E60      ADD	R6,R16
    0549 1E71      ADC	R7,R17
    054A 1E82      ADC	R8,R18
    054B 1E93      ADC	R9,R19
    054C 01FE      MOVW	R30,R28
    054D 8660      STD	Z+8,R6
    054E 8671      STD	Z+9,R7
    054F 8682      STD	Z+10,R8
    0550 8693      STD	Z+11,R9
(0055) FatSectorOffset = (Clust * 4) % Boot.BytesPerSec;
    0551 01FE      MOVW	R30,R28
    0552 8C20      LDD	R2,Z+24
    0553 8C31      LDD	R3,Z+25
    0554 8C42      LDD	R4,Z+26
    0555 8C53      LDD	R5,Z+27
    0556 E044      LDI	R20,4
    0557 E050      LDI	R21,0
    0558 E060      LDI	R22,0
    0559 E070      LDI	R23,0
    055A 925A      ST	R5,-Y
    055B 924A      ST	R4,-Y
    055C 923A      ST	R3,-Y
    055D 922A      ST	R2,-Y
    055E 018A      MOVW	R16,R20
    055F 019B      MOVW	R18,R22
    0560 940E1595  CALL	empy32s
    0562 9020033B  LDS	R2,0x33B
    0564 9030033C  LDS	R3,0x33C
    0566 2444      CLR	R4
    0567 2455      CLR	R5
    0568 925A      ST	R5,-Y
    0569 924A      ST	R4,-Y
    056A 923A      ST	R3,-Y
    056B 922A      ST	R2,-Y
    056C 940E1516  CALL	mod32u
    056E 01FE      MOVW	R30,R28
    056F 8704      STD	Z+12,R16
    0570 8715      STD	Z+13,R17
    0571 8726      STD	Z+14,R18
    0572 8737      STD	Z+15,R19
(0056) 
(0057) ata_read_sector_byte(0, FatSectorNum, FatSectorOffset, 4 , (unsigned char*)&Fat32_Entry); 
    0573 01CE      MOVW	R24,R28
    0574 9640      ADIW	R24,0x10
    0575 839F      STD	Y+7,R25
    0576 838E      STD	Y+6,R24
    0577 E084      LDI	R24,4
    0578 E090      LDI	R25,0
    0579 839D      STD	Y+5,R25
    057A 838C      STD	Y+4,R24
    057B 01FE      MOVW	R30,R28
    057C 8424      LDD	R2,Z+12
    057D 8435      LDD	R3,Z+13
    057E 823B      STD	Y+3,R3
    057F 822A      STD	Y+2,R2
    0580 01FE      MOVW	R30,R28
    0581 8420      LDD	R2,Z+8
    0582 8431      LDD	R3,Z+9
    0583 8442      LDD	R4,Z+10
    0584 8453      LDD	R5,Z+11
    0585 8248      STD	Y+0,R4
    0586 8259      STD	Y+1,R5
    0587 0191      MOVW	R18,R2
    0588 2700      CLR	R16
    0589 940E02B9  CALL	_ata_read_sector_byte
(0058) 
(0059) return(Fat32_Entry & 0x0FFFFFFF);
    058B EF4F      LDI	R20,0xFF
    058C EF5F      LDI	R21,0xFF
    058D EF6F      LDI	R22,0xFF
    058E E07F      LDI	R23,0xF
    058F 01FE      MOVW	R30,R28
    0590 8820      LDD	R2,Z+16
    0591 8831      LDD	R3,Z+17
    0592 8842      LDD	R4,Z+18
    0593 8853      LDD	R5,Z+19
    0594 2224      AND	R2,R20
    0595 2235      AND	R3,R21
    0596 2246      AND	R4,R22
    0597 2257      AND	R5,R23
    0598 0181      MOVW	R16,R2
    0599 0192      MOVW	R18,R4
    059A 9664      ADIW	R28,0x14
    059B 940E15C5  CALL	pop_gset2
    059D 9624      ADIW	R28,4
    059E 9508      RET
_GetDir:
  k                    --> Y+9
  NextCluster          --> Y+49
  LBA                  --> Y+45
  LinePtr              --> Y+44
  i                    --> Y+40
  LongFileName         --> R14
  Files                --> Y+55
  Offset               --> Y+53
  LongFilePtr          --> R10
  Entry                --> Y+8
  j                    --> R12
  Display              --> Y+75
  Qte                  --> Y+73
  From                 --> Y+71
  Cluster              --> Y+67
    059F 940E14D5  CALL	push_arg4
    05A1 940E15D1  CALL	push_gset5
    05A3 97E9      SBIW	R28,0x39
(0060) }
(0061) 
(0062) //*************************************
(0063) // int GetDir(unsigned long Cluster, unsigned int FileWanted, unsigned int Type)
(0064) //
(0065) //*************************************
(0066) int GetDir(unsigned long Cluster, unsigned int From, unsigned int Qte, unsigned int Display)
(0067) {
(0068) extern unsigned char SectorBuffer[512];
(0069) unsigned long LBA,i,NextCluster;
(0070) unsigned int Offset,j,k,LongFilePtr,LongFileName,Files;
(0071) unsigned char LinePtr;
(0072) union FileEntry
(0073) {
(0074)  	  struct DirEntry Dir;
(0075) 	  struct WinEntry Win;
(0076) };
(0077) 
(0078) union FileEntry Entry;
(0079) 
(0080) NextCluster = Cluster;
    05A4 01FE      MOVW	R30,R28
    05A5 5BED      SUBI	R30,0xBD
    05A6 4FFF      SBCI	R31,0xFF
    05A7 8020      LDD	R2,Z+0
    05A8 8031      LDD	R3,Z+1
    05A9 8042      LDD	R4,Z+2
    05AA 8053      LDD	R5,Z+3
    05AB 01FE      MOVW	R30,R28
    05AC AA21      STD	Z+49,R2
    05AD AA32      STD	Z+50,R3
    05AE AA43      STD	Z+51,R4
    05AF AA54      STD	Z+52,R5
(0081) Files = 0;
    05B0 2400      CLR	R0
    05B1 2411      CLR	R1
    05B2 AE18      STD	Y+56,R1
    05B3 AA0F      STD	Y+55,R0
(0082) LinePtr = 0;
    05B4 2422      CLR	R2
    05B5 A62C      STD	Y+44,R2
    05B6 C1E3      RJMP	0x079A
(0083) while (1)
(0084)  	  {
(0085) 	  LBA = Clust2LBA(NextCluster);
    05B7 01FE      MOVW	R30,R28
    05B8 A901      LDD	R16,Z+49
    05B9 A912      LDD	R17,Z+50
    05BA A923      LDD	R18,Z+51
    05BB A934      LDD	R19,Z+52
    05BC DF25      RCALL	_Clust2LBA
    05BD 01FE      MOVW	R30,R28
    05BE A705      STD	Z+45,R16
    05BF A716      STD	Z+46,R17
    05C0 A727      STD	Z+47,R18
    05C1 AB30      STD	Z+48,R19
(0086) 	  for (i=0;i<Boot.SecPerClust;i++) 
    05C2 E040      LDI	R20,0
    05C3 E050      LDI	R21,0
    05C4 E060      LDI	R22,0
    05C5 E070      LDI	R23,0
    05C6 01FE      MOVW	R30,R28
    05C7 A740      STD	Z+40,R20
    05C8 A751      STD	Z+41,R21
    05C9 A762      STD	Z+42,R22
    05CA A773      STD	Z+43,R23
    05CB C1A4      RJMP	0x0770
(0087) 	  	  {
(0088) 		  ata_read_sector_byte(0, LBA+i, 0, 512, (unsigned char*)&SectorBuffer);
    05CC E38C      LDI	R24,0x3C
    05CD E094      LDI	R25,4
    05CE 839F      STD	Y+7,R25
    05CF 838E      STD	Y+6,R24
    05D0 E080      LDI	R24,0
    05D1 E092      LDI	R25,2
    05D2 839D      STD	Y+5,R25
    05D3 838C      STD	Y+4,R24
    05D4 2422      CLR	R2
    05D5 2433      CLR	R3
    05D6 823B      STD	Y+3,R3
    05D7 822A      STD	Y+2,R2
    05D8 01FE      MOVW	R30,R28
    05D9 A420      LDD	R2,Z+40
    05DA A431      LDD	R3,Z+41
    05DB A442      LDD	R4,Z+42
    05DC A453      LDD	R5,Z+43
    05DD 01FE      MOVW	R30,R28
    05DE A465      LDD	R6,Z+45
    05DF A476      LDD	R7,Z+46
    05E0 A487      LDD	R8,Z+47
    05E1 A890      LDD	R9,Z+48
    05E2 0C62      ADD	R6,R2
    05E3 1C73      ADC	R7,R3
    05E4 1C84      ADC	R8,R4
    05E5 1C95      ADC	R9,R5
    05E6 8288      STD	Y+0,R8
    05E7 8299      STD	Y+1,R9
    05E8 0193      MOVW	R18,R6
    05E9 2700      CLR	R16
    05EA 940E02B9  CALL	_ata_read_sector_byte
(0089) 		  for (Offset=0;Offset<Boot.BytesPerSec;Offset=Offset+32) 
    05EC 2400      CLR	R0
    05ED 2411      CLR	R1
    05EE AA1E      STD	Y+54,R1
    05EF AA0D      STD	Y+53,R0
    05F0 C163      RJMP	0x0754
(0090) 		  	  {
(0091) 			  memcpy((unsigned char*)&Entry,(unsigned char*)&SectorBuffer[Offset],sizeof(Entry));
    05F1 E280      LDI	R24,0x20
    05F2 E090      LDI	R25,0
    05F3 8399      STD	Y+1,R25
    05F4 8388      STD	Y+0,R24
    05F5 E38C      LDI	R24,0x3C
    05F6 E094      LDI	R25,4
    05F7 A92D      LDD	R18,Y+53
    05F8 A93E      LDD	R19,Y+54
    05F9 0F28      ADD	R18,R24
    05FA 1F39      ADC	R19,R25
    05FB 018E      MOVW	R16,R28
    05FC 5F08      SUBI	R16,0xF8
    05FD 4F1F      SBCI	R17,0xFF
    05FE 940E149E  CALL	_memcpy
(0092)     		  if (Entry.Dir.Attributes == ATTR_LONG_FILENAME)
    0600 898B      LDD	R24,Y+19
    0601 308F      CPI	R24,0xF
    0602 F009      BEQ	0x0604
    0603 C07C      RJMP	0x0680
(0093) 			  	 {
(0094) 				 LongFileName = TRUE;
    0604 E081      LDI	R24,1
    0605 E090      LDI	R25,0
    0606 017C      MOVW	R14,R24
(0095) 				 LongFilePtr = ((Entry.Win.Cnt & 0x3f) * 13) - 13;
    0607 8588      LDD	R24,Y+8
    0608 738F      ANDI	R24,0x3F
    0609 E09D      LDI	R25,0xD
    060A 9F98      MUL	R25,R24
    060B 01C0      MOVW	R24,R0
    060C 970D      SBIW	R24,0xD
    060D 015C      MOVW	R10,R24
(0096) 				 for (j=0;j<5;j++) File.Name[LongFilePtr++] = Entry.Win.Part1[j];
    060E 24CC      CLR	R12
    060F 24DD      CLR	R13
    0610 C019      RJMP	0x062A
    0611 0115      MOVW	R2,R10
    0612 01C1      MOVW	R24,R2
    0613 9601      ADIW	R24,1
    0614 015C      MOVW	R10,R24
    0615 E002      LDI	R16,2
    0616 E010      LDI	R17,0
    0617 0196      MOVW	R18,R12
    0618 940E1585  CALL	empy16s
    061A 01F8      MOVW	R30,R16
    061B 01CE      MOVW	R24,R28
    061C 9609      ADIW	R24,0x9
    061D 0FE8      ADD	R30,R24
    061E 1FF9      ADC	R31,R25
    061F 8040      LDD	R4,Z+0
    0620 8051      LDD	R5,Z+1
    0621 E284      LDI	R24,0x24
    0622 E092      LDI	R25,2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -