📄 fat.s
字号:
add R30,R24
adc R31,R25
std z+0,R4
L37:
.dbline 97
movw R24,R12
adiw R24,1
movw R12,R24
L39:
.dbline 97
; for (j=0;j<6;j++) File.Name[LongFilePtr++] = Entry.Win.Part2[j];
movw R24,R12
cpi R24,6
ldi R30,0
cpc R25,R30
brlo L36
.dbline 98
clr R12
clr R13
xjmp L44
L41:
.dbline 98
movw R2,R10
movw R24,R2
adiw R24,1
movw R10,R24
ldi R16,2
ldi R17,0
movw R18,R12
xcall empy16s
movw R30,R16
movw R24,R28
adiw R24,36
add R30,R24
adc R31,R25
ldd R4,z+0
ldd R5,z+1
ldi R24,<_File
ldi R25,>_File
movw R30,R2
add R30,R24
adc R31,R25
std z+0,R4
L42:
.dbline 98
movw R24,R12
adiw R24,1
movw R12,R24
L44:
.dbline 98
; for (j=0;j<2;j++) File.Name[LongFilePtr++] = Entry.Win.Part3[j];
movw R24,R12
cpi R24,2
ldi R30,0
cpc R25,R30
brlo L41
.dbline 99
; if (Entry.Win.Cnt & 0x40) File.Name[LongFilePtr++] = 0x00;
ldd R2,y+8
sbrs R2,6
rjmp L29
.dbline 99
movw R2,R10
movw R24,R2
adiw R24,1
movw R10,R24
ldi R24,<_File
ldi R25,>_File
movw R30,R2
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 100
; }
xjmp L29
L28:
.dbline 102
; else
; {
.dbline 103
; if ((Entry.Dir.Name[0] != SLOT_DELETED) && ((Entry.Dir.Attributes & 0x0e) == 0x00))
ldd R24,y+8
cpi R24,229
brne X2
xjmp L48
X2:
ldd R24,y+19
andi R24,14
breq X3
xjmp L48
X3:
.dbline 104
; {
.dbline 105
; if (LongFileName == FALSE)
tst R14
brne L51
tst R15
brne L51
X0:
.dbline 106
; {
.dbline 107
clr R12
clr R13
xjmp L56
L53:
.dbline 107
movw R24,R28
adiw R24,8
movw R30,R12
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_File
ldi R25,>_File
movw R30,R12
add R30,R24
adc R31,R25
std z+0,R2
L54:
.dbline 107
movw R24,R12
adiw R24,1
movw R12,R24
L56:
.dbline 107
; for (j=0;j<8;j++) File.Name[j] = Entry.Dir.Name[j];
movw R24,R12
cpi R24,8
ldi R30,0
cpc R25,R30
brlo L53
.dbline 108
; File.Name[8] = 0x00;
clr R2
sts _File+8,R2
.dbline 109
; }
L51:
.dbline 110
; File.FirstClust = Entry.Dir.FirstClustHi;
ldd R2,y+28
ldd R3,y+29
clr R4
clr R5
sts _File+260+1,R3
sts _File+260,R2
sts _File+260+2+1,R5
sts _File+260+2,R4
.dbline 111
; File.FirstClust = (File.FirstClust << 16) + Entry.Dir.FirstClustLo;
ldd R2,y+34
ldd R3,y+35
clr R4
clr R5
lds R8,_File+260+2
lds R9,_File+260+2+1
lds R6,_File+260
lds R7,_File+260+1
movw R8,R6
clr R6
clr R7
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
sts _File+260+1,R7
sts _File+260,R6
sts _File+260+2+1,R9
sts _File+260+2,R8
.dbline 112
; File.FileSize = Entry.Dir.FileSize;
movw R30,R28
ldd R2,z+36
ldd R3,z+37
ldd R4,z+38
ldd R5,z+39
sts _File+264+1,R3
sts _File+264,R2
sts _File+264+2+1,R5
sts _File+264+2,R4
.dbline 113
; File.Attr = Entry.Dir.Attributes;
ldd R2,y+19
sts _File+259,R2
.dbline 114
; if ((File.FirstClust == 0) &&
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
cp R6,R20
cpc R7,R21
cpc R8,R22
cpc R9,R23
brne L67
mov R24,R2
cpi R24,16
brne L67
.dbline 115
; (File.Attr == ATTR_DIRECTORY)) File.FirstClust = 2; // Don't know why?
ldi R20,2
ldi R21,0
ldi R22,0
ldi R23,0
sts _File+260+1,R21
sts _File+260,R20
sts _File+260+2+1,R23
sts _File+260+2,R22
L67:
.dbline 116
; LongFileName = FALSE;
clr R14
clr R15
.dbline 118
;
; if ((File.FirstClust == 0) && (File.Attr == ATTR_NORMAL)) return Files;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_File+260+2
lds R5,_File+260+2+1
lds R2,_File+260
lds R3,_File+260+1
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brne L72
lds R2,_File+259
tst R2
brne L72
.dbline 118
ldd R16,y+55
ldd R17,y+56
xjmp L14
L72:
.dbline 119
; if ((Files >= From) && (Files < (From + Qte)) && (Display == TRUE)) DisplayFiles(&LinePtr);
ldd R0,y+55
ldd R1,y+56
movw R30,R28
subi R30,185 ; addi 71
sbci R31,255
ldd R16,z+0
ldd R17,z+1
cp R0,R16
cpc R1,R17
brlo L76
movw R2,R16
movw R30,R28
subi R30,183 ; addi 73
sbci R31,255
ldd R0,z+0
ldd R1,z+1
add R2,R0
adc R3,R1
ldd R0,y+55
ldd R1,y+56
cp R0,R2
cpc R1,R3
brsh L76
movw R30,R28
subi R30,181 ; addi 75
sbci R31,255
ldd R24,z+0
ldd R25,z+1
cpi R24,1
ldi R30,0
cpc R25,R30
brne L76
.dbline 119
movw R16,R28
subi R16,212 ; offset = 44
sbci R17,255
xcall _DisplayFiles
L76:
.dbline 120
; if (Files == (From + Qte - 1)) return Files;
movw R30,R28
subi R30,185 ; addi 71
sbci R31,255
ldd R24,z+0
ldd R25,z+1
movw R30,R28
subi R30,183 ; addi 73
sbci R31,255
ldd R0,z+0
ldd R1,z+1
add R24,R0
adc R25,R1
sbiw R24,1
ldd R0,y+55
ldd R1,y+56
cp R0,R24
cpc R1,R25
brne L78
.dbline 120
movw R16,R0
xjmp L14
L78:
.dbline 121
; Files++;
ldd R24,y+55
ldd R25,y+56
adiw R24,1
std y+56,R25
std y+55,R24
.dbline 122
; }
xjmp L49
L48:
.dbline 123
; else LongFileName = FALSE;
clr R14
clr R15
L49:
.dbline 124
; }
L29:
.dbline 125
L24:
.dbline 89
ldd R24,y+53
ldd R25,y+54
adiw R24,32
std y+54,R25
std y+53,R24
L26:
.dbline 89
lds R2,_Boot+11
lds R3,_Boot+11+1
ldd R0,y+53
ldd R1,y+54
cp R0,R2
cpc R1,R3
brsh X4
xjmp L23
X4:
.dbline 126
L19:
.dbline 86
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
movw R30,R28
std z+40,R2
std z+41,R3
std z+42,R4
std z+43,R5
L21:
.dbline 86
lds R2,_Boot+13
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+40
ldd R7,z+41
ldd R8,z+42
ldd R9,z+43
cp R6,R2
cpc R7,R3
cpc R8,R4
cpc R9,R5
brsh X5
xjmp L18
X5:
.dbline 127
; }
; }
; NextCluster = GetNextCluster(NextCluster);
movw R30,R28
ldd R16,z+49
ldd R17,z+50
ldd R18,z+51
ldd R19,z+52
xcall _GetNextCluster
movw R30,R28
std z+49,R16
std z+50,R17
std z+51,R18
std z+52,R19
.dbline 128
; if (NextCluster > CLUST_RSRVD) break;
ldi R20,246
ldi R21,255
ldi R22,255
ldi R23,15
movw R30,R28
ldd R2,z+49
ldd R3,z+50
ldd R4,z+51
ldd R5,z+52
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brsh L80
.dbline 128
xjmp L17
L80:
.dbline 129
L16:
.dbline 83
xjmp L15
L17:
.dbline 130
; }
; return Files;
ldd R16,y+55
ldd R17,y+56
.dbline -2
L14:
adiw R28,57
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l k 9 i
.dbsym l NextCluster 49 l
.dbsym l LBA 45 l
.dbsym l LinePtr 44 c
.dbsym l i 40 l
.dbsym r LongFileName 14 i
.dbsym l Files 55 i
.dbsym l Offset 53 i
.dbsym r LongFilePtr 10 i
.dbsym l Entry 8 X
.dbsym r j 12 i
.dbsym l Display 75 i
.dbsym l Qte 73 i
.dbsym l From 71 i
.dbsym l Cluster 67 l
.dbend
.dbfunc e DisplayFiles _DisplayFiles fV
; i -> R20,R21
; j -> R10,R11
; LinePtr -> R22,R23
.even
_DisplayFiles::
xcall push_gset3
movw R22,R16
.dbline -1
.dbline 138
; }
;
; //*************************************
; // void DisplayFiles(unsigned int FileNum)
; //
; //*************************************
; void DisplayFiles(unsigned char *LinePtr)
; {
.dbline 142
; extern unsigned char RemoteTextLine[5][40];
; int i,j;
;
; if (*LinePtr == 0)
movw R30,R22
ldd R2,z+0
tst R2
brne L83
.dbline 143
; {
.dbline 144
; for (i=0;i<5;i++) // Clear all FileName in the commun buffer
clr R20
clr R21
L85:
.dbline 145
; {
.dbline 146
clr R10
clr R11
L89:
.dbline 146
ldi R16,40
ldi R17,0
movw R18,R20
xcall empy16s
movw R2,R16
ldi R24,<_RemoteTextLine
ldi R25,>_RemoteTextLine
add R2,R24
adc R3,R25
movw R30,R10
add R30,R2
adc R31,R3
clr R2
std z+0,R2
L90:
.dbline 146
movw R24,R10
adiw R24,1
movw R10,R24
.dbline 146
cpi R24,40
ldi R30,0
cpc R25,R30
brlt L89
.dbline 147
L86:
.dbline 144
subi R20,255 ; offset = 1
sbci R21,255
.dbline 144
cpi R20,5
ldi R30,0
cpc R21,R30
brlt L85
.dbline 148
; for (j=0;j<40;j++) RemoteTextLine[i][j] = 0x00;
; }
; }
L83:
.dbline 150
;
; File.Name[39] = 0x00;
clr R2
sts _File+39,R2
.dbline 151
clr R20
clr R21
L94:
.dbline 151
movw R30,R22
ldd R2,z+0
ldi R24,40
mul R24,R2
movw R2,R0
ldi R24,<_RemoteTextLine
ldi R25,>_RemoteTextLine
add R2,R24
adc R3,R25
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_File
ldi R25,>_File
movw R26,R20
add R26,R24
adc R27,R25
ld R2,x
std z+0,R2
L95:
.dbline 151
; for (i=0;i<40;i++) RemoteTextLine[*LinePtr][i] = File.Name[i];
subi R20,255 ; offset = 1
sbci R21,255
.dbline 151
cpi R20,40
ldi R30,0
cpc R21,R30
brlt L94
.dbline 152
; (*LinePtr)++;
movw R30,R22
ldd R24,z+0
subi R24,255 ; addi 1
std z+0,R24
.dbline -2
L82:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r j 10 I
.dbsym r LinePtr 22 pc
.dbend
.area bss(ram, con, rel)
.dbfile G:\IccPro\Mp3Ide\fat.c
_FirstDataSector::
.blkb 4
.dbsym e FirstDataSector _FirstDataSector l
_File::
.blkb 268
.dbsym e File _File X
_Boot::
.blkb 52
.dbsym e Boot _Boot X
_Part::
.blkb 16
.dbsym e Part _Part X
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -