📄 fat16.s
字号:
_GetNextmp3:
rcall push_gset3
.dbline -1
.dbline 160
; }
;
; uint16 GetNextmp3()
; {
.dbline 163
; uint16 DirSecCut, DirStart;
; uint8 i,m;
; DirSecCut = GetDirSecCount();
rcall _GetDirSecCount
movw R20,R16
rjmp L36
L35:
.dbline 165
; while(fileindex<=512)
; {
.dbline 166
; if(flag) fileindex++;
lds R2,_flag
tst R2
breq L38
.dbline 166
lds R24,_fileindex
lds R25,_fileindex+1
adiw R24,1
sts _fileindex+1,R25
sts _fileindex,R24
rjmp L39
L38:
.dbline 167
; else fileindex--;
lds R24,_fileindex
lds R25,_fileindex+1
sbiw R24,1
sts _fileindex+1,R25
sts _fileindex,R24
L39:
.dbline 168
; if(fileindex<=1) fileindex=510;
ldi R24,1
ldi R25,0
lds R2,_fileindex
lds R3,_fileindex+1
cp R24,R2
cpc R25,R3
brlo L40
.dbline 168
ldi R24,510
ldi R25,1
sts _fileindex+1,R25
sts _fileindex,R24
L40:
.dbline 169
; if(fileindex>=511)fileindex=2;
lds R24,_fileindex
lds R25,_fileindex+1
cpi R24,255
ldi R30,1
cpc R25,R30
brlo L42
.dbline 169
ldi R24,2
ldi R25,0
sts _fileindex+1,R25
sts _fileindex,R24
L42:
.dbline 170
; i=fileindex/16;
lds R22,_fileindex
lds R23,_fileindex+1
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
.dbline 171
; DirStart = DirStartSec();
rcall _DirStartSec
movw R10,R16
.dbline 172
; ReadBlock(DirStart + i);
mov R2,R22
clr R3
movw R4,R10
add R4,R2
adc R5,R3
movw R2,R4
clr R4
clr R5
movw R16,R2
movw R18,R4
rcall _ReadBlock
.dbline 173
; m=(fileindex%16);
lds R20,_fileindex
andi R20,15
andi R21,0
.dbline 174
; if(Ismp3(&((DIR*)&BUFFER[m * 32])->FileName))
ldi R24,32
mul R24,R20
movw R16,R0
ldi R24,<_BUFFER
ldi R25,>_BUFFER
add R16,R24
adc R17,R25
rcall _Ismp3
tst R16
breq L44
.dbline 175
; {
.dbline 176
; *(&fileid) = *((DIR*)&BUFFER[m * 32]);
ldi R24,32
mul R24,R20
movw R2,R0
ldi R24,<_BUFFER
ldi R25,>_BUFFER
add R2,R24
adc R3,R25
ldi R24,<_fileid
ldi R25,>_fileid
ldi R16,32
ldi R17,0
st -y,R25
st -y,R24
st -y,R3
st -y,R2
rcall asgnblk
.dbline 177
; return 1; //找到对应的目录项,返回位置
ldi R16,1
ldi R17,0
rjmp L34
L44:
.dbline 179
L36:
.dbline 164
ldi R24,512
ldi R25,2
lds R2,_fileindex
lds R3,_fileindex+1
cp R24,R2
cpc R25,R3
brlo X0
rjmp L35
X0:
.dbline -2
L34:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r DirSecCut 20 i
.dbsym r i 22 c
.dbsym r DirStart 10 i
.dbsym r m 20 c
.dbend
.dbfunc s GetFileID _GetFileID fc
.dbstruct 0 6 .2
.dbfield 0 Start i
.dbfield 2 Size l
.dbend
.dbstruct 0 32 .3
.dbfield 0 FileName A[11:11]c
.dbfield 11 FileAttrib c
.dbfield 12 UnUsed A[10:10]c
.dbfield 22 FileUpdateTime A[2:2]c
.dbfield 24 FileUpdateData A[2:2]c
.dbfield 26 FilePosit S[.2]
.dbend
; DirStart -> R20,R21
; DirSecCut -> R22,R23
; i -> R10,R11
; m -> R14,R15
; ID -> R12,R13
; Name -> y+11
.even
_GetFileID:
rcall push_arg4
rcall push_gset5
movw R12,R18
sbiw R28,1
.dbline -1
.dbline 183
; }
; }
; }
; static uint8 GetFileID(uint8 Name[11],DIR* ID)
; //********************************************************************************************
; {
.dbline 185
; uint16 DirSecCut, DirStart, i, m;
; DirSecCut = GetDirSecCount();
rcall _GetDirSecCount
movw R22,R16
.dbline 186
; DirStart = DirStartSec();
rcall _DirStartSec
movw R20,R16
.dbline 187
; for(i = 0; i < DirSecCut; i++)
clr R10
clr R11
rjmp L50
L47:
.dbline 188
; {
.dbline 189
; ReadBlock(DirStart + i);
movw R2,R20
add R2,R10
adc R3,R11
clr R4
clr R5
movw R16,R2
movw R18,R4
rcall _ReadBlock
.dbline 190
; for(m = 0; m <16; m++)
clr R14
clr R15
rjmp L54
L51:
.dbline 191
; {
.dbline 192
; if(IsEqual(Name, &((DIR*)&BUFFER[m * 32])->FileName, 11))
ldi R24,11
std y+0,R24
ldi R16,32
ldi R17,0
movw R18,R14
rcall empy16s
movw R18,R16
ldi R24,<_BUFFER
ldi R25,>_BUFFER
add R18,R24
adc R19,R25
ldd R16,y+11
ldd R17,y+12
rcall _IsEqual
tst R16
breq L55
.dbline 193
; {
.dbline 194
; *ID = *((DIR*)&BUFFER[m * 32]);
ldi R16,32
ldi R17,0
movw R18,R14
rcall empy16s
movw R2,R16
ldi R24,<_BUFFER
ldi R25,>_BUFFER
add R2,R24
adc R3,R25
ldi R16,32
ldi R17,0
st -y,R13
st -y,R12
st -y,R3
st -y,R2
rcall asgnblk
.dbline 195
; return 1; //找到对应的目录项,返回1
ldi R16,1
rjmp L46
L55:
.dbline 197
L52:
.dbline 190
movw R24,R14
adiw R24,1
movw R14,R24
L54:
.dbline 190
movw R24,R14
cpi R24,16
ldi R30,0
cpc R25,R30
brlo L51
.dbline 198
L48:
.dbline 187
movw R24,R10
adiw R24,1
movw R10,R24
L50:
.dbline 187
cp R10,R22
cpc R11,R23
brsh X1
rjmp L47
X1:
.dbline 199
; }
; }
; }
; return 0; //没有找到对应的目录项,返回0
clr R16
.dbline -2
L46:
adiw R28,1
rcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r DirStart 20 i
.dbsym r DirSecCut 22 i
.dbsym r i 10 i
.dbsym r m 14 i
.dbsym r ID 12 pS[.3]
.dbsym l Name 11 pc
.dbend
.area bss(ram, con, rel)
.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
L58:
.blkb 2
L59:
.blkb 2
L60:
.blkb 2
.area data(ram, con, rel)
.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
L61:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
.area bss(ram, con, rel)
.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
L62:
.blkb 2
L63:
.blkb 11
L64:
.blkb 1
.area data(ram, con, rel)
.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
L65:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
.area text(rom, con, rel)
.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
.dbfunc e Readfile _Readfile fc
.dbsym s j L65 c
.dbsym s i L64 c
.dbsym s filename L63 A[11:11]c
.dbsym s m L62 i
.dbsym s pointer L61 i
.dbsym s p L60 i
.dbsym s t L59 i
.dbsym s r L58 i
; DirStart -> <dead>
; lenth -> y+21
; count -> R10,R11
; BytePerClus -> R10,R11
; ClusNum -> R12,R13
; unicodename -> y+5
; NextClus -> R10,R11
; LBA -> y+1
.even
_Readfile::
rcall push_gset4
sbiw R28,25
.dbline -1
.dbline 202
; }
; static uint8 Readfile()
; {
.dbline 206
; static uint16 r,t,p,pointer=0,m;
; static uint8 filename[11],i,j=0;
; uint8 unicodename[16];
; uint16 BytePerClus, ClusNum,NextClus,count=0,DirStart;
clr R10
clr R11
.dbline 208
; uint32 LBA,lenth;
; if(fileid.FileName[7]==0x31)
lds R24,_fileid+7
cpi R24,49
breq X2
rjmp L66
X2:
.dbline 209
; {
.dbline 210
; t=0;
clr R2
clr R3
sts L59+1,R3
sts L59,R2
.dbline 211
; longfileflag=1;
ldi R24,1
sts _longfileflag,R24
.dbline 212
; count=fileindex-1;
lds R24,_fileindex
lds R25,_fileindex+1
sbiw R24,1
movw R10,R24
.dbline 213
; m=count%16;
andi R24,15
andi R25,0
sts L62+1,R25
sts L62,R24
.dbline 214
; m<<=5;
ldi R18,5
ldi R19,0
movw R16,R24
rcall lsl16
sts L62+1,R17
sts L62,R16
.dbline 215
; for(i=0;i<16;i++)
clr R2
sts L64,R2
rjmp L72
L69:
.dbline 216
; {
.dbline 217
; if(i<10)unicodename[i]=BUFFER[m+i+1];
lds R24,L64
cpi R24,10
brsh L73
.dbline 217
mov R2,R24
clr R3
lds R30,L62
lds R31,L62+1
add R30,R2
adc R31,R3
adiw R30,1
ldi R24,<_BUFFER
ldi R25,>_BUFFER
add R30,R24
adc R31,R25
ldd R2,z+0
movw R24,R28
adiw R24,5
lds R30,L64
clr R31
add R30,R24
adc R31,R25
std z+0,R2
rjmp L74
L73:
.dbline 218
; else unicodename[i]=BUFFER[m+i+4];
lds R2,L64
clr R3
lds R30,L62
lds R31,L62+1
add R30,R2
adc R31,R3
adiw R30,4
ldi R24,<_BUFFER
ldi R25,>_BUFFER
add R30,R24
adc R31,R25
ldd R2,z+0
movw R24,R28
adiw R24,5
lds R30,L64
clr R31
add R30,R24
adc R31,R25
std z+0,R2
L74:
.dbline 219
; if((BUFFER[m+1+i]==0x2E)&&(BUFFER[m+2+i]==0))
lds R2,L64
clr R3
lds R30,L62
lds R31,L62+1
adiw R30,1
add R30,R2
adc R31,R3
ldi R24,<_BUFFER
ldi R25,>_BUFFER
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,46
brne L75
lds R30,L62
lds R31,L62+1
adiw R30,2
add R30,R2
adc R31,R3
ldi R24,<_BUFFER
ldi R25,>_BUFFER
add R30,R24
adc R31,R25
ldd R2,z+0
tst R2
brne L75
.dbline 220
; {
rjmp L78
L77:
.dbline 222
.dbline 223
lds R2,L64
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts L64,R24
movw R24,R28
adiw R24,5
mov R30,R2
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 224
L78:
.dbline 221
; while(i<16)
lds R24,L64
cpi R24,16
brlo L77
.dbline 225
; {
; unicodename[i++]=0;
; }
; break;
rjmp L71
L75:
.dbline 227
L70:
.dbline 215
lds R24,L64
subi R24,255 ; addi 1
sts L64,R24
L72:
.dbline 215
lds R24,L64
cpi R24,16
brsh X3
rjmp L69
X3:
L71:
.dbline 228
; }
; }
; for(i=0;i<16;i+=2)
clr R2
sts L64,R2
rjmp L83
L80:
.dbline 229
; {
.dbline 230
; if(i<8)
lds R24,L64
cpi R24,8
brsh L84
.dbline 231
; {
.dbline 232
; show(unicodename+i,(uint8)t,0);
clr R2
std y+0,R2
lds R18,L59
movw R24,R28
adiw R24,5
lds R16,L64
clr R17
add R16,R24
adc R17,R25
rcall _show
.dbline 233
; }
rjmp L85
L84:
.dbline 235
; else
; {
.dbline 236
; show(unicodename+i,(uint8)t-60,1);
ldi R24,1
std y+0,R24
lds R18,L59
subi R18,60
movw R24,R28
adiw R24,5
lds R16,L64
clr R17
add R16,R24
adc R17,R25
rcall _show
.dbline 237
; }
L85:
.dbline 238
lds R24,L59
lds R25,L59+1
adiw R24,15
sts L59+1,R25
sts L59,R24
.dbline 239
L81:
.dbline 228
lds R24,L64
subi R24,254 ; addi 2
sts L64,R24
L83:
.dbline 228
lds R24,L64
cpi R24,16
brlo L80
.dbline 240
; t+=15;
; }
; }
rjmp L67
L66:
.dbline 242
; else
; {
.dbline 243
; t=0;
clr R2
clr R3
sts L59+1,R3
sts L59,R2
.dbline 244
; longfileflag=0;
sts _longfileflag,R2
.dbline 245
; for(r=0;r<16;r+=2)
sts L58+1,R3
sts L58,R2
rjmp L89
L86:
.dbline 246
; {
.dbline 247
; if(r<8)show(fileid.FileName+r,(uint8)t,0);
lds R24,L58
lds R25,L58+1
cpi R24,8
ldi R30,0
cpc R25,R30
brsh L90
.dbline 247
clr R2
std y+0,R2
lds R18,L59
ldi R24,<_fileid
ldi R25,>_fileid
lds R16,L58
lds R17,L58+1
add R16,R24
adc R17,R25
rcall _show
rjmp L91
L90:
.dbline 248
; else show(zero,(uint8)t-60,1);
ldi R24,1
std y+0,R24
lds R18,L59
subi R18,60
ldi R16,<_zero
ldi R17,>_zero
rcall _show
L91:
.dbline 249
lds R24,L59
lds R25,L59+1
adiw R24,15
sts L59+1,R25
sts L59,R24
.dbline 250
L87:
.dbline 245
lds R24,L58
lds R25,L58+1
adiw R24,2
sts L58+1,R25
sts L58,R24
L89:
.dbline 245
lds R24,L58
lds R25,L58+1
cpi R24,16
ldi R30,0
cpc R25,R30
brlo L86
.dbline 251
; t+=15;
; }
; }
L67:
.dbline 252
; FileIndex.ClusID=fileid.FilePosit.Start;
lds R2,_fileid+26
lds R3,_fileid+26+1
sts _FileIndex+2+1,R3
sts _FileIndex+2,R2
.dbline 253
; LBA=ClusConvLBA(FileIndex.ClusID);
lds R16,_FileIndex+2
lds R17,_FileIndex+2+1
rcall _ClusConvLBA
movw R30,R28
std z+1,R16
std z+2,R17
std z+3,R18
std z+4,R19
.dbline 254
; lenth=fileid.FilePosit.Size;
lds R4,_fileid+26+2+2
lds R5,_fileid+26+2+2+1
lds R2,_fileid+26+2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -