📄 main.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 + -