📄 bfsa_api.lst
字号:
\ 000000F8 4176 STRB R1,[R0, #+25]
305 BFSABuffer.BFSA_fatBuff[0x3A] = '2';
\ 000000FA 3221 MOV R1,#+50
\ 000000FC 8176 STRB R1,[R0, #+26]
306 BFSABuffer.BFSA_fatBuff[0x3B] = 0x20; // space
\ 000000FE 2021 MOV R1,#+32
\ 00000100 C276 STRB R2,[R0, #+27]
307 BFSABuffer.BFSA_fatBuff[0x3C] = 0x20; // space
\ 00000102 0277 STRB R2,[R0, #+28]
308 BFSABuffer.BFSA_fatBuff[0x3D] = 0x20; // space
\ 00000104 4277 STRB R2,[R0, #+29]
309 // ************* END "extended BIOS Parameter Block" (EBPB) *************
310
311 // ************* Identification code : 0xAA55 = good partition *************
312 BFSABuffer.BFSA_fatBuff[0x1FE] = 0x55; // 0x1FE
\ 00000106 5520 MOV R0,#+85
\ 00000108 3870 STRB R0,[R7, #+0]
313 BFSABuffer.BFSA_fatBuff[0x1FF] = 0xAA; // 0x1FF
\ 0000010A AA20 MOV R0,#+170
\ 0000010C 7870 STRB R0,[R7, #+1]
314 // ************* End Identification code *************
315
316 // Write MBR (MBR的地址为第一扇区,不知道flash为什么会写下一个区:BASE_mmc_Add+MBR_SIZE ? 在此更正)
317 if( TRUE == AT91F_Flash_Write_Address((unsigned int)BASE_mmc_Add, MBR_SIZE/*sizeof(BFSA_fatBuff)*/, (unsigned char*)BFSABuffer.BFSA_fatBuff, FALSE ) )
\ 0000010E 0023 MOV R3,#+0
\ 00000110 2A1C MOV R2,R5
\ 00000112 0901 LSL R1,R1,#+4
\ 00000114 181C MOV R0,R3
\ 00000116 ........ _BLF AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
\ 0000011A 0128 CMP R0,#+1
\ ??BFSA_format_1:
\ 0000011C 45D1 BNE ??BFSA_format_3
318 {
319 // Erase only need HD Flash size:BPB_NumFATs:去掉原有的扇区信息,写fat 表,
320 //fat表的起始地址为 :基本地址+保留扇区(BPB[0E~0F])+1 ; 此处保留扇区的设置为 1 ; ????
321 //fat表的大小为(byte) :根目录数 + fat 数 ,此数据根据验证无误
322 if( TRUE == AT91F_Flash_Write_Address((unsigned int)BASE_mmc_Add+2*MBR_SIZE, //fat表的基本地址 ,(从 2*512开始)
323 (int)(BPB_FATSz16+BFSABuffer.BFSA_fatBuff[0x10])*SIZEONESECTOR+(BFSABuffer.BFSA_fatBuff[0x12]*0x100+BFSABuffer.BFSA_fatBuff[0x11])*32,
324 (unsigned char*) &value, TRUE) )
\ 0000011E 0123 MOV R3,#+1
\ 00000120 6A46 MOV R2,SP
\ 00000122 287C LDRB R0,[R5, #+16]
\ 00000124 801C ADD R0,R0,#+2
\ 00000126 4002 LSL R0,R0,#+9
\ 00000128 A97C LDRB R1,[R5, #+18]
\ 0000012A 0902 LSL R1,R1,#+8
\ 0000012C 6F7C LDRB R7,[R5, #+17]
\ 0000012E C919 ADD R1,R1,R7
\ 00000130 4901 LSL R1,R1,#+5
\ 00000132 4118 ADD R1,R0,R1
\ 00000134 201C MOV R0,R4
\ 00000136 ........ _BLF AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
\ 0000013A 0128 CMP R0,#+1
\ 0000013C 35D1 BNE ??BFSA_format_3
325 {
326 // Write FAT
327 // Set the FAT[0] to 0xFF0 and FAT[1] to 0xFFF
328 // FF8-FFE may be used to mark end of a file chain
329 BFSABuffer.BFSA_fatBuff[0] = 0xF8;
\ 0000013E F820 MOV R0,#+248
\ 00000140 2870 STRB R0,[R5, #+0]
330 BFSABuffer.BFSA_fatBuff[1] = 0xFF;
\ 00000142 FF20 MOV R0,#+255
\ 00000144 6870 STRB R0,[R5, #+1]
331 BFSABuffer.BFSA_fatBuff[2] = 0xFF;
\ 00000146 A870 STRB R0,[R5, #+2]
332 BFSABuffer.BFSA_fatBuff[3] = 0x00;
\ 00000148 0020 MOV R0,#+0
\ 0000014A E870 STRB R0,[R5, #+3]
333 //写fat 表的起始标识(在此,fat格式规定为 0xF8,0xFF,0xFF,0xFF ,也不尽相同,有的地方是更长的0xFF)
334 if( TRUE == AT91F_Flash_Write_Address((unsigned int)BASE_mmc_Add+2*MBR_SIZE, 4, (unsigned char*)BFSABuffer.BFSA_fatBuff, FALSE) )
\ 0000014C 0023 MOV R3,#+0
\ 0000014E 2A1C MOV R2,R5
\ 00000150 0421 MOV R1,#+4
\ 00000152 201C MOV R0,R4
\ 00000154 ........ _BLF AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
\ 00000158 0128 CMP R0,#+1
\ 0000015A 26D1 BNE ??BFSA_format_3
335 {
336 // Depend of the number and size of FAT (4 if 2 sector/fat, 3 si 1 sector/fat)
337 // 写第二个fat项目 ,地址为:从基本地址开始的地址 偏移一个fat和 保留扇区 ,数据与fat1相同,只是个fat 头
338 if( TRUE == AT91F_Flash_Write_Address((unsigned int)BASE_mmc_Add+(BPB_FATSz16+2)*MBR_SIZE, 4, (unsigned char*)BFSABuffer.BFSA_fatBuff, FALSE) )
\ 0000015C 6400 LSL R4,R4,#+1
\ 0000015E 0023 MOV R3,#+0
\ 00000160 2A1C MOV R2,R5
\ 00000162 0421 MOV R1,#+4
\ 00000164 201C MOV R0,R4
\ 00000166 ........ _BLF AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
\ 0000016A 0128 CMP R0,#+1
\ 0000016C 1DD1 BNE ??BFSA_format_3
339 {
340 // Label name of volume
341 BFSABuffer.BFSA_fatBuff[0x00] = 'A';
\ 0000016E 2E70 STRB R6,[R5, #+0]
342 BFSABuffer.BFSA_fatBuff[0x01] = 'T';
\ 00000170 5420 MOV R0,#+84
\ 00000172 6870 STRB R0,[R5, #+1]
343 BFSABuffer.BFSA_fatBuff[0x02] = 'M';
\ 00000174 4D20 MOV R0,#+77
\ 00000176 A870 STRB R0,[R5, #+2]
344 BFSABuffer.BFSA_fatBuff[0x03] = 'E';
\ 00000178 4520 MOV R0,#+69
\ 0000017A E870 STRB R0,[R5, #+3]
345 BFSABuffer.BFSA_fatBuff[0x04] = 'L';
\ 0000017C 4C20 MOV R0,#+76
\ 0000017E 2871 STRB R0,[R5, #+4]
346 BFSABuffer.BFSA_fatBuff[0x05] = 0x20;
\ 00000180 2020 MOV R0,#+32
\ 00000182 6871 STRB R0,[R5, #+5]
347 BFSABuffer.BFSA_fatBuff[0x06] = 0x20;
\ 00000184 A871 STRB R0,[R5, #+6]
348 BFSABuffer.BFSA_fatBuff[0x07] = 0x20;
\ 00000186 E871 STRB R0,[R5, #+7]
349 BFSABuffer.BFSA_fatBuff[0x08] = 0x20;
\ 00000188 2872 STRB R0,[R5, #+8]
350 BFSABuffer.BFSA_fatBuff[0x09] = 0x20;
\ 0000018A 6872 STRB R0,[R5, #+9]
351 BFSABuffer.BFSA_fatBuff[0x0A] = 0x20;
\ 0000018C A872 STRB R0,[R5, #+10]
352 BFSABuffer.BFSA_fatBuff[0x0B] = 0x08;
\ 0000018E 0820 MOV R0,#+8
\ 00000190 E872 STRB R0,[R5, #+11]
353 BFSABuffer.BFSA_fatBuff[0x0C] = 0x00;
\ 00000192 0020 MOV R0,#+0
\ 00000194 A881 STRH R0,[R5, #+12]
354 BFSABuffer.BFSA_fatBuff[0x0D] = 0x00;
355 if( TRUE == AT91F_Flash_Write_Address((unsigned int)BASE_mmc_Add+0x800, 14, (unsigned char*)BFSABuffer.BFSA_fatBuff, FALSE) )
\ 00000196 0023 MOV R3,#+0
\ 00000198 2A1C MOV R2,R5
\ 0000019A 0E21 MOV R1,#+14
\ 0000019C 201C MOV R0,R4
\ 0000019E ........ _BLF AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
\ 000001A2 0128 CMP R0,#+1
\ 000001A4 01D1 BNE ??BFSA_format_3
356 {
357 // Format completed
358 _status = BFSA_SUCCESS;
\ 000001A6 0020 MOV R0,#+0
\ 000001A8 0190 STR R0,[SP, #+4]
359 }
360 }
361 }
362 }
363 }
364 }
365 po_unlock();
\ ??BFSA_format_3:
\ 000001AA ........ _BLF po_unlock,??po_unlock??rT
366 unsigned char buff[512] ;
367 disk_read (
368 buff, /* Data buffer to store read data */
369 0, /* Sector number (LBA) */
370 1
371 ) ;
\ 000001AE 0122 MOV R2,#+1
\ 000001B0 0021 MOV R1,#+0
\ 000001B2 02A8 ADD R0,SP,#+8
\ 000001B4 ........ _BLF disk_read,??disk_read??rT
372 return _status;
\ 000001B8 0198 LDR R0,[SP, #+4]
\ 000001BA 7FB0 ADD SP,#+508
\ 000001BC 03B0 ADD SP,#+12
\ 000001BE C046 NOP
\ 000001C0 REQUIRE ?Subroutine12
\ 000001C0 ;; // Fall through to label ?Subroutine12
373 }
374
375
376 /*****************************************************************
377 *
378 *
379 * S U B - R O U T I N E : BFSA_DIR
380 *
381 *-----------------------------------------------------------------
382 *
383 * Object :
384 *
385 *
386 * Argument :
387 *
388 * Return value :
389 *
390 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
391 ULONG BFSA_dir( void )
392 {
\ BFSA_dir:
\ 00000000 FFB5 PUSH {R0-R7,LR}
393 ULONG _ulNbRead = 0xFF;
\ 00000002 FF20 MOV R0,#+255
\ 00000004 0090 STR R0,[SP, #+0]
394 int a;
395 ULONG status = BAD_ARGUMENT;
396 USHORT iFatEntry;
397 ULONG freeSpace = 0;
\ 00000006 0020 MOV R0,#+0
\ 00000008 0390 STR R0,[SP, #+12]
\ 0000000A 6A46 MOV R2,SP
\ 0000000C 0521 MOV R1,#+5
\ 0000000E 7348 LDR R0,??BFSA_dir_0 ;; file_list
398
399 status = BFSA_list(file_list,sizeof(file_list)/sizeof(file_list[0]),&_ulNbRead);
\ 00000010 ........ BL BFSA_list
\ 00000014 0190 STR R0,[SP, #+4]
400 if(!BFSA_FAILURE(status))
\ 00000016 8025 MOV R5,#+128
\ 00000018 2D06 LSL R5,R5,#+24 ;; #-2147483648
\ 0000001A 2842 TST R0,R5
\ 0000001C .... BEQ .+5
\ 0000001E D9E0 B ??BFSA_dir_1
401 {
402 if (_ulNbRead)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -