📄 mp3.lst
字号:
0470 1C84 ADC R8,R4
0471 1C95 ADC R9,R5
0472 0E60 ADD R6,R16
0473 1E71 ADC R7,R17
0474 1E82 ADC R8,R18
0475 1E93 ADC R9,R19
0476 92700167 STS _FirstDataSector+1,R7
0478 92600166 STS _FirstDataSector,R6
047A 92900169 STS _FirstDataSector+3,R9
047C 92800168 STS _FirstDataSector+2,R8
(0027) }
047E 9628 ADIW R28,0x8
047F 940E1528 CALL pop_gset2
0481 9508 RET
_Clust2LBA:
clust --> Y+4
0482 940E1438 CALL push_arg4
0484 940E154B CALL push_gset2
(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;
0486 E042 LDI R20,2
0487 E050 LDI R21,0
0488 E060 LDI R22,0
0489 E070 LDI R23,0
048A 01FE MOVW R30,R28
048B 8024 LDD R2,Z+4
048C 8035 LDD R3,Z+5
048D 8046 LDD R4,Z+6
048E 8057 LDD R5,Z+7
048F 1A24 SUB R2,R20
0490 0A35 SBC R3,R21
0491 0A46 SBC R4,R22
0492 0A57 SBC R5,R23
0493 90600283 LDS R6,0x283
0495 2477 CLR R7
0496 2488 CLR R8
0497 2499 CLR R9
0498 929A ST R9,-Y
0499 928A ST R8,-Y
049A 927A ST R7,-Y
049B 926A ST R6,-Y
049C 0181 MOVW R16,R2
049D 0192 MOVW R18,R4
049E 940E14F8 CALL empy32s
04A0 0118 MOVW R2,R16
04A1 0129 MOVW R4,R18
04A2 90800168 LDS R8,_FirstDataSector+2
04A4 90900169 LDS R9,_FirstDataSector+3
04A6 90600166 LDS R6,_FirstDataSector
04A8 90700167 LDS R7,_FirstDataSector+1
04AA 0C26 ADD R2,R6
04AB 1C37 ADC R3,R7
04AC 1C48 ADC R4,R8
04AD 1C59 ADC R5,R9
04AE 0181 MOVW R16,R2
04AF 0192 MOVW R18,R4
04B0 940E1528 CALL pop_gset2
04B2 9624 ADIW R28,4
04B3 9508 RET
_GetNextCluster:
Fat32_Entry --> Y+16
FatSectorOffset --> Y+12
FatSectorNum --> Y+8
Clust --> Y+24
04B4 940E1438 CALL push_arg4
04B6 940E154B CALL push_gset2
04B8 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);;
04B9 01FE MOVW R30,R28
04BA 8C20 LDD R2,Z+24
04BB 8C31 LDD R3,Z+25
04BC 8C42 LDD R4,Z+26
04BD 8C53 LDD R5,Z+27
04BE E044 LDI R20,4
04BF E050 LDI R21,0
04C0 E060 LDI R22,0
04C1 E070 LDI R23,0
04C2 925A ST R5,-Y
04C3 924A ST R4,-Y
04C4 923A ST R3,-Y
04C5 922A ST R2,-Y
04C6 018A MOVW R16,R20
04C7 019B MOVW R18,R22
04C8 940E14F8 CALL empy32s
04CA 90200281 LDS R2,0x281
04CC 90300282 LDS R3,0x282
04CE 2444 CLR R4
04CF 2455 CLR R5
04D0 925A ST R5,-Y
04D1 924A ST R4,-Y
04D2 923A ST R3,-Y
04D3 922A ST R2,-Y
04D4 940E1477 CALL div32u
04D6 90200284 LDS R2,0x284
04D8 90300285 LDS R3,0x285
04DA 2444 CLR R4
04DB 2455 CLR R5
04DC 908002B4 LDS R8,0x2B4
04DE 909002B5 LDS R9,0x2B5
04E0 906002B2 LDS R6,0x2B2
04E2 907002B3 LDS R7,0x2B3
04E4 0C62 ADD R6,R2
04E5 1C73 ADC R7,R3
04E6 1C84 ADC R8,R4
04E7 1C95 ADC R9,R5
04E8 0E60 ADD R6,R16
04E9 1E71 ADC R7,R17
04EA 1E82 ADC R8,R18
04EB 1E93 ADC R9,R19
04EC 01FE MOVW R30,R28
04ED 8660 STD Z+8,R6
04EE 8671 STD Z+9,R7
04EF 8682 STD Z+10,R8
04F0 8693 STD Z+11,R9
(0055) FatSectorOffset = (Clust * 4) % Boot.BytesPerSec;
04F1 8C20 LDD R2,Z+24
04F2 8C31 LDD R3,Z+25
04F3 8C42 LDD R4,Z+26
04F4 8C53 LDD R5,Z+27
04F5 E044 LDI R20,4
04F6 E050 LDI R21,0
04F7 E060 LDI R22,0
04F8 E070 LDI R23,0
04F9 925A ST R5,-Y
04FA 924A ST R4,-Y
04FB 923A ST R3,-Y
04FC 922A ST R2,-Y
04FD 018A MOVW R16,R20
04FE 019B MOVW R18,R22
04FF 940E14F8 CALL empy32s
0501 90200281 LDS R2,0x281
0503 90300282 LDS R3,0x282
0505 2444 CLR R4
0506 2455 CLR R5
0507 925A ST R5,-Y
0508 924A ST R4,-Y
0509 923A ST R3,-Y
050A 922A ST R2,-Y
050B 940E1479 CALL mod32u
050D 01FE MOVW R30,R28
050E 8704 STD Z+12,R16
050F 8715 STD Z+13,R17
0510 8726 STD Z+14,R18
0511 8737 STD Z+15,R19
(0056)
(0057) ata_read_sector_byte(0, FatSectorNum, FatSectorOffset, 4 , (unsigned char*)&Fat32_Entry);
0512 01CE MOVW R24,R28
0513 9640 ADIW R24,0x10
0514 839F STD Y+7,R25
0515 838E STD Y+6,R24
0516 E084 LDI R24,4
0517 E090 LDI R25,0
0518 839D STD Y+5,R25
0519 838C STD Y+4,R24
051A 8424 LDD R2,Z+12
051B 8435 LDD R3,Z+13
051C 823B STD Y+3,R3
051D 822A STD Y+2,R2
051E 8420 LDD R2,Z+8
051F 8431 LDD R3,Z+9
0520 8442 LDD R4,Z+10
0521 8453 LDD R5,Z+11
0522 8248 STD Y+0,R4
0523 8259 STD Y+1,R5
0524 0191 MOVW R18,R2
0525 2700 CLR R16
0526 940E025B CALL _ata_read_sector_byte
(0058)
(0059) return(Fat32_Entry & 0x0FFFFFFF);
0528 EF4F LDI R20,0xFF
0529 EF5F LDI R21,0xFF
052A EF6F LDI R22,0xFF
052B E07F LDI R23,0xF
052C 01FE MOVW R30,R28
052D 8820 LDD R2,Z+16
052E 8831 LDD R3,Z+17
052F 8842 LDD R4,Z+18
0530 8853 LDD R5,Z+19
0531 2224 AND R2,R20
0532 2235 AND R3,R21
0533 2246 AND R4,R22
0534 2257 AND R5,R23
0535 0181 MOVW R16,R2
0536 0192 MOVW R18,R4
0537 9664 ADIW R28,0x14
0538 940E1528 CALL pop_gset2
053A 9624 ADIW R28,4
053B 9508 RET
_GetDir:
k --> Y+9
NextCluster --> Y+49
LBA --> Y+45
LinePtr --> Y+44
i --> Y+40
LongFileName --> R12
Files --> Y+55
Offset --> Y+53
LongFilePtr --> R10
Entry --> Y+8
j --> R14
Display --> Y+75
Qte --> Y+73
From --> Y+71
Cluster --> Y+67
053C 940E1438 CALL push_arg4
053E 940E1557 CALL push_gset5
0540 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;
0541 01FE MOVW R30,R28
0542 5BED SUBI R30,0xBD
0543 4FFF SBCI R31,0xFF
0544 8020 LDD R2,Z+0
0545 8031 LDD R3,Z+1
0546 8042 LDD R4,Z+2
0547 8053 LDD R5,Z+3
0548 54E3 SUBI R30,0x43
0549 40F0 SBCI R31,0
054A AA21 STD Z+49,R2
054B AA32 STD Z+50,R3
054C AA43 STD Z+51,R4
054D AA54 STD Z+52,R5
(0081) Files = 0;
054E 2400 CLR R0
054F 2411 CLR R1
0550 AE18 STD Y+56,R1
0551 AA0F STD Y+55,R0
(0082) LinePtr = 0;
0552 2422 CLR R2
0553 A62C STD Y+44,R2
0554 C1DE RJMP 0x0733
(0083) while (1)
(0084) {
(0085) LBA = Clust2LBA(NextCluster);
0555 01FE MOVW R30,R28
0556 A901 LDD R16,Z+49
0557 A912 LDD R17,Z+50
0558 A923 LDD R18,Z+51
0559 A934 LDD R19,Z+52
055A DF27 RCALL _Clust2LBA
055B 01FE MOVW R30,R28
055C A705 STD Z+45,R16
055D A716 STD Z+46,R17
055E A727 STD Z+47,R18
055F AB30 STD Z+48,R19
(0086) for (i=0;i<Boot.SecPerClust;i++)
0560 E040 LDI R20,0
0561 E050 LDI R21,0
0562 E060 LDI R22,0
0563 E070 LDI R23,0
0564 A740 STD Z+40,R20
0565 A751 STD Z+41,R21
0566 A762 STD Z+42,R22
0567 A773 STD Z+43,R23
0568 C1A2 RJMP 0x070B
(0087) {
(0088) ata_read_sector_byte(0, LBA+i, 0, 512, (unsigned char*)&SectorBuffer);
0569 E882 LDI R24,0x82
056A E093 LDI R25,3
056B 839F STD Y+7,R25
056C 838E STD Y+6,R24
056D E080 LDI R24,0
056E E092 LDI R25,2
056F 839D STD Y+5,R25
0570 838C STD Y+4,R24
0571 2422 CLR R2
0572 2433 CLR R3
0573 823B STD Y+3,R3
0574 822A STD Y+2,R2
0575 01FE MOVW R30,R28
0576 A420 LDD R2,Z+40
0577 A431 LDD R3,Z+41
0578 A442 LDD R4,Z+42
0579 A453 LDD R5,Z+43
057A A465 LDD R6,Z+45
057B A476 LDD R7,Z+46
057C A487 LDD R8,Z+47
057D A890 LDD R9,Z+48
057E 0C62 ADD R6,R2
057F 1C73 ADC R7,R3
0580 1C84 ADC R8,R4
0581 1C95 ADC R9,R5
0582 8288 STD Y+0,R8
0583 8299 STD Y+1,R9
0584 0193 MOVW R18,R6
0585 2700 CLR R16
0586 940E025B CALL _ata_read_sector_byte
(0089) for (Offset=0;Offset<Boot.BytesPerSec;Offset=Offset+32)
0588 2400 CLR R0
0589 2411 CLR R1
058A AA1E STD Y+54,R1
058B AA0D STD Y+53,R0
058C C163 RJMP 0x06F0
(0090) {
(0091) memcpy((unsigned char*)&Entry,(unsigned char*)&SectorBuffer[Offset],sizeof(Entry));
058D E280 LDI R24,0x20
058E E090 LDI R25,0
058F 8399 STD Y+1,R25
0590 8388 STD Y+0,R24
0591 E882 LDI R24,0x82
0592 E093 LDI R25,3
0593 A92D LDD R18,Y+53
0594 A93E LDD R19,Y+54
0595 0F28 ADD R18,R24
0596 1F39 ADC R19,R25
0597 018E MOVW R16,R28
0598 5F08 SUBI R16,0xF8
0599 4F1F SBCI R17,0xFF
059A 940E13FF CALL _memcpy
(0092) if (Entry.Dir.Attributes == ATTR_LONG_FILENAME)
059C 898B LDD R24,Y+19
059D 308F CPI R24,0xF
059E F009 BEQ 0x05A0
059F C07C RJMP 0x061C
(0093) {
(0094) LongFileName = TRUE;
05A0 E081 LDI R24,1
05A1 E090 LDI R25,0
05A2 016C MOVW R12,R24
(0095) LongFilePtr = ((Entry.Win.Cnt & 0x3f) * 13) - 13;
05A3 8588 LDD R24,Y+8
05A4 738F ANDI R24,0x3F
05A5 E09D LDI R25,0xD
05A6 9F98 MUL R25,R24
05A7 01C0 MOVW R24,R0
05A8 970D SBIW R24,0xD
05A9 015C MOVW R10,R24
(0096) for (j=0;j<5;j++) File.Name[LongFilePtr++] = Entry.Win.Part1[j];
05AA 24EE CLR R14
05AB 24FF CLR R15
05AC C019 RJMP 0x05C6
05AD 0115 MOVW R2,R10
05AE 01C1 MOVW R24,R2
05AF 9601 ADIW R24,1
05B0 015C MOVW R10,R24
05B1 E002 LDI R16,2
05B2 E010 LDI R17,0
05B3 0197 MOVW R18,R14
05B4 940E14E8 CALL empy16s
05B6 01F8 MOVW R30,R16
05B7 01CE MOVW R24,R28
05B8 9609 ADIW R24,0x9
05B9 0FE8 ADD R30,R24
05BA 1FF9 ADC R31,R25
05BB 8040 LDD R4,Z+0
05BC 8051 LDD R5,Z+1
05BD E68A LDI R24,0x6A
05BE E091 LDI R25,1
05BF 01F1 MOVW R30,R2
05C0 0FE8 ADD R30,R24
05C1 1FF9 ADC R31,R25
05C2 8240 STD Z+0,R4
05C3 01C7 MOVW R24,R14
05C4 9601 ADIW R24,1
05C5 017C MOVW R14,R24
05C6 01C7 MOVW R24,R14
05C7 3085 CPI R24,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -