⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fdt.lst

📁 AT89C51 MP3源程序AT89C51 MP3源程序 SD AT89C51 MP3源程序AT89C51 MP3源程序 SD
💻 LST
📖 第 1 页 / 共 3 页
字号:
   1               		.file	"fdt.c"
   2               		.arch atmega128
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
  83               	.global	_Z15ReadRootFDTInfojP4_FDT
  85               	_Z15ReadRootFDTInfojP4_FDT:
   1:fdt.c         **** /*
   2:fdt.c         **** ;**************************************************************************************************
   3:fdt.c         **** ;*									Copyright (c) 2006 by JiaoJinXing. 
   4:fdt.c         **** ;*											All rights reserved.
   5:fdt.c         **** ;*
   6:fdt.c         **** ;*---- 文件信息 -----------------------------------------------------------------------------------
   7:fdt.c         **** ;* 文   件   名 : fdt.c
   8:fdt.c         **** ;* 创   建   人 : 焦进星
   9:fdt.c         **** ;* 描        述 : 根目录项文件
  10:fdt.c         **** ;*
  11:fdt.c         **** ;*---- 历史版本信息 -------------------------------------------------------------------------------
  12:fdt.c         **** ;* 日   期  : 2008年 12 月 15 日
  13:fdt.c         **** ;* 创 建 人  : 焦进星
  14:fdt.c         **** ;* 描   述  : 建立版本 V1.0.0
  15:fdt.c         **** ;*
  16:fdt.c         **** ;*---- 联系方式 -----------------------------------------------------------------------------------
  17:fdt.c         **** ;* Email    : wyoujtg@163.com
  18:fdt.c         **** ;* Web      : http://wyoujtg.blog.163.com  
  19:fdt.c         **** ;**************************************************************************************************
  20:fdt.c         **** ;*/
  21:fdt.c         **** 
  22:fdt.c         **** #include "minifs.h"
  23:fdt.c         **** 
  24:fdt.c         **** /*
  25:fdt.c         **** ;**************************************************************************************************
  26:fdt.c         **** ;* 函数名称 : ReadRootFDTInfo
  27:fdt.c         **** ;* 描    述 : 读取指定根目录项
  28:fdt.c         **** ;* 输 	 入 : FDTIndex: 目录项索引, pFDT: 目录项指针
  29:fdt.c         **** ;*        
  30:fdt.c         **** ;* 输 	 出 : TRUE OR FALSE
  31:fdt.c         **** ;**************************************************************************************************
  32:fdt.c         **** ;*/
  33:fdt.c         **** uint8 ReadRootFDTInfo(uint16 FDTIndex, FDT *pFDT)
  34:fdt.c         **** {
  87               	.LM1:
  88               	/* prologue: frame size=0 */
  89 0000 EF92      		push r14
  90 0002 FF92      		push r15
  91 0004 0F93      		push r16
  92 0006 1F93      		push r17
  93 0008 CF93      		push r28
  94 000a DF93      		push r29
  95               	/* prologue end (size=6) */
  96 000c AC01      		movw r20,r24
  97 000e 7B01      		movw r14,r22
  98               	.LBB2:
  99               	.LBB3:
  35:fdt.c         **** 	uint16 SecIndex, ByteOffset;
  36:fdt.c         **** 	uint8 *Buf;
  37:fdt.c         **** 
  38:fdt.c         **** 	if (FDTIndex >= MAX_FDT_NUM)				/* 索引无效 */
 101               	.LM2:
 102 0010 8091 0000 		lds r24,FS_RootEntCnt
 103 0014 9091 0000 		lds r25,(FS_RootEntCnt)+1
 104 0018 4817      		cp r20,r24
 105 001a 5907      		cpc r21,r25
 106 001c 18F0      		brlo .L2
  39:fdt.c         **** 	{
  40:fdt.c         **** 		return FALSE;
 108               	.LM3:
 109 001e 60E0      		ldi r22,lo8(0)
 110 0020 70E0      		ldi r23,hi8(0)
 111 0022 43C0      		rjmp .L1
 112               	.L2:
  41:fdt.c         **** 	}
  42:fdt.c         **** 
  43:fdt.c         **** 	SecIndex   = FDTIndex*32 / 512 + FS_RootDirStartSec;/* 扇区号 */
 114               	.LM4:
 115 0024 75E0      		ldi r23,5
 116 0026 440F      	1:	lsl r20
 117 0028 551F      		rol r21
 118 002a 7A95      		dec r23
 119 002c E1F7      		brne 1b
 120 002e 9A01      		movw r18,r20
 121 0030 232F      		mov r18,r19
 122 0032 3327      		clr r19
 123 0034 2695      		lsr r18
 124 0036 8091 0000 		lds r24,FS_RootDirStartSec
 125 003a 9091 0000 		lds r25,(FS_RootDirStartSec)+1
 126 003e 280F      		add r18,r24
 127 0040 391F      		adc r19,r25
  44:fdt.c         **** 	ByteOffset = FDTIndex*32 % 512;				/* 字节偏移 */
 129               	.LM5:
 130 0042 8A01      		movw r16,r20
 131 0044 1170      		andi r17,hi8(511)
  45:fdt.c         **** 
  46:fdt.c         **** 	Buf = OpenSector(SecIndex);					/* 打开扇区 */
 133               	.LM6:
 134 0046 C901      		movw r24,r18
 135 0048 AA27      		clr r26
 136 004a BB27      		clr r27
 137 004c BC01      		movw r22,r24
 138 004e CD01      		movw r24,r26
 139 0050 0E94 0000 		call _Z10OpenSectorm
 140 0054 EC01      		movw r28,r24
  47:fdt.c         **** 	if (Buf == NULL)
 142               	.LM7:
 143 0056 0097      		sbiw r24,0
 144 0058 11F4      		brne .L3
  48:fdt.c         **** 	{
  49:fdt.c         **** 		return FALSE;
 146               	.LM8:
 147 005a BC01      		movw r22,r24
 148 005c 26C0      		rjmp .L1
 149               	.L3:
  50:fdt.c         **** 	}
  51:fdt.c         **** 
  52:fdt.c         **** 	Buf += ByteOffset;							/* 调整扇区读写指针 */
 151               	.LM9:
 152 005e C00F      		add r28,r16
 153 0060 D11F      		adc r29,r17
  53:fdt.c         **** 
  54:fdt.c         **** 	CopyNbyte(pFDT->Name, Buf, 11);				/* 名字 */
 155               	.LM10:
 156 0062 4BE0      		ldi r20,lo8(11)
 157 0064 50E0      		ldi r21,hi8(11)
 158 0066 BE01      		movw r22,r28
 159 0068 C701      		movw r24,r14
 160 006a 0E94 0000 		call _Z9CopyNbytePvS_j
  55:fdt.c         **** 
  56:fdt.c         **** 	pFDT->FstClusLO = GET_UINT16(Buf, 26);		/* 首簇号 */	
 162               	.LM11:
 163 006e 8A8D      		ldd r24,Y+26
 164 0070 282F      		mov r18,r24
 165 0072 3327      		clr r19
 166 0074 8B8D      		ldd r24,Y+27
 167 0076 9927      		clr r25
 168 0078 982F      		mov r25,r24
 169 007a 8827      		clr r24
 170 007c 282B      		or r18,r24
 171 007e 392B      		or r19,r25
 172 0080 F701      		movw r30,r14
 173 0082 2487      		std Z+12,r18
 174 0084 3587      		std Z+13,r19
  57:fdt.c         **** 
  58:fdt.c         **** 	pFDT->FileSize  = GET_UINT16(Buf, 28);		/* 大小 */
 176               	.LM12:
 177 0086 8C8D      		ldd r24,Y+28
 178 0088 282F      		mov r18,r24
 179 008a 3327      		clr r19
 180 008c 8D8D      		ldd r24,Y+29
 181 008e 9927      		clr r25
 182 0090 982F      		mov r25,r24
 183 0092 8827      		clr r24
 184 0094 282B      		or r18,r24
 185 0096 392B      		or r19,r25
 186 0098 C901      		movw r24,r18
 187 009a AA27      		clr r26
 188 009c BB27      		clr r27
 189 009e 8687      		std Z+14,r24
 190 00a0 9787      		std Z+15,r25
 191 00a2 A08B      		std Z+16,r26
 192 00a4 B18B      		std Z+17,r27
  59:fdt.c         **** 
  60:fdt.c         **** 	return TRUE;
 194               	.LM13:
 195 00a6 61E0      		ldi r22,lo8(1)
 196 00a8 70E0      		ldi r23,hi8(1)
 197               	.L1:
 198               	.LBE3:
 199               	.LBE2:
  61:fdt.c         **** }
 201               	.LM14:
 202 00aa CB01      		movw r24,r22
 203               	/* epilogue: frame size=0 */
 204 00ac DF91      		pop r29
 205 00ae CF91      		pop r28
 206 00b0 1F91      		pop r17
 207 00b2 0F91      		pop r16
 208 00b4 FF90      		pop r15
 209 00b6 EF90      		pop r14
 210 00b8 0895      		ret
 211               	/* epilogue end (size=7) */
 212               	/* function uint8 ReadRootFDTInfo(uint16, FDT*) size 94 (81) */
 220               	.global	_Z16WriteRootFDTInfojP4_FDT
 222               	_Z16WriteRootFDTInfojP4_FDT:
  62:fdt.c         **** 
  63:fdt.c         **** /*
  64:fdt.c         **** ;**************************************************************************************************
  65:fdt.c         **** ;* 函数名称 : WriteRootFDTInfo
  66:fdt.c         **** ;* 描    述 : 写指定根目录项
  67:fdt.c         **** ;* 输 	 入 : FDTIndex: 目录项索引, pFDT: 目录项指针
  68:fdt.c         **** ;*        
  69:fdt.c         **** ;* 输 	 出 : TRUE OR FALSE
  70:fdt.c         **** ;**************************************************************************************************
  71:fdt.c         **** ;*/
  72:fdt.c         **** uint8 WriteRootFDTInfo(uint16 FDTIndex, FDT *pFDT)
  73:fdt.c         **** {
 224               	.LM15:
 225               	/* prologue: frame size=0 */
 226 00ba EF92      		push r14
 227 00bc FF92      		push r15
 228 00be 0F93      		push r16
 229 00c0 1F93      		push r17
 230 00c2 CF93      		push r28
 231 00c4 DF93      		push r29
 232               	/* prologue end (size=6) */
 233 00c6 AC01      		movw r20,r24
 234 00c8 7B01      		movw r14,r22
 235               	.LBB4:
 236               	.LBB5:
  74:fdt.c         **** 	uint16 SecIndex, ByteOffset;
  75:fdt.c         **** 	uint8 *Buf;
  76:fdt.c         **** 
  77:fdt.c         **** 	if (FDTIndex >= MAX_FDT_NUM)				/* 索引无效 */
 238               	.LM16:
 239 00ca 8091 0000 		lds r24,FS_RootEntCnt
 240 00ce 9091 0000 		lds r25,(FS_RootEntCnt)+1
 241 00d2 4817      		cp r20,r24
 242 00d4 5907      		cpc r21,r25
 243 00d6 18F0      		brlo .L5
  78:fdt.c         **** 	{
  79:fdt.c         **** 		return FALSE;
 245               	.LM17:
 246 00d8 80E0      		ldi r24,lo8(0)
 247 00da 90E0      		ldi r25,hi8(0)
 248 00dc 3AC0      		rjmp .L4
 249               	.L5:
  80:fdt.c         **** 	}
  81:fdt.c         **** 
  82:fdt.c         **** 	SecIndex   = FDTIndex*32 / 512 + FS_RootDirStartSec;/* 扇区号 */
 251               	.LM18:
 252 00de C5E0      		ldi r28,5
 253 00e0 440F      	1:	lsl r20
 254 00e2 551F      		rol r21
 255 00e4 CA95      		dec r28
 256 00e6 E1F7      		brne 1b
 257 00e8 9A01      		movw r18,r20
 258 00ea 232F      		mov r18,r19
 259 00ec 3327      		clr r19
 260 00ee 2695      		lsr r18
 261 00f0 8091 0000 		lds r24,FS_RootDirStartSec
 262 00f4 9091 0000 		lds r25,(FS_RootDirStartSec)+1
 263 00f8 280F      		add r18,r24
 264 00fa 391F      		adc r19,r25
  83:fdt.c         **** 	ByteOffset = FDTIndex*32 % 512;				/* 字节偏移 */
 266               	.LM19:
 267 00fc 8A01      		movw r16,r20
 268 00fe 1170      		andi r17,hi8(511)
  84:fdt.c         **** 
  85:fdt.c         **** 	Buf = OpenSector(SecIndex);					/* 打开扇区 */
 270               	.LM20:
 271 0100 C901      		movw r24,r18
 272 0102 AA27      		clr r26
 273 0104 BB27      		clr r27
 274 0106 BC01      		movw r22,r24
 275 0108 CD01      		movw r24,r26
 276 010a 0E94 0000 		call _Z10OpenSectorm
 277 010e EC01      		movw r28,r24
  86:fdt.c         **** 	if (Buf == NULL)
 279               	.LM21:
 280 0110 0097      		sbiw r24,0
 281 0112 F9F0      		breq .L4
  87:fdt.c         **** 	{
  88:fdt.c         **** 		return FALSE;
  89:fdt.c         **** 	}
  90:fdt.c         **** 
  91:fdt.c         **** 	Buf += ByteOffset;							/* 调整扇区读写指针 */
 283               	.LM22:
 284 0114 C00F      		add r28,r16
 285 0116 D11F      		adc r29,r17
  92:fdt.c         **** 
  93:fdt.c         **** 	CopyNbyte(Buf, pFDT->Name, 11);				/* 名字 */
 287               	.LM23:
 288 0118 4BE0      		ldi r20,lo8(11)
 289 011a 50E0      		ldi r21,hi8(11)
 290 011c B701      		movw r22,r14
 291 011e CE01      		movw r24,r28
 292 0120 0E94 0000 		call _Z9CopyNbytePvS_j
  94:fdt.c         **** 
  95:fdt.c         **** 	SET_UINT16(Buf, 26, pFDT->FstClusLO);		/* 首簇号 */	
 294               	.LM24:
 295 0124 F701      		movw r30,r14
 296 0126 8485      		ldd r24,Z+12

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -