📄 main.c
字号:
#include "print.h"/*包含print函数申明*/
#include "file.h"/*文件操作头文件*/
#include "mem.h"/*内存操作头文件*/
int LoadKernel(int FileHandle);/*读入内核并移动到内存1M处*/
/*到自己搬到0x90200处执行,并设置好内核参数,转入内核执行,该模块的代码在loader.asm*/
void MoveSelfToKernel(int DevNum);
int main(void){
char ImageName[20],RootStr[10];
int i=0,RootDeviceNum=0;
int FileHandle=OpenFile("loader.ini",0);
if(!FileHandle){
print("Open loader.ini fail!\n");
return 1;
}
ReadFile(FileHandle,&ImageName[i],1);
while((ImageName[i]!=0x0d)&&(ImageName[i]!='#')){/*没有换行符或结束标志*/
i++;
ReadFile(FileHandle,&ImageName[i],1);
}
if((ImageName[i]==0x0d)||(ImageName[i]=='#'))
ImageName[i]=0;
RootStr[0]=ImageName[i];
while((RootStr[0]!='x')&&(RootStr[0]!='X'))
ReadFile(FileHandle,RootStr,1);/*读取0x标志*/
i=0;
ReadFile(FileHandle,&RootStr[i],1);
while((RootStr[i]!=0x0d)&&(RootStr[i]!='#')){
i++;
ReadFile(FileHandle,&RootStr[i],1);
}
RootStr[i]=0;
print("the root Device num is 0x");
print(RootStr);
i=0;
while(RootStr[i]!=0){/*把字符串转换为数字*/
if(RootStr[i]>='0'&&RootStr[i]<='9')
RootDeviceNum=RootDeviceNum*16+RootStr[i]-'0';
if(RootStr[i]>='a'&&RootStr[i]<='f')
RootDeviceNum=RootDeviceNum*16+RootStr[i]-'a'+10;
if(RootStr[i]>='A'&&RootStr[i]<='F')
RootDeviceNum=RootDeviceNum*16+RootStr[i]-'A'+10;
i++;
}
CloseFile(FileHandle);
FileHandle=OpenFile(ImageName,0);
if(!FileHandle){
print("Open Kernel Image Fail!\n");
return 1;
}
if(!LoadKernel(FileHandle)){/*装载内核到内存*/
print("Load Kernel Fail\n");
return 1;
}
CloseFile(FileHandle);
print("\nLoad Kernel finished");
MoveSelfToKernel(RootDeviceNum);
return 0;
}
int LoadKernel(int FileHandle){
long unreadsize=0;
unsigned long FreeBase=0x100000;/*内存1M处*/
char buf[512];
FileSize(FileHandle,&unreadsize);
FileSeek(FileHandle,0,0);
while(unreadsize){
if(unreadsize>sizeof(buf)){/*如果剩下的字节数大一缓冲大小*/
if(!ReadFile(FileHandle,buf,sizeof(buf)))/*则读取缓冲大小的的数据*/
return 0;
unreadsize-=sizeof(buf);
MoveToExtendMem(buf,FreeBase,sizeof(buf)/2);
FreeBase+=sizeof(buf);
}else{/*剩下的字节数小于缓冲区大小*/
if(!ReadFile(FileHandle,buf,unreadsize))
return 0;
MoveToExtendMem(buf,FreeBase,unreadsize/2);
unreadsize=0;
}
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -