📄 ff.txt
字号:
00012c f0440408 ORR r4,r4,#8 ;1466
|L6.304|
000130 72f4 STRB r4,[r6,#0xb] ;1468
000132 2000 MOVS r0,#0 ;1470
000134 e78d B |L6.82|
;;;1473
ENDP
000136 0000 DCW 0x0000
|L6.312|
000138 222a2b2c DCB """*+,:<=>?[]|",127,0
00013c 3a3c3d3e
000140 3f5b5d7c
000144 7f00
000146 00 DCB 0
000147 00 DCB 0
AREA ||i.dir_find||, CODE, READONLY, ALIGN=1
dir_find PROC
;;;998 static
;;;999 FRESULT dir_find (
000000 e92d41f0 PUSH {r4-r8,lr}
;;;1000 DIR *dj /* Pointer to the directory object linked to the file name */
;;;1001 )
;;;1002 {
000004 4604 MOV r4,r0
;;;1003 FRESULT res;
;;;1004 BYTE c, *dir;
;;;1005 #if _USE_LFN
;;;1006 BYTE a, ord, sum;
;;;1007 #endif
;;;1008
;;;1009 res = dir_sdi(dj, 0); /* Rewind directory object */
000006 2100 MOVS r1,#0
000008 4620 MOV r0,r4
00000a f7fffffe BL dir_sdi
00000e 4605 MOV r5,r0
;;;1010 if (res != FR_OK) return res;
000010 b115 CBZ r5,|L7.24|
000012 4628 MOV r0,r5
|L7.20|
;;;1011
;;;1012 #if _USE_LFN
;;;1013 ord = sum = 0xFF;
;;;1014 #endif
;;;1015 do {
;;;1016 res = move_window(dj->fs, dj->sect);
;;;1017 if (res != FR_OK) break;
;;;1018 dir = dj->dir; /* Ptr to the directory entry of current index */
;;;1019 c = dir[DIR_Name];
;;;1020 if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */
;;;1021 #if _USE_LFN /* LFN configuration */
;;;1022 a = dir[DIR_Attr] & AM_MASK;
;;;1023 if (c == 0xE5 || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */
;;;1024 ord = 0xFF;
;;;1025 } else {
;;;1026 if (a == AM_LFN) { /* An LFN entry is found */
;;;1027 if (dj->lfn) {
;;;1028 if (c & 0x40) { /* Is it start of LFN sequence? */
;;;1029 sum = dir[LDIR_Chksum];
;;;1030 c &= 0xBF; ord = c; /* LFN start order */
;;;1031 dj->lfn_idx = dj->index;
;;;1032 }
;;;1033 /* Check validity of the LFN entry and compare it with given name */
;;;1034 ord = (c == ord && sum == dir[LDIR_Chksum] && cmp_lfn(dj->lfn, dir)) ? ord - 1 : 0xFF;
;;;1035 }
;;;1036 } else { /* An SFN entry is found */
;;;1037 if (!ord && sum == sum_sfn(dir)) break; /* LFN matched? */
;;;1038 ord = 0xFF; dj->lfn_idx = 0xFFFF; /* Reset LFN sequence */
;;;1039 if (!(dj->fn[NS] & NS_LOSS) && !mem_cmp(dir, dj->fn, 11)) break; /* SFN matched? */
;;;1040 }
;;;1041 }
;;;1042 #else /* Non LFN configuration */
;;;1043 if (!(dir[DIR_Attr] & AM_VOL) && !mem_cmp(dir, dj->fn, 11)) /* Is it a valid entry? */
;;;1044 break;
;;;1045 #endif
;;;1046 res = dir_next(dj, 0); /* Next entry */
;;;1047 } while (res == FR_OK);
;;;1048
;;;1049 return res;
;;;1050 }
000014 e8bd81f0 POP {r4-r8,pc}
|L7.24|
000018 bf00 NOP ;1015
|L7.26|
00001a 6921 LDR r1,[r4,#0x10] ;1016
00001c 6820 LDR r0,[r4,#0] ;1016
00001e f7fffffe BL move_window
000022 4605 MOV r5,r0 ;1016
000024 b105 CBZ r5,|L7.40|
000026 e016 B |L7.86|
|L7.40|
000028 6966 LDR r6,[r4,#0x14] ;1018
00002a 7837 LDRB r7,[r6,#0] ;1019
00002c b90f CBNZ r7,|L7.50|
00002e 2504 MOVS r5,#4 ;1020
000030 e011 B |L7.86|
|L7.50|
000032 7af0 LDRB r0,[r6,#0xb] ;1043
000034 f0100f08 TST r0,#8 ;1043
000038 d106 BNE |L7.72|
00003a 220b MOVS r2,#0xb ;1043
00003c 4630 MOV r0,r6 ;1043
00003e 69a1 LDR r1,[r4,#0x18] ;1043
000040 f7fffffe BL mem_cmp
000044 b900 CBNZ r0,|L7.72|
000046 e006 B |L7.86|
|L7.72|
000048 2100 MOVS r1,#0 ;1046
00004a 4620 MOV r0,r4 ;1046
00004c f7fffffe BL dir_next
000050 4605 MOV r5,r0 ;1046
000052 2d00 CMP r5,#0 ;1047
000054 d0e1 BEQ |L7.26|
|L7.86|
000056 bf00 NOP ;1017
000058 4628 MOV r0,r5 ;1049
00005a e7db B |L7.20|
;;;1051
ENDP
AREA ||i.dir_next||, CODE, READONLY, ALIGN=1
dir_next PROC
;;;759 static
;;;760 FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:EOT and could not stretch */
000000 e92d41f0 PUSH {r4-r8,lr}
;;;761 DIR *dj, /* Pointer to directory object */
;;;762 int stretch /* 0: Do not stretch table, 1: Stretch table if needed */
;;;763 )
;;;764 {
000004 4604 MOV r4,r0
000006 4688 MOV r8,r1
;;;765 DWORD clst;
;;;766 WORD i;
;;;767
;;;768
;;;769 i = dj->index + 1;
000008 88e0 LDRH r0,[r4,#6]
00000a 1c40 ADDS r0,r0,#1
00000c b286 UXTH r6,r0
;;;770 if (!i || !dj->sect) /* Report EOT when index has reached 65535 */
00000e b10e CBZ r6,|L8.20|
000010 6920 LDR r0,[r4,#0x10]
000012 b910 CBNZ r0,|L8.26|
|L8.20|
;;;771 return FR_NO_FILE;
000014 2004 MOVS r0,#4
|L8.22|
;;;772
;;;773 if (!(i % (SS(dj->fs) / 32))) { /* Sector changed? */
;;;774 dj->sect++; /* Next sector */
;;;775
;;;776 if (dj->clust == 0) { /* Static table */
;;;777 if (i >= dj->fs->n_rootdir) /* Report EOT when end of table */
;;;778 return FR_NO_FILE;
;;;779 }
;;;780 else { /* Dynamic table */
;;;781 if (((i / (SS(dj->fs) / 32)) & (dj->fs->csize - 1)) == 0) { /* Cluster changed? */
;;;782 clst = get_fat(dj->fs, dj->clust); /* Get next cluster */
;;;783 if (clst <= 1) return FR_INT_ERR;
;;;784 if (clst == 0xFFFFFFFF) return FR_DISK_ERR;
;;;785 if (clst >= dj->fs->n_fatent) { /* When it reached end of dynamic table */
;;;786 #if !_FS_READONLY
;;;787 BYTE c;
;;;788 if (!stretch) return FR_NO_FILE; /* When do not stretch, report EOT */
;;;789 clst = create_chain(dj->fs, dj->clust); /* Stretch cluster chain */
;;;790 if (clst == 0) return FR_DENIED; /* No free cluster */
;;;791 if (clst == 1) return FR_INT_ERR;
;;;792 if (clst == 0xFFFFFFFF) return FR_DISK_ERR;
;;;793 /* Clean-up stretched table */
;;;794 if (move_window(dj->fs, 0)) return FR_DISK_ERR; /* Flush active window */
;;;795 mem_set(dj->fs->win, 0, SS(dj->fs)); /* Clear window buffer */
;;;796 dj->fs->winsect = clust2sect(dj->fs, clst); /* Cluster start sector */
;;;797 for (c = 0; c < dj->fs->csize; c++) { /* Fill the new cluster with 0 */
;;;798 dj->fs->wflag = 1;
;;;799 if (move_window(dj->fs, 0)) return FR_DISK_ERR;
;;;800 dj->fs->winsect++;
;;;801 }
;;;802 dj->fs->winsect -= c; /* Rewind window address */
;;;803 #else
;;;804 return FR_NO_FILE; /* Report EOT */
;;;805 #endif
;;;806 }
;;;807 dj->clust = clst; /* Initialize data for new cluster */
;;;808 dj->sect = clust2sect(dj->fs, clst);
;;;809 }
;;;810 }
;;;811 }
;;;812
;;;813 dj->index = i;
;;;814 dj->dir = dj->fs->win + (i % (SS(dj->fs) / 32)) * 32;
;;;815
;;;816 return FR_OK;
;;;817 }
000016 e8bd81f0 POP {r4-r8,pc}
|L8.26|
00001a f0160f0f TST r6,#0xf ;773
00001e d16e BNE |L8.254|
000020 6920 LDR r0,[r4,#0x10] ;774
000022 1c40 ADDS r0,r0,#1 ;774
000024 6120 STR r0,[r4,#0x10] ;774
000026 68e0 LDR r0,[r4,#0xc] ;776
000028 b928 CBNZ r0,|L8.54|
00002a 6820 LDR r0,[r4,#0] ;777
00002c 8900 LDRH r0,[r0,#8] ;777
00002e 42b0 CMP r0,r6 ;777
000030 dc65 BGT |L8.254|
000032 2004 MOVS r0,#4 ;778
000034 e7ef B |L8.22|
|L8.54|
000036 6820 LDR r0,[r4,#0] ;781
000038 7880 LDRB r0,[r0,#2] ;781
00003a 1e40 SUBS r0,r0,#1 ;781
00003c ea101f16 TST r0,r6,LSR #4 ;781
000040 d15d BNE |L8.254|
000042 68e1 LDR r1,[r4,#0xc] ;782
000044 6820 LDR r0,[r4,#0] ;782
000046 f7fffffe BL get_fat
00004a 4605 MOV r5,r0 ;782
00004c 2d01 CMP r5,#1 ;783
00004e d801 BHI |L8.84|
000050 2002 MOVS r0,#2 ;783
000052 e7e0 B |L8.22|
|L8.84|
000054 1c68 ADDS r0,r5,#1 ;784
000056 d101 BNE |L8.92|
000058 2001 MOVS r0,#1 ;784
00005a e7dc B |L8.22|
|L8.92|
00005c 6820 LDR r0,[r4,#0] ;785
00005e 6980 LDR r0,[r0,#0x18] ;785
000060 42a8 CMP r0,r5 ;785
000062 d846 BHI |L8.242|
000064 f1b80f00 CMP r8,#0 ;788
000068 d101 BNE |L8.110|
00006a 2004 MOVS r0,#4 ;788
00006c e7d3 B |L8.22|
|L8.110|
00006e 68e1 LDR r1,[r4,#0xc] ;789
000070 6820 LDR r0,[r4,#0] ;789
000072 f7fffffe BL create_chain
000076 4605 MOV r5,r0 ;789
000078 b90d CBNZ r5,|L8.126|
00007a 2007 MOVS r0,#7 ;790
00007c e7cb B |L8.22|
|L8.126|
00007e 2d01 CMP r5,#1 ;791
000080 d101 BNE |L8.134|
000082 2002 MOVS r0,#2 ;791
000084 e7c7 B |L8.22|
|L8.134|
000086 1c68 ADDS r0,r5,#1 ;792
000088 d101 BNE |L8.142|
00008a 2001 MOVS r0,#1 ;792
00008c e7c3 B |L8.22|
|L8.142|
00008e 2100 MOVS r1,#0 ;794
000090 6820 LDR r0,[r4,#0] ;794
000092 f7fffffe BL move_window
000096 b108 CBZ r0,|L8.156|
000098 2001 MOVS r0,#1 ;794
00009a e7bc B |L8.22|
|L8.156|
00009c 6821 LDR r1,[r4,#0] ;795
00009e f1010030 ADD r0,r1,#0x30 ;795
0000a2 f44f7200 MOV r2,#0x200 ;795
0000a6 2100 MOVS r1,#0 ;795
0000a8 f7fffffe BL mem_set
0000ac 4629
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -