亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fat1618_2.c

?? Verilog, c and asm source codes of the Minimig system, a fpga implementation of the Amiga computer.
?? C
字號:
/*
Copyright 2005, 2006, 2007 Dennis van Weeren

This file is part of Minimig

Minimig is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

Minimig is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

This is a simple FAT16 handler. It works on a sector basis to allow fastest acces on disk
images.

11-12-2005		-first version, ported from FAT1618.C
*/
				
#include <stdio.h>
#include "ata18.h"
#include "fat1618_2.h"

/*internal global variables*/
static unsigned long fatstart;					/*start LBA of first FAT table*/
static unsigned long datastart;       			/*start LBA of data field*/
static unsigned long dirstart;   				/*start LBA of directory table*/
static unsigned char fatno; 					/*number of FAT tables*/
static unsigned char clustersize;     			/*size of a cluster in blocks*/
static unsigned short direntrys;     			/*number of entry's in directory table*/
unsigned char secbuf[512];						/*sector buffer*/

/*FindDrive checks if a card is present. if a card is present it will check for
a valid FAT16 primary partition*/
unsigned char FindDrive2(void)
{
	unsigned long fatsize;				/*size of fat*/
	unsigned long dirsize;				/*size of directory region in sectors*/
		
	if(!AtaReadSector(0,secbuf))		/*read partition sector*/
		return(0);
	
	if(secbuf[450]!=0x04 && secbuf[450]!=0x06) /*first partition filesystem type: FAT16*/
		return(0);
	                  					/*check signature*/		
	if(secbuf[510]!=0x55 || secbuf[511]!=0xaa)
		return(0);
	
	/*get start of first partition*/
	fatstart=(unsigned long)secbuf[454];
	fatstart+=(unsigned long)secbuf[455]*256;
	fatstart+=(unsigned long)secbuf[466]*65536;
	fatstart+=(unsigned long)secbuf[467]*16777216;
			
	/*read boot sector*/		
	if(!AtaReadSector(fatstart,secbuf))
		return(0);	
	
	/*check for near-jump or short-jump opcode*/
	if(secbuf[0]!=0xe9 && secbuf[0]!=0xeb)
		return(0);
	
	/*check if blocksize is really 512 bytes*/
	if(secbuf[11]!=0x00 || secbuf[12]!=0x02)
		return(0);
	
	/*check medium descriptorbyte, must be 0xf8 for hard drive*/
	if(secbuf[21]!=0xf8)
		return(0);
	
	/*calculate drive's parameters from bootsector, first up is size of directory*/
	direntrys=secbuf[17]+(secbuf[18]*256);	
	dirsize=((direntrys*32)+511)/512;                  
	
	/*calculate start of FAT,size of FAT and number of FAT's*/
	fatstart=fatstart+secbuf[14]+(secbuf[15]*256);	
	fatsize=secbuf[22]+(secbuf[23]*256);
	fatno=secbuf[16];
	
	/*calculate start of directory*/
	dirstart=fatstart+(fatno*fatsize);
	
	/*get clustersize*/
	clustersize=secbuf[13];
	
	/*calculate start of data*/
	datastart=dirstart+dirsize;  
    	    
    /*some debug output*/
	printf("fatsize:%ld\r",fatsize);
	printf("fatno:%d\r",fatno);
	printf("fatstart:%ld\r",fatstart);
	printf("dirstart:%ld\r",dirstart);
	printf("direntrys:%d\r",direntrys);
	printf("datastart:%ld\r",datastart);
	printf("clustersize:%d\r",clustersize);
  	return(1);
}

/*scan directory, yout must pass a file handle to this function
search modes: 0=first,1=next,2=previous*/
unsigned char FileSearch2(struct file2TYPE *file, unsigned char mode)
{
	unsigned long sf,sb;
	unsigned short i;
	unsigned char j;
	
	sb=0;/*buffer is empty*/
	file->len=0;

	if (mode==0)
		file->entry=0;
	else if (mode==1)
		file->entry++;
	else
		file->entry--;

	while(file->entry < direntrys)
	{	
		/*calculate sector and offset*/
		sf = dirstart;
		sf += (file->entry)/16;
	   	i = (file->entry%16)*32;			
	
		/*load sector if not in buffer*/
		if (sb != sf)
		{
			sb = sf;
			if (!AtaReadSector(sb,secbuf))
				return(0);	
		}	
		
		/*check if valid file entry*/
		if (secbuf[i]!=0x00 && secbuf[i]!=0xe5 && secbuf[i]!=0x2e)
	    	/*and valid attributes*/
	    	if ((secbuf[i+11]&0x1a)==0x00)
			{
				/*copy name*/
				for (j=0;j<11;j++)           	
					file->name[j] = secbuf[i+j];
				file->name[j] = 0x00;
				
				file->attributes = secbuf[i+11];

				/*get length of file*/
				file->len = *((unsigned long*)&secbuf[i+28]);	//it only works when using little endian long representation
						
				/*get first cluster of file*/
				file->cluster=(unsigned long)secbuf[i+26]+((unsigned long)secbuf[i+27]*256);
				
				/*reset sector index*/
				file->sec=0;
						
				return(1);
			}
		if((mode==0) || (mode==1))
			file->entry++;
		else
			file->entry--;
	}		
	return(0);
}

/*point to next sector in file*/
unsigned char FileNextSector2(struct file2TYPE *file)
{
	unsigned long sb;
	unsigned short i;
	
	/*increment sector index*/
	file->sec++;
	
	/*if we are now in another cluster, look up cluster*/
	if((file->sec%clustersize)==0)
	{
		/*calculate sector that contains FAT-link*/
		sb=fatstart;
		sb+=(file->cluster/256);
		/*calculate offset*/
		i=(file->cluster%256);
		i*=2;
		
		/*read sector of FAT*/
		if(!AtaReadSector(sb,secbuf))
			return(0);
			
		/*get FAT-link*/
		file->cluster=((unsigned long)secbuf[i+1]*256)+(unsigned long)secbuf[i];					
	}

	return(1);
}

/*read sector into buffer*/
unsigned char FileRead2(struct file2TYPE *file)
{
	unsigned long sb;
	
	sb=datastart;						/*start of data in partition*/
	sb+=clustersize*(file->cluster-2);	/*cluster offset*/
	sb+=(file->sec%clustersize); 		/*sector offset in cluster*/
										/*read sector from drive*/
	if(!AtaReadSector(sb,secbuf))
		return(0);
	else
		return(1);
}

/*write buffer to sector*/
unsigned char FileWrite2(struct file2TYPE *file)
{
	unsigned long sb;
	
	sb=datastart;						/*start of data in partition*/
	sb+=clustersize*(file->cluster-2);	/*cluster offset*/
	sb+=(file->sec%clustersize); 		/*sector offset in cluster*/
										/*write sector from drive*/
	if(!AtaWriteSector(sb,secbuf))
		return(0);
	else
		return(1);
}


















/***************************************************************************************************************************************/
/***************************************************************************************************************************************/
/***************************************************************************************************************************************/
/***************************************************************************************************************************************/
/***************************************************************************************************************************************/


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区欧美一区| 国产午夜精品久久| 欧美午夜不卡视频| 欧美伊人久久久久久午夜久久久久| 国产成人啪免费观看软件| 国产大片一区二区| av在线不卡电影| gogo大胆日本视频一区| 91视频观看免费| 欧美在线观看一二区| 555www色欧美视频| 精品久久99ma| 久久久精品欧美丰满| 一区视频在线播放| 亚洲一区二区不卡免费| 蜜臀精品一区二区三区在线观看| 蜜臀国产一区二区三区在线播放| 久久电影网电视剧免费观看| 国产电影一区二区三区| 成人精品视频一区二区三区| 色综合久久中文综合久久牛| 欧美人妖巨大在线| 精品国产乱码久久久久久夜甘婷婷 | 日韩电影在线看| 久久疯狂做爰流白浆xx| 粉嫩欧美一区二区三区高清影视| 99re热这里只有精品免费视频 | 欧美中文字幕一区| 777xxx欧美| 国产视频在线观看一区二区三区| 亚洲精品国产第一综合99久久| 亚洲mv在线观看| 国产白丝精品91爽爽久久| 欧美性生活一区| 久久久国际精品| 婷婷一区二区三区| 成人亚洲一区二区一| 538在线一区二区精品国产| 日本一区二区免费在线观看视频| 一区二区激情视频| 国产东北露脸精品视频| 91精品在线免费观看| 日韩一区中文字幕| 久久电影国产免费久久电影| 91在线精品一区二区三区| 欧美大胆人体bbbb| 欧美在线一区二区| 亚洲国产人成综合网站| 国产综合成人久久大片91| av色综合久久天堂av综合| 91精品国产麻豆国产自产在线| 国产日韩欧美精品综合| 久久成人免费网| 欧美日本视频在线| 亚洲自拍偷拍综合| 92国产精品观看| 久久你懂得1024| 免费视频一区二区| 欧美视频完全免费看| 亚洲视频在线一区二区| 高清国产一区二区| 久久久国产精品午夜一区ai换脸| 日韩高清电影一区| 欧美性videosxxxxx| 一区二区高清视频在线观看| 国产精品一区一区三区| 日韩欧美国产wwwww| 精品在线免费视频| 色域天天综合网| 国产精品久久久久影院亚瑟| 国产伦精品一区二区三区免费| 日韩一区二区在线观看视频| 亚洲第一av色| 91麻豆精品国产91久久久资源速度| 亚洲日本电影在线| 99久久伊人久久99| 1024亚洲合集| 日本伦理一区二区| 樱花影视一区二区| 欧美色区777第一页| 亚洲成a人片在线观看中文| 91成人在线精品| 婷婷亚洲久悠悠色悠在线播放| 91国在线观看| 午夜精品久久久久久久| 5566中文字幕一区二区电影| 麻豆专区一区二区三区四区五区| 日韩欧美精品在线| 91免费视频观看| 国产蜜臀97一区二区三区| 国产乱码字幕精品高清av| 国产精品卡一卡二卡三| 91视频一区二区| 婷婷中文字幕综合| 日韩欧美一区电影| 国产成人精品免费| 亚洲精品高清在线| 91超碰这里只有精品国产| 精品一区二区三区在线视频| 久久精品一区蜜桃臀影院| 97久久精品人人澡人人爽| 一卡二卡欧美日韩| 3atv一区二区三区| 懂色av一区二区三区免费看| 亚洲美女一区二区三区| 日韩西西人体444www| 成人免费视频caoporn| 亚洲综合免费观看高清在线观看| 欧美日韩黄视频| 高清在线不卡av| 性久久久久久久久久久久| 日韩精品一区二区三区中文不卡| 暴力调教一区二区三区| 亚洲成av人在线观看| 国产欧美一区二区三区鸳鸯浴 | 91福利在线播放| 蜜桃在线一区二区三区| 中文字幕在线一区免费| 欧美一级夜夜爽| 97久久超碰国产精品电影| 久久成人精品无人区| 亚洲男人天堂一区| 久久久久久9999| 欧美精品第一页| 色菇凉天天综合网| 成人动漫在线一区| 韩国精品在线观看| 青青草91视频| 亚洲国产一区二区a毛片| 国产欧美精品一区二区色综合朱莉| 制服.丝袜.亚洲.中文.综合| 99视频热这里只有精品免费| 精品在线视频一区| 美女脱光内衣内裤视频久久网站 | 国产一区二区导航在线播放| 亚洲一卡二卡三卡四卡五卡| 欧美激情一区二区三区在线| 日韩一区二区三区精品视频| 欧美三区在线视频| 欧美偷拍一区二区| 色综合天天天天做夜夜夜夜做| 国产成人啪午夜精品网站男同| 久久精品国内一区二区三区 | 日韩一区二区免费电影| 欧美日本视频在线| 欧美性生活一区| 欧美日韩久久一区二区| 日本道免费精品一区二区三区| 99国产精品一区| 成人国产一区二区三区精品| 成人一区二区在线观看| 丰满岳乱妇一区二区三区| 成人小视频在线| 粉嫩aⅴ一区二区三区四区| 国产福利一区二区三区视频 | 精品日韩一区二区三区免费视频| 这里只有精品免费| 欧美高清www午色夜在线视频| 欧美三级韩国三级日本一级| 在线观看网站黄不卡| 精品视频免费看| 91精品蜜臀在线一区尤物| 欧美一区二区三区啪啪| 欧美精品一区二区三区很污很色的| 日韩视频一区在线观看| 26uuu欧美日本| 国产欧美精品区一区二区三区 | 欧美性色aⅴ视频一区日韩精品| 色综合天天综合网天天狠天天| 色综合久久精品| 欧美老女人在线| 精品久久久久久综合日本欧美| 久久久国产精华| 亚洲狠狠丁香婷婷综合久久久| 亚洲成av人片一区二区| 久久国产尿小便嘘嘘| 粉嫩av一区二区三区在线播放| 色婷婷av久久久久久久| 日韩一区二区三区视频在线| 久久精品这里都是精品| 亚洲一区在线看| 激情综合网天天干| 91国内精品野花午夜精品 | 中文字幕欧美区| 亚洲品质自拍视频| 久久99精品视频| 不卡的av在线播放| 91精品婷婷国产综合久久性色| 久久色在线视频| 亚洲午夜一区二区| 高清久久久久久| 日韩欧美你懂的| 亚洲精品va在线观看| 国产一区二区导航在线播放| 日本丶国产丶欧美色综合| 久久精子c满五个校花| 亚洲成人福利片| 92国产精品观看| 国产日产欧美一区| 日本成人在线电影网|