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

📄 main.c

📁 可以兼容MS-DOS的文件系统和指令的S3C2410平台的DOS部分源代码,加以修改可以使用在S3C2440 S3C44B0等ARM7、ARM9上
💻 C
字号:
/*************************************Seekfor Embedded DOS v1.0***************************************************
 ******                   ***          *****                                    ******     ****     ****** v1.0
**   **                    **         **  **                                     **  **   **  **   **   ** 
**   **                    **         **                                         **   ** **    **  **   ** 
**                         **         **                                         **   ** **    **  **      
 **       *****    *****   ** ****  *******   *****  ********            *****   **   ** **    **   **     
  ***    **   **  **   **  ** **      **     **   **   *** **           **   **  **   ** **    **    ***   
    **   *******  *******  ****       **     **   **   **               *******  **   ** **    **      **  
     **  **       **       *****      **     **   **   **               **       **   ** **    **       ** 
**   **  **       **       ** **      **     **   **   **               **       **   ** **    **  **   ** 
**   **  **   **  **   **  **  **     **     **   **   **               **   **  **  **   **  **   **   ** 
******    *****    *****  ********  ******    *****  ******              *****  ******     ****    ******  
<1)基本描述
	Seekfor Embedded DOS v1.0是嵌入式的一个类DOS操作系统,支持FAT16/FAT32.
<2)文件描述
	文件名:main.c
	功能:DOS初始化定义
<3>如需更新版本软件,请联系:
	QQ:82054357
	Mail:Seek_for@163.com
	MSN:sfrad32@hotmail.com
**************************************************************************************************************/
#include "dos.h"


extern unsigned int ram_start_addr;
extern unsigned int malloc_size;
extern unsigned int max_params;
extern unsigned int console;
extern unsigned int realloc;
extern unsigned int keep_top;
extern EXE_CALLBACK lpfnExecuteCallback;
extern CONNECT_WRITE lpfnConnectWrite;
extern GETDATE lpfnGetDate;
extern SETDATE lpfnSetDate;
extern GETTIME lpfnGetTime;
extern SETTIME lpfnSetTime;
extern GETVECT lpfnGetVect;
extern SETVECT lpfnSetVect;
extern ENABLE  lpfnEnable;
extern DISABLE lpfnDisable;


#if(SUPPORT_RAM==1)
BYTE FAT_MAP[RAM_BYTES_PER_SECTOR*RAM_SECOTR_TOTAL];
static BOOL RAM_read(DWORD dwSector,BYTE*buff,DWORD dwBytesPerSector,void*user_data)
{
	BYTE*ptr=FAT_MAP+dwSector*dwBytesPerSector;
	while(dwBytesPerSector--) *buff++=*ptr++;
	return 1;
}

static BOOL RAM_write(DWORD dwSector,BYTE*buff,DWORD dwBytesPerSector,void*user_data)
{
	BYTE*ptr=FAT_MAP+dwSector*dwBytesPerSector;
	while(dwBytesPerSector--) *ptr++=*buff++;
	return 1;
}

static void RAM_init()
{
	FORMAT_PARAMS ram_fmt=RAM_PARAMS;
	FAT_format((DRIVER_INFO*)0,&ram_fmt);
	FAT_install(ram_fmt.dwStart,ram_fmt.lpfnErase,ram_fmt.lpfnRead,ram_fmt.lpfnWrite,ram_fmt.user_data);
}
#endif

static void SYSPARAMS_init()
{
#ifdef RAM_START_ADDR
	ram_start_addr=RAM_START_ADDR;
#endif
#ifdef CONSOLE_USING
	console=CONSOLE_USING;
#endif
#ifdef MAX_PARAMS
	max_params=MAX_PARAMS<256?MAX_PARAMS:256;
#endif
#ifdef REALLOCATABLE
	realloc=REALLOCATABLE;
#endif
#ifdef MALLOC_SIZE
	malloc_size=MALLOC_SIZE;
#else
	malloc_size=1024*64;
#endif		
	MEM_init((char*)ram_start_addr+1024*1024*2,malloc_size,32);
/*计算keep_top*/
	keep_top=ram_start_addr+1024*1024*2+malloc_size;
	if(keep_top&0x03) keep_top+=4-keep_top&0x03;
/*函数指针初始化*/
#ifdef EXECUTE_CALLBACK
	lpfnExecuteCallback=(EXE_CALLBACK)EXECUTE_CALLBACK;
#endif
#ifdef CONNECT_fwrite
	lpfnConnectWrite=(CONNECT_WRITE)CONNECT_fwrite;
#endif
#ifdef getdate
	lpfnGetDate=(GETDATE)getdate;
#endif
#ifdef setdate
	lpfnSetDate=(SETDATE)setdate;
#endif
#ifdef gettime
	lpfnGetTime=(GETTIME)gettime;
#endif
#ifdef settime
	lpfnSetTime=(SETTIME)settime;
#endif

#ifdef enable
	lpfnEnable=(ENABLE)enable;
#endif
#ifdef disable
	lpfnDisable=(DISABLE)disable;
#endif

}

static void STDIO_init()
{
	extern FILE*stdout,*stdin,*stderr;
	stdout=(FILE*)fopen(STDOUT_USING,"w");
	stdin=(FILE*)fopen(STDIN_USING,"r");
	stderr=(FILE*)fopen(STDERR_USING,"w");
}

/**int main()**********************
功能:
	DOS初始化主函数
入口:
出口:
	总是返回0
调用者:
	shell()
备注:
*****************************************/
int main()
{
/*必须先设置好系统参数*/
	SYSPARAMS_init();
/*在这里调用和CPU相关的硬件初始化等*/
#ifdef CHIPS_init
	CHIPS_init();
#endif	
/*如果用户希望支持RAM磁盘,则初始化一个RAM盘到系统中*/
#if(SUPPORT_RAM==1)
	RAM_init();
#endif
/*如果用户系统包含LCD等点阵显示类驱动器,则挂接一个LCD:设备到系统中(在CHIPS_init()中必须先初始化)*/
#if(SUPPORT_GRAPHICS==1)
	Device_install("LCD:",WRITEABLE,(DEVICE_OPEN)Device_CommonOpen,(DEVICE_CLOSE)Device_CommonClose,(DEVICE_READ)0,(DEVICE_WRITE)LCD_Write,(DEVICE_ESCAPE)LCD_Escape);	
#endif
/*自定义STDIO使用的设备*/
	STDIO_init();
#if(SUPPORT_SHELL==1)
	shell();
#else
	printf("Warnning:no SHELL!Please adds your code here!\r\nSystem Halted!\r\n");
	while(1);
#endif	
	return 0;
}




⌨️ 快捷键说明

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