📄 fat16.s
字号:
; filename -> R10,R11
.even
_show::
rcall push_gset5
mov R14,R18
movw R10,R16
sbiw R28,24
.dbline -1
.dbline 395
; }
; void show( uint8 filename[2],uint8 location,uint8 loca)
; {
.dbline 396
; uint16 i,j=0;
clr R0
clr R1
std y+20,R1
std y+19,R0
.dbline 397
; uint8 x,y,location1,loca1,findflag=0;
std y+23,R0
.dbline 399
; uint32 temp,temp1,temp2,start;
; x=filename[0];
movw R30,R10
ldd R2,z+0
std y+21,R2
.dbline 400
; y=filename[1];
ldd R2,z+1
std y+22,R2
.dbline 401
; location1=location;
mov R10,R14
.dbline 402
; loca1=loca;
ldd R12,y+34
.dbline 403
; if(!longfileflag)
lds R2,_longfileflag
tst R2
breq X8
rjmp L159
X8:
.dbline 404
; {
.dbline 405
; if((x<0xb0))
ldd R24,y+21
cpi R24,176
brsh L161
.dbline 406
; {
.dbline 407
; if((x>=0x30)&&(x<0x61))
cpi R24,48
brlo L163
cpi R24,97
brsh L163
.dbline 408
; {
.dbline 409
; y=128+x;
subi R24,128 ; addi 128
std y+22,R24
.dbline 410
; x=163;
ldi R24,163
std y+21,R24
.dbline 411
; }
rjmp L164
L163:
.dbline 413
; else
; {
.dbline 414
; show_chin(zero,location,1,loca);
ldd R0,y+34
std y+2,R0
ldi R24,1
std y+0,R24
mov R18,R14
ldi R16,<_zero
ldi R17,>_zero
rcall _show_chin
.dbline 415
; return;
rjmp L158
L164:
.dbline 417
; }
; }
L161:
.dbline 418
; x=x-0xa1;
ldd R24,y+21
subi R24,161
std y+21,R24
.dbline 419
; y=y-0xa1;
ldd R24,y+22
subi R24,161
std y+22,R24
.dbline 420
; temp=x*94;
ldi R24,94
ldd R0,y+21
mul R24,R0
movw R2,R0
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
movw R30,R28
std z+3,R2
std z+4,R3
std z+5,R4
std z+6,R5
.dbline 421
; temp=temp+y;
ldd R2,y+22
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+3
ldd R7,z+4
ldd R8,z+5
ldd R9,z+6
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
movw R30,R28
std z+3,R6
std z+4,R7
std z+5,R8
std z+6,R9
.dbline 422
; }
rjmp L160
L159:
.dbline 424
; else
; {
.dbline 425
; start=ClusConvLBA(unicodestart);
lds R16,_unicodestart
lds R17,_unicodestart+1
rcall _ClusConvLBA
movw R30,R28
std z+7,R16
std z+8,R17
std z+9,R18
std z+10,R19
.dbline 426
; for(i=0;i<16;i++)
clr R14
clr R15
rjmp L168
L165:
.dbline 427
; {
.dbline 428
; ReadBlock(start+i);
movw R2,R14
clr R4
clr R5
movw R30,R28
ldd R6,z+7
ldd R7,z+8
ldd R8,z+9
ldd R9,z+10
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
movw R16,R6
movw R18,R8
rcall _ReadBlock
.dbline 429
; for(j=0;j<512;j+=2)
clr R0
clr R1
std y+20,R1
std y+19,R0
rjmp L172
L169:
.dbline 430
; {
.dbline 431
; if((x==BUFFER[j])&&(y==BUFFER[j+1]))
ldi R24,<_BUFFER
ldi R25,>_BUFFER
ldd R30,y+19
ldd R31,y+20
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R0,y+21
cp R0,R2
breq X9
rjmp L173
X9:
ldd R30,y+19
ldd R31,y+20
adiw R30,1
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R0,y+22
cp R0,R2
breq X10
rjmp L173
X10:
.dbline 432
; {
.dbline 433
; findflag=1;
clr R0
inc R0
std y+23,R0
.dbline 434
; temp=i<<8;
movw R2,R14
mov R3,R2
clr R2
clr R4
clr R5
movw R30,R28
std z+3,R2
std z+4,R3
std z+5,R4
std z+6,R5
.dbline 435
; temp=temp+(j>>1);
ldd R2,y+19
ldd R3,y+20
lsr R3
ror R2
clr R4
clr R5
movw R30,R28
ldd R6,z+3
ldd R7,z+4
ldd R8,z+5
ldd R9,z+6
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
movw R30,R28
std z+3,R6
std z+4,R7
std z+5,R8
std z+6,R9
.dbline 436
; temp=temp+1410;
ldi R20,130
ldi R21,5
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+3
ldd R3,z+4
ldd R4,z+5
ldd R5,z+6
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
movw R30,R28
std z+3,R2
std z+4,R3
std z+5,R4
std z+6,R5
.dbline 437
; break;
rjmp L171
L173:
.dbline 439
L170:
.dbline 429
ldd R24,y+19
ldd R25,y+20
adiw R24,2
std y+20,R25
std y+19,R24
L172:
.dbline 429
ldd R24,y+19
ldd R25,y+20
cpi R24,0
ldi R30,2
cpc R25,R30
brsh X11
rjmp L169
X11:
L171:
.dbline 441
; }
; }
;
; if(findflag)
ldd R0,y+23
tst R0
breq L175
.dbline 442
; {
.dbline 443
; break;
rjmp L167
L175:
.dbline 445
; }
; if((!findflag)&&(i==15))
ldd R0,y+23
tst R0
brne L177
movw R24,R14
cpi R24,15
ldi R30,0
cpc R25,R30
brne L177
.dbline 446
; {
.dbline 447
; show_chin(zero,location1,1,loca1);
std y+2,R12
ldi R24,1
std y+0,R24
mov R18,R10
ldi R16,<_zero
ldi R17,>_zero
rcall _show_chin
.dbline 448
; return;
rjmp L158
L177:
.dbline 450
L166:
.dbline 426
movw R24,R14
adiw R24,1
movw R14,R24
L168:
.dbline 426
movw R24,R14
cpi R24,16
ldi R30,0
cpc R25,R30
brsh X12
rjmp L165
X12:
L167:
.dbline 451
; }
; }
; }
L160:
.dbline 452
; temp=temp<<5;
ldi R24,5
ldi R25,0
movw R30,R28
ldd R2,z+3
ldd R3,z+4
ldd R4,z+5
ldd R5,z+6
st -y,R24
movw R16,R2
movw R18,R4
rcall lsl32
movw R30,R28
std z+3,R16
std z+4,R17
std z+5,R18
std z+6,R19
.dbline 453
; temp1=temp>>9;
ldi R24,9
ldi R25,0
movw R30,R28
ldd R2,z+3
ldd R3,z+4
ldd R4,z+5
ldd R5,z+6
st -y,R24
movw R16,R2
movw R18,R4
rcall lsr32
movw R30,R28
std z+11,R16
std z+12,R17
std z+13,R18
std z+14,R19
.dbline 454
; temp2=temp%512;
ldi R20,255
ldi R21,1
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+3
ldd R3,z+4
ldd R4,z+5
ldd R5,z+6
and R2,R20
and R3,R21
and R4,R22
and R5,R23
movw R30,R28
std z+15,R2
std z+16,R3
std z+17,R4
std z+18,R5
.dbline 455
; start=ClusConvLBA(zikustart);
lds R16,_zikustart
lds R17,_zikustart+1
rcall _ClusConvLBA
movw R30,R28
std z+7,R16
std z+8,R17
std z+9,R18
std z+10,R19
.dbline 456
; start=start+temp1;
movw R30,R28
ldd R2,z+11
ldd R3,z+12
ldd R4,z+13
ldd R5,z+14
movw R30,R28
ldd R6,z+7
ldd R7,z+8
ldd R8,z+9
ldd R9,z+10
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
movw R30,R28
std z+7,R6
std z+8,R7
std z+9,R8
std z+10,R9
.dbline 457
; ReadBlock(start);
movw R30,R28
ldd R16,z+7
ldd R17,z+8
ldd R18,z+9
ldd R19,z+10
rcall _ReadBlock
.dbline 458
; show_chin(BUFFER+(uint16)(temp2),location1,1,loca1);
std y+2,R12
ldi R24,1
std y+0,R24
mov R18,R10
ldi R24,<_BUFFER
ldi R25,>_BUFFER
movw R30,R28
ldd R16,z+15
ldd R17,z+16
add R16,R24
adc R17,R25
rcall _show_chin
.dbline -2
L158:
adiw R28,24
rcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l temp2 15 l
.dbsym l temp1 11 l
.dbsym r loca1 12 c
.dbsym r location1 10 c
.dbsym l start 7 l
.dbsym l findflag 23 c
.dbsym r i 14 i
.dbsym l y 22 c
.dbsym l x 21 c
.dbsym l temp 3 l
.dbsym l j 19 i
.dbsym l loca 34 c
.dbsym r location 14 c
.dbsym r filename 10 pc
.dbend
.area lit(rom, con, rel)
L180:
.byte 210,244,193,191,53,48
L181:
.byte 187,182,211,173,202,185,211,195
L182:
.byte 'M,48,'P,48,51,48
.area text(rom, con, rel)
.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
.dbfunc e playmp3 _playmp3 fV
; mp3 -> y+15
; test2 -> y+9
; welcome -> y+1
; song -> R20,R21
.even
_playmp3::
rcall push_gset1
sbiw R28,21
.dbline -1
.dbline 461
; }
; void playmp3(void)
; {
.dbline 462
; uint16 song=0;
clr R20
clr R21
.dbline 463
; uint8 test2[6]="音量50";
ldi R24,<L180
ldi R25,>L180
movw R30,R28
adiw R30,9
ldi R16,6
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 464
; uint8 welcome[8]="欢迎使用";
ldi R24,<L181
ldi R25,>L181
movw R30,R28
adiw R30,1
ldi R16,8
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 465
; uint8 mp3[6]="M0P030";
ldi R24,<L182
ldi R25,>L182
movw R30,R28
adiw R30,15
ldi R16,6
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 466
; zikustart=Getfile_start();
rcall _Getfile_start
sts _zikustart+1,R17
sts _zikustart,R16
.dbline 467
; show(welcome,0,0);
clr R2
std y+0,R2
clr R18
movw R16,R28
subi R16,255 ; offset = 1
sbci R17,255
rcall _show
.dbline 468
; show(welcome+2,15,0);
clr R2
std y+0,R2
ldi R18,15
movw R16,R28
subi R16,253 ; offset = 3
sbci R17,255
rcall _show
.dbline 469
; show(welcome+4,30,0);
clr R2
std y+0,R2
ldi R18,30
movw R16,R28
subi R16,251 ; offset = 5
sbci R17,255
rcall _show
.dbline 470
; show(welcome+6,45,0);
clr R2
std y+0,R2
ldi R18,45
movw R16,R28
subi R16,249 ; offset = 7
sbci R17,255
rcall _show
.dbline 471
; show(test2,76,0);
clr R2
std y+0,R2
ldi R18,76
movw R16,R28
subi R16,247 ; offset = 9
sbci R17,255
rcall _show
.dbline 472
; show(test2+2,92,0);
clr R2
std y+0,R2
ldi R18,92
movw R16,R28
subi R16,245 ; offset = 11
sbci R17,255
rcall _show
.dbline 473
; show(test2+4,108,0);
clr R2
std y+0,R2
ldi R18,108
movw R16,R28
subi R16,243 ; offset = 13
sbci R17,255
rcall _show
.dbline 474
; show(mp3,76,1);
ldi R24,1
std y+0,R24
ldi R18,76
movw R16,R28
subi R16,241 ; offset = 15
sbci R17,255
rcall _show
.dbline 475
; show(mp3+2,91,1);
ldi R24,1
std y+0,R24
ldi R18,91
movw R16,R28
subi R16,239 ; offset = 17
sbci R17,255
rcall _show
.dbline 476
; show(mp3+4,106,1);
ldi R24,1
std y+0,R24
ldi R18,106
movw R16,R28
subi R16,237 ; offset = 19
sbci R17,255
rcall _show
.dbline 477
; delay(3000);
ldi R16,3000
ldi R17,11
rcall _delay
.dbline 478
; unicodestart=Getfile_start();
rcall _Getfile_start
sts _unicodestart+1,R17
sts _unicodestart,R16
rjmp L191
L190:
.dbline 480
.dbline 481
rcall _GetNextmp3
movw R20,R16
.dbline 482
rcall _Readfile
.dbline 483
rcall _VS1003B_SoftReset
.dbline 484
ldi R16,500
ldi R17,1
rcall _delay
.dbline 485
L191:
.dbline 479
rjmp L190
X13:
.dbline -2
L179:
adiw R28,21
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l mp3 15 A[6:6]c
.dbsym l test2 9 A[6:6]c
.dbsym l welcome 1 A[8:8]c
.dbsym r song 20 i
.dbend
.area bss(ram, con, rel)
.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
_BPB_HiddSec:
.blkb 4
.dbsym s BPB_HiddSec _BPB_HiddSec l
_BPB_FATSz16:
.blkb 2
.dbsym s BPB_FATSz16 _BPB_FATSz16 i
_BPB_TotSec16:
.blkb 2
.dbsym s BPB_TotSec16 _BPB_TotSec16 i
_BPB_RootEntCnt:
.blkb 2
.dbsym s BPB_RootEntCnt _BPB_RootEntCnt i
_BPB_NumFATs:
.blkb 1
.dbsym s BPB_NumFATs _BPB_NumFATs c
_BPB_RsvdSecCnt:
.blkb 2
.dbsym s BPB_RsvdSecCnt _BPB_RsvdSecCnt i
_BPB_SecPerClus::
.blkb 1
.dbsym e BPB_SecPerClus _BPB_SecPerClus c
_FileIndex:
.blkb 12
.dbstruct 0 12 .4
.dbfield 0 m i
.dbfield 2 ClusID i
.dbfield 4 i l
.dbfield 8 LBA l
.dbend
.dbsym s FileIndex _FileIndex S[.4]
_fileid:
.blkb 32
.dbsym s fileid _fileid S[.3]
_unicodestart:
.blkb 2
.dbsym s unicodestart _unicodestart i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -