📄 fat16.lis
字号:
.module fat16.c
.area data(ram, con, rel)
0000 _vol:
0000 .blkb 2
.area idata
0000 0A0A .word 2570
.area data(ram, con, rel)
0002 .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
0002 .dbsym s vol _vol i
0002 _fileindex:
0002 .blkb 2
.area idata
0002 0000 .word 0
.area data(ram, con, rel)
0004 .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
0004 .dbsym s fileindex _fileindex i
0004 _flag:
0004 .blkb 1
.area idata
0004 01 .byte 1
.area data(ram, con, rel)
0005 .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
0005 .dbsym s flag _flag c
0005 _keyflag:
0005 .blkb 1
.area idata
0005 00 .byte 0
.area data(ram, con, rel)
0006 .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
0006 .dbsym s keyflag _keyflag c
0006 _longfileflag:
0006 .blkb 1
.area idata
0006 00 .byte 0
.area data(ram, con, rel)
0007 .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
0007 .dbsym s longfileflag _longfileflag c
0007 _volume:
0007 .blkb 2
.area idata
0007 3530 .byte 53,48
.area data(ram, con, rel)
0009 .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
0009 .dbsym s volume _volume A[2:2]c
0009 _timecount:
0009 .blkb 1
.area idata
0009 00 .byte 0
.area data(ram, con, rel)
000A .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
000A .dbsym s timecount _timecount c
000A _zero::
000A .blkb 1
.area idata
000A 00 .byte 0
.area data(ram, con, rel)
000B .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
000B .blkb 31
.area idata
000B 00000000000000000000 .word 0,0,0,0,0
0015 00000000000000000000 .word 0,0,0,0,0
001F 00000000000000000000 .word 0,0,0,0,0
0029 00 .byte 0
.area data(ram, con, rel)
002A .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
002A .dbsym e zero _zero A[32:32]c
.area text(rom, con, rel)
0000 .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
0000 .dbfunc e FAT_Init _FAT_Init fV
.even
0000 _FAT_Init::
0000 .dbline -1
0000 .dbline 48
0000 ; #include<iom16v.h>
0000 ; #include<main.h>
0000 ; #include<fat16.h>
0000 ; #include<12232.h>
0000 ; #include<sd.h>
0000 ; #include<vs1003.h>
0000 ; extern uint8 BUFFER[512];
0000 ; extern zikustart;
0000 ; static uint16 unicodestart;
0000 ; static uint16 vol=0x0a0a;
0000 ; static uint16 fileindex=0;
0000 ; static DIR fileid;
0000 ; static uint8 flag=1;
0000 ; static uint8 keyflag=0;
0000 ; static uint8 longfileflag=0;
0000 ; static uint8 volume[2]="50";
0000 ; volatile static uint8 timecount=0;
0000 ;
0000 ; unsigned char zero[32]={0};
0000 ; typedef struct
0000 ; {
0000 ; uint16 m;
0000 ; uint16 ClusID;
0000 ; uint32 i;
0000 ; uint32 LBA;
0000 ; } FATFileIndex;
0000 ; static FATFileIndex FileIndex; //当前打开的文件
0000 ; uint8 BPB_SecPerClus;
0000 ; static uint16 BPB_RsvdSecCnt;
0000 ; static uint8 BPB_NumFATs;
0000 ; static uint16 BPB_RootEntCnt;
0000 ; static uint16 BPB_TotSec16;
0000 ; static uint16 BPB_FATSz16;
0000 ; static uint32 BPB_HiddSec;
0000 ;
0000 ; void ReadBlock (uint32 LBA);
0000 ; void WriteBlock (uint32 LBA);
0000 ; static uint8 IsEqual (void* A, void* B, uint8 Size);
0000 ; static uint8 Ismp3(void* A);
0000 ; void ReadBPB (void);
0000 ; static uint32 ClusConvLBA (uint16 ClusID);
0000 ; uint16 ReadFAT (uint16 Index);
0000 ; static uint16 GetNextmp3(void);
0000 ; static uint8 GetFileID(uint8 Name[11],DIR* ID);
0000 ; void show(uint8 filename[2],uint8 location,uint8 loca);
0000 ;
0000 ; void FAT_Init(void)
0000 ; {
0000 .dbline 49
0000 ; ReadBPB();
0000 80D0 rcall _ReadBPB
0002 .dbline -2
0002 L5:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
0004 .dbfunc e SD_SPI_HIGH _SD_SPI_HIGH fV
.even
0004 _SD_SPI_HIGH::
0004 .dbline -1
0004 .dbline 53
0004 ; }
0004 ;
0004 ; void SD_SPI_HIGH(void)
0004 ; {
0004 .dbline 54
0004 ; SPCR=(1<<SPE)|(1<<MSTR);
0004 80E5 ldi R24,80
0006 8DB9 out 0xd,R24
0008 .dbline 55
0008 ; SPSR|= (1<<SPI2X);
0008 709A sbi 0xe,0
000A .dbline -2
000A L6:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbend
000C .dbfunc e ReadBlock _ReadBlock fV
000C ; LBA -> y+2
.even
000C _ReadBlock::
000C 00D0 rcall push_arg4
000E 2297 sbiw R28,2
0010 .dbline -1
0010 .dbline 61
0010 ; }
0010 ; //********************************************************************************************
0010 ; //读一个扇区
0010 ; void ReadBlock(uint32 LBA)
0010 ; //********************************************************************************************
0010 ; {
0010 .dbline 62
0010 ; SD_read_sector(LBA, BUFFER);
0010 80E0 ldi R24,<_BUFFER
0012 90E0 ldi R25,>_BUFFER
0014 9983 std y+1,R25
0016 8883 std y+0,R24
0018 FE01 movw R30,R28
001A 0281 ldd R16,z+2
001C 1381 ldd R17,z+3
001E 2481 ldd R18,z+4
0020 3581 ldd R19,z+5
0022 00D0 rcall _SD_read_sector
0024 .dbline -2
0024 L7:
0024 2696 adiw R28,6
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym l LBA 2 l
0028 .dbend
0028 .dbfunc e WriteBlock _WriteBlock fV
0028 ; LBA -> y+2
.even
0028 _WriteBlock::
0028 00D0 rcall push_arg4
002A 2297 sbiw R28,2
002C .dbline -1
002C .dbline 68
002C ; }
002C ;
002C ; //********************************************************************************************
002C ; void WriteBlock(uint32 LBA)
002C ; //********************************************************************************************
002C ; {
002C .dbline 69
002C ; SD_write_sector(LBA , BUFFER);
002C 80E0 ldi R24,<_BUFFER
002E 90E0 ldi R25,>_BUFFER
0030 9983 std y+1,R25
0032 8883 std y+0,R24
0034 FE01 movw R30,R28
0036 0281 ldd R16,z+2
0038 1381 ldd R17,z+3
003A 2481 ldd R18,z+4
003C 3581 ldd R19,z+5
003E 00D0 rcall _SD_write_sector
0040 .dbline -2
0040 L8:
0040 2696 adiw R28,6
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbsym l LBA 2 l
0044 .dbend
0044 .dbfunc s IsEqual _IsEqual fc
0044 ; b -> R20,R21
0044 ; a -> R22,R23
0044 ; i -> R10
0044 ; Size -> R12
0044 ; B -> R18,R19
0044 ; A -> R16,R17
.even
0044 _IsEqual:
0044 00D0 rcall push_gset4
0046 C884 ldd R12,y+8
0048 .dbline -1
0048 .dbline 75
0048 ; }
0048 ;
0048 ; //********************************************************************************************
0048 ; static uint8 IsEqual(void* A, void* B, uint8 Size)
0048 ; //********************************************************************************************
0048 ; {
0048 .dbline 76
0048 ; uint8 i, *a = A, *b = B;
0048 B801 movw R22,R16
004A .dbline 76
004A A901 movw R20,R18
004C .dbline 77
004C ; for(i = 0; i < Size; i++)
004C AA24 clr R10
004E 0FC0 rjmp L13
0050 L10:
0050 .dbline 78
0050 ; {
0050 .dbline 79
0050 ; if((a[i] != b[i]))
0050 EA2D mov R30,R10
0052 FF27 clr R31
0054 E40F add R30,R20
0056 F51F adc R31,R21
0058 2080 ldd R2,z+0
005A EA2D mov R30,R10
005C FF27 clr R31
005E E60F add R30,R22
0060 F71F adc R31,R23
0062 3080 ldd R3,z+0
0064 3214 cp R3,R2
0066 11F0 breq L14
0068 .dbline 80
0068 ; return 0;
0068 0027 clr R16
006A 04C0 rjmp L9
006C L14:
006C .dbline 81
006C L11:
006C .dbline 77
006C A394 inc R10
006E L13:
006E .dbline 77
006E AC14 cp R10,R12
0070 78F3 brlo L10
0072 .dbline 82
0072 ; }
0072 ; return 1;
0072 01E0 ldi R16,1
0074 .dbline -2
0074 L9:
0074 00D0 rcall pop_gset4
0076 .dbline 0 ; func end
0076 0895 ret
0078 .dbsym r b 20 pc
0078 .dbsym r a 22 pc
0078 .dbsym r i 10 c
0078 .dbsym r Size 12 c
0078 .dbsym r B 18 pV
0078 .dbsym r A 16 pV
0078 .dbend
.area lit(rom, con, rel)
0000 L17:
0000 4D5033 .byte 'M,'P,51
0003 L18:
0003 574D41 .byte 'W,'M,'A
.area text(rom, con, rel)
0078 .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
0078 .dbfunc s Ismp3 _Ismp3 fc
0078 ; c -> y+3
0078 ; b -> y+0
0078 ; a -> R20,R21
0078 ; i -> R22
0078 ; A -> R22,R23
.even
0078 _Ismp3:
0078 00D0 rcall push_gset2
007A B801 movw R22,R16
007C 2697 sbiw R28,6
007E .dbline -1
007E .dbline 85
007E ; }
007E ; static uint8 Ismp3(void* A)
007E ; {
007E .dbline 86
007E ; uint8 i,*a=A;
007E AB01 movw R20,R22
0080 .dbline 87
0080 ; uint8 b[3]="MP3";
0080 80E0 ldi R24,<L17
0082 90E0 ldi R25,>L17
0084 FE01 movw R30,R28
0086 03E0 ldi R16,3
0088 10E0 ldi R17,0
008A FA93 st -y,R31
008C EA93 st -y,R30
008E 9A93 st -y,R25
0090 8A93 st -y,R24
0092 00D0 rcall asgncblk
0094 .dbline 88
0094 ; uint8 c[3]="WMA";
0094 80E0 ldi R24,<L18
0096 90E0 ldi R25,>L18
0098 FE01 movw R30,R28
009A 3396 adiw R30,3
009C 03E0 ldi R16,3
009E 10E0 ldi R17,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -