📄 fat.s
字号:
cp R3,R2
brne L155
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L156
L155:
clr R10
clr R11
L156:
movw R2,R12
and R2,R10
and R3,R11
tst R2
brne X8
tst R3
breq L149
X8:
.dbline 170
; {
.dbline 171
; mp3_info.NAME[j]=Read_number+((int)i<<7);
ldi R18,7
ldi R19,0
ldd R16,y+11
clr R17
xcall lsl16
ldd R4,y+8
ldd R5,y+9
add R4,R16
adc R5,R17
ldi R24,2
ldd R0,y+10
mul R24,R0
movw R30,R0
ldi R24,<_mp3_info
ldi R25,>_mp3_info
add R30,R24
adc R31,R25
std z+1,R5
std z+0,R4
.dbline 172
; i=40;
ldi R24,40
std y+11,R24
.dbline 173
; break;
xjmp L147
L149:
.dbline 175
L146:
.dbline 167
ldd R24,y+8
ldd R25,y+9
adiw R24,1
std y+9,R25
std y+8,R24
L148:
.dbline 167
ldd R24,y+8
ldd R25,y+9
cpi R24,128
ldi R30,0
cpc R25,R30
brsh X17
xjmp L145
X17:
L147:
.dbline 176
L142:
.dbline 164
ldd R0,y+11
inc R0
std y+11,R0
L144:
.dbline 164
ldd R24,y+11
cpi R24,31
brsh X18
xjmp L141
X18:
.dbline 177
; }
; }
; }
; if(i!=41)
cpi R24,41
breq L157
.dbline 178
; mp3_info.NAME[j]=0x000A; //OFFSET.0x3e是*
ldi R24,2
ldd R0,y+10
mul R24,R0
movw R30,R0
ldi R24,<_mp3_info
ldi R25,>_mp3_info
add R30,R24
adc R31,R25
ldi R24,10
ldi R25,0
std z+1,R25
std z+0,R24
L157:
.dbline 179
L128:
.dbline 160
ldd R0,y+10
inc R0
std y+10,R0
L130:
.dbline 160
lds R2,_mp3_info+52
ldd R0,y+10
cp R0,R2
brsh X19
xjmp L127
X19:
.dbline 180
; }
; }
L102:
.dbline 181
; counter--;
ldd R0,y+12
dec R0
std y+12,R0
.dbline 182
; }
.dbline 183
; }
xjmp L68
L67:
.dbline 184
; else if((buffer[0]!=0XE5)&(buffer[8]==0x4D)&(buffer[9]==0x50)&(buffer[10]==0x33))
lds R24,_buffer
cpi R24,229
breq L164
ldi R24,1
ldi R25,0
std y+16,R25
std y+15,R24
xjmp L165
L164:
clr R0
clr R1
std y+16,R1
std y+15,R0
L165:
lds R24,_buffer+8
cpi R24,77
brne L166
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L167
L166:
clr R14
clr R15
L167:
lds R24,_buffer+9
cpi R24,80
brne L168
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L169
L168:
clr R10
clr R11
L169:
lds R24,_buffer+10
cpi R24,51
brne L170
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L171
L170:
clr R12
clr R13
L171:
ldd R2,y+15
ldd R3,y+16
and R2,R14
and R3,R15
and R2,R10
and R3,R11
and R2,R12
and R3,R13
tst R2
brne X9
tst R3
breq L159
X9:
.dbline 185
; {//处理数据了。
.dbline 188
; //mp3_info.Name_number=0;
;
; mp3_info.DIR_FstClusL[0]=buffer[26];
lds R2,_buffer+26
sts _mp3_info+53,R2
.dbline 189
; mp3_info.DIR_FstClusL[1]=buffer[27];
lds R2,_buffer+27
sts _mp3_info+53+1,R2
.dbline 192
;
; //mp3_info.DIR_Filesize[0]=buffer[28];
; mp3_info.DIR_Filesize[0]=buffer[29];
lds R2,_buffer+29
sts _mp3_info+55,R2
.dbline 193
; mp3_info.DIR_Filesize[1]=buffer[30];
lds R2,_buffer+30
sts _mp3_info+55+1,R2
.dbline 196
; //mp3_info.DIR_Filesize[3]=buffer[31];
;
; counter--;
ldd R0,y+12
dec R0
std y+12,R0
.dbline 197
; }
L159:
L68:
L53:
.dbline 199
L50:
.dbline 121
ldd R0,y+12
tst R0
breq X20
xjmp L49
X20:
.dbline -2
L46:
adiw R28,17
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l counter 12 c
.dbsym l mulu_Clus_number 4 l
.dbsym l i 11 c
.dbsym l j 10 c
.dbsym l Read_number 8 i
.dbsym r number 10 c
.dbend
.dbfunc e DAT_Directory _DAT_Directory fV
; Read_number -> y+8
; mulu_Clus_number -> y+4
.even
_DAT_Directory::
xcall push_gset5
sbiw R28,12
.dbline -1
.dbline 205
;
; }
;
; }
;
; //=======================================================================
; void DAT_Directory(void)
; {
.dbline 210
;
; uint16 Read_number;
; uint32 mulu_Clus_number;
;
; Read_number=0;
clr R0
clr R1
std y+9,R1
std y+8,R0
.dbline 211
; mulu_Clus_number=fat_info.Firstgengmulu;
lds R2,_fat_info+3
lds R3,_fat_info+3+1
clr R4
clr R5
movw R30,R28
std z+4,R2
std z+5,R3
std z+6,R4
std z+7,R5
.dbline 212
; mulu_Clus_number<<=9;
ldi R24,9
ldi R25,0
movw R30,R28
ldd R2,z+4
ldd R3,z+5
ldd R4,z+6
ldd R5,z+7
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
movw R30,R28
std z+4,R16
std z+5,R17
std z+6,R18
std z+7,R19
xjmp L185
L184:
.dbline 215
;
; while(1)
; {
.dbline 216
; SD_read_sector2(mulu_Clus_number+((long)(Read_number++)<<5),buffer,32);
ldi R24,32
ldi R25,0
std y+3,R25
std y+2,R24
ldi R24,<_buffer
ldi R25,>_buffer
std y+1,R25
std y+0,R24
ldd R2,y+8
ldd R3,y+9
movw R24,R2
adiw R24,1
std y+9,R25
std y+8,R24
ldi R24,5
ldi R25,0
clr R4
clr R5
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
movw R30,R28
ldd R2,z+4
ldd R3,z+5
ldd R4,z+6
ldd R5,z+7
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
movw R16,R2
movw R18,R4
xcall _SD_read_sector2
.dbline 217
; if((buffer[0]!=0XE5)&(buffer[8]==0x44)&(buffer[9]==0x41)&(buffer[10]==0x54))
lds R24,_buffer
cpi R24,229
breq L192
ldi R24,1
ldi R25,0
std y+11,R25
std y+10,R24
xjmp L193
L192:
clr R0
clr R1
std y+11,R1
std y+10,R0
L193:
lds R24,_buffer+8
cpi R24,68
brne L194
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L195
L194:
clr R14
clr R15
L195:
lds R24,_buffer+9
cpi R24,65
brne L196
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L197
L196:
clr R12
clr R13
L197:
lds R24,_buffer+10
cpi R24,84
brne L198
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L199
L198:
clr R10
clr R11
L199:
ldd R2,y+10
ldd R3,y+11
and R2,R14
and R3,R15
and R2,R12
and R3,R13
and R2,R10
and R3,R11
tst R2
brne X21
tst R3
brne X24
xjmp L187
X24:
X21:
.dbline 218
; {
.dbline 219
; if((buffer[0]==0X55)&(buffer[1]==0x4e)&(buffer[2]==0x49))
lds R24,_buffer
cpi R24,85
brne L204
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L205
L204:
clr R14
clr R15
L205:
lds R24,_buffer+1
cpi R24,78
brne L206
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L207
L206:
clr R12
clr R13
L207:
lds R24,_buffer+2
cpi R24,73
brne L208
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L209
L208:
clr R10
clr R11
L209:
movw R2,R14
and R2,R12
and R3,R13
and R2,R10
and R3,R11
tst R2
brne X22
tst R3
brne X25
xjmp L200
X25:
X22:
.dbline 220
; {UNICODE_point=(((long)buffer[27]<<8)+buffer[26]-2)*(fat_info.BPB_SecPerClus)+fat_info.FirstDateSecter; //簇的头扇区号
.dbline 220
ldi R24,8
ldi R25,0
lds R2,_buffer+27
clr R3
clr R4
clr R5
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
movw R2,R16
movw R4,R18
lds R6,_buffer+26
clr R7
clr R8
clr R9
add R2,R6
adc R3,R7
adc R4,R8
adc R5,R9
ldi R20,2
ldi R21,0
ldi R22,0
ldi R23,0
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
lds R6,_fat_info+1
clr R7
clr R8
clr R9
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R16,R2
movw R18,R4
xcall empy32s
movw R2,R16
movw R4,R18
lds R6,_fat_info+5
lds R7,_fat_info+5+1
clr R8
clr R9
add R2,R6
adc R3,R7
adc R4,R8
adc R5,R9
sts _UNICODE_point+1,R3
sts _UNICODE_point,R2
sts _UNICODE_point+2+1,R5
sts _UNICODE_point+2,R4
.dbline 221
; UNICODE_point<<=9;
ldi R24,9
ldi R25,0
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
sts _UNICODE_point+1,R17
sts _UNICODE_point,R16
sts _UNICODE_point+2+1,R19
sts _UNICODE_point+2,R18
.dbline 222
; }
xjmp L201
L200:
.dbline 223
; else if((buffer[0]==0X43)&(buffer[1]==0x48)&(buffer[2]==0x49))
lds R24,_buffer
cpi R24,67
brne L218
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L219
L218:
clr R10
clr R11
L219:
lds R24,_buffer+1
cpi R24,72
brne L220
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L221
L220:
clr R14
clr R15
L221:
lds R24,_buffer+2
cpi R24,73
brne L222
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L223
L222:
clr R12
clr R13
L223:
movw R2,R10
and R2,R14
and R3,R15
and R2,R12
and R3,R13
tst R2
brne X23
tst R3
brne X26
xjmp L214
X26:
X23:
.dbline 224
; {CHINALIB_point=(((long)buffer[27]<<8)+buffer[26]-2)*(fat_info.BPB_SecPerClus)+fat_info.FirstDateSecter; //簇的头扇区号
.dbline 224
ldi R24,8
ldi R25,0
lds R2,_buffer+27
clr R3
clr R4
clr R5
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
movw R2,R16
movw R4,R18
lds R6,_buffer+26
clr R7
clr R8
clr R9
add R2,R6
adc R3,R7
adc R4,R8
adc R5,R9
ldi R20,2
ldi R21,0
ldi R22,0
ldi R23,0
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
lds R6,_fat_info+1
clr R7
clr R8
clr R9
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R16,R2
movw R18,R4
xcall empy32s
movw R2,R16
movw R4,R18
lds R6,_fat_info+5
lds R7,_fat_info+5+1
clr R8
clr R9
add R2,R6
adc R3,R7
adc R4,R8
adc R5,R9
sts _CHINALIB_point+1,R3
sts _CHINALIB_point,R2
sts _CHINALIB_point+2+1,R5
sts _CHINALIB_point+2,R4
.dbline 225
; CHINALIB_point<<=9;
ldi R24,9
ldi R25,0
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
sts _CHINALIB_point+1,R17
sts _CHINALIB_point,R16
sts _CHINALIB_point+2+1,R19
sts _CHINALIB_point+2,R18
.dbline 226
; }
L214:
L201:
.dbline 227
; }
L187:
.dbline 228
; if(buffer[0]==0x00)
lds R2,_buffer
tst R2
brne L228
.dbline 229
; break;
xjmp L186
L228:
.dbline 230
L185:
.dbline 214
xjmp L184
L186:
.dbline -2
L182:
adiw R28,12
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l Read_number 8 i
.dbsym l mulu_Clus_number 4 l
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -