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

📄 disk.lst

📁 protues仿真
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"Disk.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:
  81               	.global	_Z9Disk_Initv
  83               	_Z9Disk_Initv:
   1:Disk.c        **** /*
   2:Disk.c        **** ;**************************************************************************************************
   3:Disk.c        **** ;*									Copyright (c) 2006 by JiaoJinXing. 
   4:Disk.c        **** ;*											All rights reserved.
   5:Disk.c        **** ;*
   6:Disk.c        **** ;*---- 文件信息 -----------------------------------------------------------------------------------
   7:Disk.c        **** ;* 文   件   名 : Disk.c
   8:Disk.c        **** ;* 创   建   人 : 焦进星
   9:Disk.c        **** ;* 描        述 : 磁盘管理文件
  10:Disk.c        **** ;*
  11:Disk.c        **** ;*---- 历史版本信息 -------------------------------------------------------------------------------
  12:Disk.c        **** ;* 日   期  : 2008年 12 月 15 日
  13:Disk.c        **** ;* 创 建 人  : 焦进星
  14:Disk.c        **** ;* 描   述  : 建立版本 V1.0.0
  15:Disk.c        **** ;*
  16:Disk.c        **** ;*---- 联系方式 -----------------------------------------------------------------------------------
  17:Disk.c        **** ;* Email    : wyoujtg@163.com
  18:Disk.c        **** ;* Web      : http://wyoujtg.blog.163.com  
  19:Disk.c        **** ;**************************************************************************************************
  20:Disk.c        **** ;*/
  21:Disk.c        **** 
  22:Disk.c        **** #include "minifs.h"
  23:Disk.c        **** 
  24:Disk.c        **** /*
  25:Disk.c        **** ;**************************************************************************************************
  26:Disk.c        **** ;* 函数名称 : Disk_Init
  27:Disk.c        **** ;* 描    述 : 磁盘初始化
  28:Disk.c        **** ;* 输 	 入 : 无
  29:Disk.c        **** ;*        
  30:Disk.c        **** ;* 输 	 出 : TRUE OR FALSE
  31:Disk.c        **** ;**************************************************************************************************
  32:Disk.c        **** ;*/
  33:Disk.c        **** uint8 Disk_Init(void)
  34:Disk.c        **** {
  85               	.LM1:
  86               	/* prologue: frame size=0 */
  87 0000 8F92      		push r8
  88 0002 9F92      		push r9
  89 0004 AF92      		push r10
  90 0006 BF92      		push r11
  91 0008 DF92      		push r13
  92 000a EF92      		push r14
  93 000c FF92      		push r15
  94 000e 0F93      		push r16
  95 0010 1F93      		push r17
  96 0012 CF93      		push r28
  97 0014 DF93      		push r29
  98               	/* prologue end (size=11) */
  99               	.LBB2:
 100               	.LBB3:
  35:Disk.c        **** 	uint8 *Buf;
  36:Disk.c        **** 	uint8  NumFATs;
  37:Disk.c        **** 	uint32 RootSecCnt;
  38:Disk.c        **** 	uint32 FATSz;
  39:Disk.c        **** 	uint32 TotSec;
  40:Disk.c        **** 
  41:Disk.c        **** 	if (!Init_IDE())
 102               	.LM2:
 103 0016 0E94 0000 		call _Z8Init_IDEv
 104 001a 8823      		tst r24
 105 001c 09F4      		brne .+2
 106 001e FDC0      		rjmp .L9
  42:Disk.c        **** 	{
  43:Disk.c        **** 		return FALSE;
  44:Disk.c        **** 	}
  45:Disk.c        **** 
  46:Disk.c        **** 	Buf = OpenSector(0);
 108               	.LM3:
 109 0020 60E0      		ldi r22,lo8(0)
 110 0022 70E0      		ldi r23,hi8(0)
 111 0024 80E0      		ldi r24,hlo8(0)
 112 0026 90E0      		ldi r25,hhi8(0)
 113 0028 0E94 0000 		call _Z10OpenSectorm
 114 002c 7C01      		movw r14,r24
  47:Disk.c        **** 	if (Buf == NULL)
 116               	.LM4:
 117 002e 0097      		sbiw r24,0
 118 0030 09F4      		brne .+2
 119 0032 F8C0      		rjmp .L1
  48:Disk.c        **** 	{
  49:Disk.c        **** 		return FALSE;
  50:Disk.c        **** 	}
  51:Disk.c        **** 
  52:Disk.c        **** 	/* 每扇区字节数 */
  53:Disk.c        **** 	if (GET_UINT16(Buf, BPB_BytsPerSec) != 512)	/* 必须为512 */
 121               	.LM5:
 122 0034 FC01      		movw r30,r24
 123 0036 8385      		ldd r24,Z+11
 124 0038 282F      		mov r18,r24
 125 003a 3327      		clr r19
 126 003c 8485      		ldd r24,Z+12
 127 003e 9927      		clr r25
 128 0040 982F      		mov r25,r24
 129 0042 8827      		clr r24
 130 0044 282B      		or r18,r24
 131 0046 392B      		or r19,r25
 132 0048 2050      		subi r18,lo8(512)
 133 004a 3240      		sbci r19,hi8(512)
 134 004c 09F0      		breq .+2
 135 004e E5C0      		rjmp .L9
  54:Disk.c        **** 	{
  55:Disk.c        **** 		return FALSE;
  56:Disk.c        **** 	}
  57:Disk.c        **** 
  58:Disk.c        **** 	/* 检查0扇区末尾是否为0xAA55 */
  59:Disk.c        **** 	if (GET_UINT16(Buf, 510) != 0xAA55)
 137               	.LM6:
 138 0050 4EEF      		ldi r20,lo8(510)
 139 0052 51E0      		ldi r21,hi8(510)
 140 0054 E40E      		add r14,r20
 141 0056 F51E      		adc r15,r21
 142 0058 F701      		movw r30,r14
 143 005a 8191      		ld r24,Z+
 144 005c 7F01      		movw r14,r30
 145 005e 282F      		mov r18,r24
 146 0060 3327      		clr r19
 147 0062 8081      		ld r24,Z
 148 0064 41E0      		ldi r20,lo8(-511)
 149 0066 5EEF      		ldi r21,hi8(-511)
 150 0068 E40E      		add r14,r20
 151 006a F51E      		adc r15,r21
 152 006c 9927      		clr r25
 153 006e 982F      		mov r25,r24
 154 0070 8827      		clr r24
 155 0072 282B      		or r18,r24
 156 0074 392B      		or r19,r25
 157 0076 2555      		subi r18,lo8(-21931)
 158 0078 3A4A      		sbci r19,hi8(-21931)
 159 007a 09F0      		breq .+2
 160 007c CEC0      		rjmp .L9
  60:Disk.c        **** 	{
  61:Disk.c        **** 		return FALSE;
  62:Disk.c        **** 	}
  63:Disk.c        **** 
  64:Disk.c        **** 	/* 保留扇区数 */
  65:Disk.c        **** 	/* 第一张FAT表开始扇区 */
  66:Disk.c        **** 	FS_FATStartSec		= GET_UINT16(Buf, BPB_RsvdSecCnt);
 162               	.LM7:
 163 007e F701      		movw r30,r14
 164 0080 D684      		ldd r13,Z+14
 165 0082 D092 0000 		sts FS_FATStartSec,r13
  67:Disk.c        **** 
  68:Disk.c        **** 	/* FAT表数 */
  69:Disk.c        **** 	NumFATs				= Buf[BPB_NumFATs];
 167               	.LM8:
 168 0086 4089      		ldd r20,Z+16
  70:Disk.c        **** 
  71:Disk.c        **** 	/* 每张FAT表占扇区数 */
  72:Disk.c        **** 	FATSz				= GET_UINT16(Buf, BPB_FATSz16);
 170               	.LM9:
 171 0088 8689      		ldd r24,Z+22
 172 008a 282F      		mov r18,r24
 173 008c 3327      		clr r19
 174 008e 8789      		ldd r24,Z+23
 175 0090 9927      		clr r25
 176 0092 982F      		mov r25,r24
 177 0094 8827      		clr r24
 178 0096 282B      		or r18,r24
 179 0098 392B      		or r19,r25
 180 009a 4901      		movw r8,r18
 181 009c AA24      		clr r10
 182 009e BB24      		clr r11
  73:Disk.c        **** 	if (FATSz == 0)
 184               	.LM10:
 185 00a0 8114      		cp r8,__zero_reg__
 186 00a2 9104      		cpc r9,__zero_reg__
 187 00a4 A104      		cpc r10,__zero_reg__
 188 00a6 B104      		cpc r11,__zero_reg__
 189 00a8 41F5      		brne .L6
  74:Disk.c        **** 	FATSz				= GET_UINT32(Buf, BPB_FATSz32);
 191               	.LM11:
 192 00aa 84A1      		ldd r24,Z+36
 193 00ac 882E      		mov r8,r24
 194 00ae 9924      		clr r9
 195 00b0 AA24      		clr r10
 196 00b2 BB24      		clr r11
 197 00b4 85A1      		ldd r24,Z+37
 198 00b6 9927      		clr r25
 199 00b8 AA27      		clr r26
 200 00ba BB27      		clr r27
 201 00bc BA2F      		mov r27,r26
 202 00be A92F      		mov r26,r25
 203 00c0 982F      		mov r25,r24
 204 00c2 8827      		clr r24
 205 00c4 882A      		or r8,r24
 206 00c6 992A      		or r9,r25
 207 00c8 AA2A      		or r10,r26
 208 00ca BB2A      		or r11,r27
 209 00cc 86A1      		ldd r24,Z+38
 210 00ce 9927      		clr r25
 211 00d0 AA27      		clr r26
 212 00d2 BB27      		clr r27
 213 00d4 DC01      		movw r26,r24
 214 00d6 9927      		clr r25
 215 00d8 8827      		clr r24
 216 00da 882A      		or r8,r24
 217 00dc 992A      		or r9,r25
 218 00de AA2A      		or r10,r26
 219 00e0 BB2A      		or r11,r27
 220 00e2 87A1      		ldd r24,Z+39
 221 00e4 9927      		clr r25
 222 00e6 AA27      		clr r26
 223 00e8 BB27      		clr r27
 224 00ea B82F      		mov r27,r24
 225 00ec AA27      		clr r26
 226 00ee 9927      		clr r25
 227 00f0 8827      		clr r24
 228 00f2 882A      		or r8,r24
 229 00f4 992A      		or r9,r25
 230 00f6 AA2A      		or r10,r26
 231 00f8 BB2A      		or r11,r27
 232               	.L6:
  75:Disk.c        **** 
  76:Disk.c        **** 	/* 根目录目录项数 */
  77:Disk.c        **** 	FS_RootEntCnt		= GET_UINT16(Buf, BPB_RootEntCnt);
 234               	.LM12:
 235 00fa F701      		movw r30,r14
 236 00fc 8189      		ldd r24,Z+17
 237 00fe 082F      		mov r16,r24
 238 0100 1127      		clr r17
 239 0102 8289      		ldd r24,Z+18
 240 0104 9927      		clr r25
 241 0106 982F      		mov r25,r24

⌨️ 快捷键说明

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