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

📄 partion.c

📁 基于dsp的软驱控制源程序
💻 C
字号:
#include "gm82c765b.h"
#include "partion.h"
#include "global.h"
/************************************************************/
int ReadFileFromFloppy(int number_of_file)
{
	int filecounts;
	int startcluster;
	int i,temp,logAddr;
	long filesize;
	CHS  chsaddr;
	char cluster[6];
	ReadDataFromFlash(0,0,&filecounts,1);
	if(number_of_file>filecounts)
		return -1;
	ReadDataFromFlash(0,1+(number_of_file-1)*16,databuffer,16);
	startcluster=(databuffer[13]<<8)+(databuffer[13]>>8);
	temp=(databuffer[15]<<8)+(databuffer[15]>>8);
	filesize=temp<<16;
	temp=((databuffer[14]<<8)+(databuffer[14]>>8));
	filesize+=temp;
	while(filesize>512)
	{	
	    temp=GetClusterChainOfFile(startcluster,cluster);
	    if(temp>=0)
	    {
	    	for(i=0;i<temp&&filesize>512;++i)
	    	{
	    		logAddr=(startcluster-2)+GetDataLogicBlockAddr();
				if(!ReadDataFromFloppy(logAddr,databuffer,512))
				{
					++filecounts;
				}
				else
				{
					return -1;
				}
	    		filesize-=512;
	    	    startcluster=cluster[i];
	    	}	    	
	    }
	    else
	    {
	    	return temp;
	    }
	}
	logAddr=(startcluster-2)+GetDataLogicBlockAddr();
	if(!ReadDataFromFloppy(logAddr,databuffer,(int)filesize))
	{
		++filecounts;
	}
	else
	{
		return -1;
	}	
	return 0;	
}
/************************************************************/
int GetClusterChainOfFile(int startcluster,char *cluster)
{
    int clustercount=0;
    int maxcluster=0;
    int logAddr=0;
    CHS chsaddr;
    logAddr=GetFat1LogicBlockAddr();		
    while(1)
    {
    	maxcluster+=512;
       	if((clustercount?cluster[clustercount-1]:startcluster)>maxcluster)
       	{
       		logAddr+=3;       		    		
       	}
       	else
    	{       		
        	if(!ReadDataFromFloppy(logAddr,databuffer,1536))
        	{           	
           	 	while(1)
            	{	
            		cluster[clustercount]=GetNextCluster(clustercount?cluster[clustercount-1]:startcluster,databuffer);         
            		if(cluster[clustercount]==0x0fff)
            		{  
            			++clustercount;
            			return clustercount; 
            		}
            		if(cluster[clustercount]>maxcluster)
       				{
       					++clustercount;
       					logAddr+=3;
       					break;
       				}
       				if(cluster[clustercount]==0)
       				{
       					return -2;
       				}
            		++clustercount;
            		if(clustercount==6)
            		{
            			return clustercount;
            		}	
            	}
   		 	}
   		 	 else
        	{
        		return -1;
        	}
   		}
    }
}
/************************************************************/ 
int GetNextCluster(int currentcluster,char *data,int logicAddr)
{
    int offset=currentcluster%512;
    int nextcluster=0;
    switch(offset%4)
    {
    	case 0:
    		nextcluster=((data[offset*3/4]&0xff00)>>8)+((data[offset*3/4]&0x000f)<<12);
    	    break;
    	case 1:
    		nextcluster=((data[offset*3/4]&0x00f0)>>4)+((data[offset*3/4+1]&0xff00)>>4);
    		break;
    	case 2:
    		nextcluster=(data[offset*3/4]&0x00ff)+(data[offset*3/4+1]&0x0f00);
    		break;
    	case 3:
    		nextcluster=((data[offset*3/4]&0xf000)>>12)+((data[offset*3/4]&0x00ff)<<4);
    		break;
    }
    return nextcluster;
    
}
/************************************************************/
int ListFileInRootDir()
{
	int i,j,fileCounts;
	CHS chsaddr;
	fileCounts=0;
	for(i=GetRootDirLogicBlockAddr();i<GetDataLogicBlockAddr()-4;i+=4)
    {	
    	if(!ReadDataFromFloppy(i,databuffer,2048))
    	{
           	for(j=0;j<64;++j)
           	{           		
           		if(((databuffer[j*16]&0xff00)!=0xe500)&&(databuffer[j*16+13]!=0))
           		{           			
           		    WriteDataInFlash(0,1+fileCounts*16,(databuffer+j*16),16);
           		    ++fileCounts;
           		}	
           	}
    		
        }
        else
        {
         	return -1;
        }
        
    }
    WriteDataInFlash(0,0,&fileCounts,1); 
    return fileCounts;    
} 

⌨️ 快捷键说明

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