📄 mp3player.lis
字号:
02F6 ; Page = FilePtr / SONGPAGE;
02F6 25E0 ldi R18,5
02F8 30E0 ldi R19,0
02FA 8501 movw R16,R10
02FC 0E940000 xcall div16s
0300 6801 movw R12,R16
0302 .dbline 147
0302 ; GetDir(Cluster,Page*SONGPAGE,SONGPAGE,TRUE);
0302 81E0 ldi R24,1
0304 90E0 ldi R25,0
0306 9D83 std y+5,R25
0308 8C83 std y+4,R24
030A 85E0 ldi R24,5
030C 9B83 std y+3,R25
030E 8A83 std y+2,R24
0310 05E0 ldi R16,5
0312 10E0 ldi R17,0
0314 9601 movw R18,R12
0316 0E940000 xcall empy16s
031A 1983 std y+1,R17
031C 0883 std y+0,R16
031E FE01 movw R30,R28
0320 0489 ldd R16,z+20
0322 1589 ldd R17,z+21
0324 2689 ldd R18,z+22
0326 3789 ldd R19,z+23
0328 0E940000 xcall _GetDir
032C .dbline 148
032C ; RemoteSendScreen(PLAY,(FilePtr%SONGPAGE));
032C 25E0 ldi R18,5
032E 30E0 ldi R19,0
0330 8501 movw R16,R10
0332 0E940000 xcall mod16s
0336 202F mov R18,R16
0338 02E0 ldi R16,2
033A 0E940000 xcall _RemoteSendScreen
033E .dbline 149
033E ; }
033E L45:
033E .dbline 150
033E ; RemoteSendLine((FilePtr%SONGPAGE));
033E 25E0 ldi R18,5
0340 30E0 ldi R19,0
0342 8501 movw R16,R10
0344 0E940000 xcall mod16s
0348 0E940000 xcall _RemoteSendLine
034C .dbline 151
034C ; GetDir(Cluster,FilePtr,1,FALSE);
034C 2224 clr R2
034E 3324 clr R3
0350 3D82 std y+5,R3
0352 2C82 std y+4,R2
0354 81E0 ldi R24,1
0356 90E0 ldi R25,0
0358 9B83 std y+3,R25
035A 8A83 std y+2,R24
035C B982 std y+1,R11
035E A882 std y+0,R10
0360 FE01 movw R30,R28
0362 0489 ldd R16,z+20
0364 1589 ldd R17,z+21
0366 2689 ldd R18,z+22
0368 3789 ldd R19,z+23
036A 0E940000 xcall _GetDir
036E .dbline 152
036E ; PlayMP3();
036E 40D0 xcall _PlayMP3
0370 .dbline 153
0370 ; if (Key == 0x01) FilePtr = FilePtr;
0370 80910000 lds R24,_Key
0374 8130 cpi R24,1
0376 01F4 brne L47
0378 .dbline 153
0378 L47:
0378 .dbline 154
0378 ; if (Key == 0x02) FilePtr -=2;
0378 80910000 lds R24,_Key
037C 8230 cpi R24,2
037E 19F4 brne L49
0380 .dbline 154
0380 C501 movw R24,R10
0382 0297 sbiw R24,2
0384 5C01 movw R10,R24
0386 L49:
0386 .dbline 155
0386 ; if (Key == 0x04) break;
0386 80910000 lds R24,_Key
038A 8430 cpi R24,4
038C 09F4 brne L51
038E .dbline 155
038E 06C0 xjmp L42
0390 L51:
0390 .dbline 156
0390 ; if (Key == 0x08) break;
0390 80910000 lds R24,_Key
0394 8830 cpi R24,8
0396 09F4 brne L53
0398 .dbline 156
0398 01C0 xjmp L42
039A L53:
039A .dbline 157
039A L41:
039A .dbline 139
039A 9ACF xjmp L40
039C L42:
039C .dbline 158
039C ; }
039C ; GetDir(Cluster,Page*SONGPAGE,SONGPAGE,TRUE);
039C 81E0 ldi R24,1
039E 90E0 ldi R25,0
03A0 9D83 std y+5,R25
03A2 8C83 std y+4,R24
03A4 85E0 ldi R24,5
03A6 9B83 std y+3,R25
03A8 8A83 std y+2,R24
03AA 05E0 ldi R16,5
03AC 10E0 ldi R17,0
03AE 9601 movw R18,R12
03B0 0E940000 xcall empy16s
03B4 1983 std y+1,R17
03B6 0883 std y+0,R16
03B8 FE01 movw R30,R28
03BA 0489 ldd R16,z+20
03BC 1589 ldd R17,z+21
03BE 2689 ldd R18,z+22
03C0 3789 ldd R19,z+23
03C2 0E940000 xcall _GetDir
03C6 .dbline 159
03C6 ; RemoteSendScreen(DIR,(FilePtr%SONGPAGE));
03C6 25E0 ldi R18,5
03C8 30E0 ldi R19,0
03CA 8501 movw R16,R10
03CC 0E940000 xcall mod16s
03D0 202F mov R18,R16
03D2 01E0 ldi R16,1
03D4 0E940000 xcall _RemoteSendScreen
03D8 .dbline 160
03D8 ; Key = 0;
03D8 2224 clr R2
03DA 20920000 sts _Key,R2
03DE .dbline 161
03DE ; }
03DE L37:
03DE .dbline 162
03DE ; }
03DE L34:
03DE .dbline 163
03DE L4:
03DE .dbline 59
03DE 55CE xjmp L7
03E0 X1:
03E0 .dbline -2
03E0 .dbline 164
03E0 ; }
03E0 ; }
03E0 L2:
03E0 2A96 adiw R28,10
03E2 0E940000 xcall pop_gset5
03E6 2496 adiw R28,4
03E8 .dbline 0 ; func end
03E8 0895 ret
03EA .dbsym l ch 7 c
03EA .dbsym l LastCluster 6 l
03EA .dbsym r MaxFile 14 i
03EA .dbsym r Page 12 I
03EA .dbsym r FilePtr 10 I
03EA .dbsym l Cluster 20 l
03EA .dbend
03EA .dbfunc e _StackOverflowed __StackOverflowed fV
03EA ; c -> R16
.even
03EA __StackOverflowed::
03EA .dbline -1
03EA .dbline 170
03EA ;
03EA ; //*************************************
03EA ; // void _StackOverflowed(char c)
03EA ; //*************************************
03EA ; void _StackOverflowed(char c)
03EA ; {
03EA .dbline 171
03EA ; CLI();
03EA F894 cli
03EC L56:
03EC .dbline 172
03EC L57:
03EC .dbline 172
03EC FFCF xjmp L56
03EE X5:
03EE .dbline -2
03EE .dbline 173
03EE ; while(1);
03EE ; }
03EE L55:
03EE .dbline 0 ; func end
03EE 0895 ret
03F0 .dbsym r c 16 c
03F0 .dbend
03F0 .dbfunc e PlayMP3 _PlayMP3 fI
03F0 ; Percent -> y+32
03F0 ; ByteSend -> y+28
03F0 ; NextCluster -> y+24
03F0 ; LBA -> y+20
03F0 ; i -> y+16
03F0 ; j -> y+12
03F0 ; TimeOut -> y+8
.even
03F0 _PlayMP3::
03F0 0E940000 xcall push_gset2
03F4 A497 sbiw R28,36
03F6 .dbline -1
03F6 .dbline 182
03F6 ;
03F6 ; //*************************************
03F6 ; // int PlayMP3(void)
03F6 ; //
03F6 ; // return 0 -> Error
03F6 ; // return 1 -> successfull play
03F6 ; //*************************************
03F6 ; int PlayMP3(void)
03F6 ; {
03F6 .dbline 188
03F6 ; extern unsigned char SectorBuffer[512];
03F6 ; unsigned long LBA,i,j,NextCluster,TimeOut,ByteSend,Percent;
03F6 ; extern struct FileInfo File;
03F6 ; extern struct BootRecord Boot;
03F6 ;
03F6 ; VS1001Init(SOFT);
03F6 0027 clr R16
03F8 0E940000 xcall _VS1001Init
03FC .dbline 189
03FC ; Key = 0;
03FC 2224 clr R2
03FE 20920000 sts _Key,R2
0402 .dbline 190
0402 ; ByteSend = 0;
0402 40E0 ldi R20,0
0404 50E0 ldi R21,0
0406 60E0 ldi R22,0
0408 70E0 ldi R23,0
040A FE01 movw R30,R28
040C 448F std z+28,R20
040E 558F std z+29,R21
0410 668F std z+30,R22
0412 778F std z+31,R23
0414 .dbline 191
0414 ; NextCluster = File.FirstClust;
0414 40900601 lds R4,_File+260+2
0418 50900701 lds R5,_File+260+2+1
041C 20900401 lds R2,_File+260
0420 30900501 lds R3,_File+260+1
0424 208E std z+24,R2
0426 318E std z+25,R3
0428 428E std z+26,R4
042A 538E std z+27,R5
042C 17C1 xjmp L62
042E L61:
042E .dbline 193
042E ; while (1)
042E ; {
042E .dbline 194
042E ; LBA = Clust2LBA(NextCluster);
042E FE01 movw R30,R28
0430 008D ldd R16,z+24
0432 118D ldd R17,z+25
0434 228D ldd R18,z+26
0436 338D ldd R19,z+27
0438 0E940000 xcall _Clust2LBA
043C FE01 movw R30,R28
043E 048B std z+20,R16
0440 158B std z+21,R17
0442 268B std z+22,R18
0444 378B std z+23,R19
0446 .dbline 195
0446 ; for (i=0;i<Boot.SecPerClust;i++)
0446 40E0 ldi R20,0
0448 50E0 ldi R21,0
044A 60E0 ldi R22,0
044C 70E0 ldi R23,0
044E 408B std z+16,R20
0450 518B std z+17,R21
0452 628B std z+18,R22
0454 738B std z+19,R23
0456 9BC0 xjmp L67
0458 L64:
0458 .dbline 196
0458 ; {
0458 .dbline 197
0458 ; ata_read_sector_byte(0, LBA+i, 0, 512, (unsigned char*)&SectorBuffer);
0458 80E0 ldi R24,<_SectorBuffer
045A 90E0 ldi R25,>_SectorBuffer
045C 9F83 std y+7,R25
045E 8E83 std y+6,R24
0460 80E0 ldi R24,512
0462 92E0 ldi R25,2
0464 9D83 std y+5,R25
0466 8C83 std y+4,R24
0468 2224 clr R2
046A 3324 clr R3
046C 3B82 std y+3,R3
046E 2A82 std y+2,R2
0470 FE01 movw R30,R28
0472 2088 ldd R2,z+16
0474 3188 ldd R3,z+17
0476 4288 ldd R4,z+18
0478 5388 ldd R5,z+19
047A 6488 ldd R6,z+20
047C 7588 ldd R7,z+21
047E 8688 ldd R8,z+22
0480 9788 ldd R9,z+23
0482 620C add R6,R2
0484 731C adc R7,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -