30天自制操作系统期末实验报告.docx
《30天自制操作系统期末实验报告.docx》由会员分享,可在线阅读,更多相关《30天自制操作系统期末实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
30天自制操作系统期末实验报告
(此文档为word格式,下载后您可任意编辑修改!
)
浙江工业大学计算机学院
计算机实验班1101章鹏
实验报告名称:
创新实践(30天自制操作系统)
实验目标:
根据教材从零开始使用C与汇编语言编写一个简单的操作系统,实现操作系统的基本功能。
实验背景:
为了让学生对操作系统的底层有更清晰的了解,选取了一本名为《30天自制操作系统》的书作为两学期创新实践课程的教材,并根据该教材一步步从零开始完成每个人自己特色的简易版操作系统,锻炼学生动手能力,提高学生对操作系统的知识理解。
实验进度:
第28天
成果界面截图:
截图1:
操作系统初始化界面
截图2:
运行命令获取操作系统基本信息
截图2.1Mem:
读取系统内存与存储空间
截图2.2Dir:
读取当前系统允许使用的应用程序
截图2.3Exit:
关闭当前console命令窗
截图2.4应用程序名:
在当前窗口下运行应用程序
截图2.5Start+应用程序名:
新建一个console命令窗并运行程序
截图2.6Ncst(noconsolestart):
无新建窗口运行程序
截图2.7Shift+f2:
新建一个空的console窗口
截图2.8F11:
将下一层的console窗口切至最顶层
截图2.9Tab:
将当前工作区间(键盘)在窗口间循环
截图3应用程序截图:
截图3.1a(显示字符A):
截图3.2Winhelowinhelo2winhelo3:
截图3.3Color:
截图3.4Color2:
截图3.5Hello3:
截图3.6Hello4与hello5:
截图3.7Lines:
画线程序
截图3.8Noddle:
计时程序(三分钟)
截图3.9Sosu:
显示1-1000内的素数
截图3.10Sosu3:
显示内的素数
截图3.11Star1:
显示一个点
截图3.12Stars:
显示多个点
截图3.13Walk:
使用方向键控制点的移动
源代码截取:
操作系统代码:
;
}
voidset_palette(intstart,intend,unsignedchar*rgb)
{
inti,eflags;
eflags=io_load_eflags();
io_cli();
io_out8(0x03c8,start);
for(i=start;i<=end;i++){
io_out8(0x03c9,rgb[0]4);
io_out8(0x03c9,rgb[1]4);
io_out8(0x03c9,rgb[2]4);
rgb+=3;
}
io_store_eflags(eflags);
return;
}
voidboxfill8(unsignedchar*vram,intxsize,unsignedcharc,intx0,inty0,intx1,inty1)
{
intx,y;
for(y=y0;y<=y1;y++){
for(x=x0;x<=x1;x++)
vram[y*xsize+x]=c;
}
return;
}
voidinit_screen8(char*vram,intx,inty)
{
boxfill8(vram,x,COL8_0,0,x-1,y-29);
boxfill8(vram,x,COL8_C6C6C6,0,y-28,x-1,y-28);
boxfill8(vram,x,COL8_FFFFFF,0,y-27,x-1,y-27);
boxfill8(vram,x,COL8_C6C6C6,0,y-26,x-1,y-1);
boxfill8(vram,x,COL8_FFFFFF,3,y-24,59,y-24);
boxfill8(vram,x,COL8_FFFFFF,2,y-24,2,y-4);
boxfill8(vram,x,COL8_3,y-4,59,y-4);
boxfill8(vram,x,COL8_59,y-23,59,y-5);
boxfill8(vram,x,COL8_2,y-3,59,y-3);
boxfill8(vram,x,COL8_60,y-24,60,y-3);
boxfill8(vram,x,COL8_x-47,y-24,x-4,y-24);
boxfill8(vram,x,COL8_x-47,y-23,x-47,y-4);
boxfill8(vram,x,COL8_FFFFFF,x-47,y-3,x-4,y-3);
boxfill8(vram,x,COL8_FFFFFF,x-3,y-24,x-3,y-3);
return;
}
voidputfont8(char*vram,intxsize,intx,inty,charc,char*font)
{
inti;
char*p,d*data*;
for(i=0;i<16;i++){
p=vram+(y+i)*xsize+x;
d=font[i];
if((d&0x80)!
=0){p[0]=c;}
if((d&0x40)!
=0){p[1]=c;}
if((d&0x20)!
=0){p[2]=c;}
if((d&0x10)!
=0){p[3]=c;}
if((d&0x08)!
=0){p[4]=c;}
if((d&0x04)!
=0){p[5]=c;}
if((d&0x02)!
=0){p[6]=c;}
if((d&0x01)!
=0){p[7]=c;}
}
return;
}
voidputfonts8_asc(char*vram,intxsize,intx,inty,charc,unsignedchar*s)
{
externchar;
}
voidinit_mouse_cursor8(char*mouse,charbc)
{
intx,y;
for(y=0;y<16;y++){
for(x=0;x<16;x++){
if(cursor[y][x]=='*'){
mouse[y*16+x]=COL8_000000;
}
if(cursor[y][x]=='0'){
mouse[y*16+x]=COL8_FFFFFF;
}
if(cursor[y][x]=='.'){
mouse[y*16+x]=bc;
}
}
}
return;
}
voidputblock8_8(char*vram,intvxsize,intpxsize,
intpysize,intpx0,intpy0,char*buf,intbxsize)
{
intx,y;
for(y=0;yfor(x=0;xvram[(py0+y)*vxsize+(px0+x)]=buf[y*bxsize+x];
}
}
return;
}
操作系统api(以api002’输出单个字符’为例):
api002.nas
[FORMAT"WCOFF"]
[INSTRSET"i486p"]
[BITS32]
[FILE"api002.nas"]
GLOBAL_api_putstr0
[SECTION.text]
_api_putstr0:
;voidapi_putstr0(char*s);
PUSHEBX
MOVEDX,2
MOVEBX,[ESP+8];s
INT0x40
POPEBX
RET
应用程序(以stars为例):
stars.c
#include"apilib.(void)
{
char*buf;
intwin,i,x,y;
api_initmalloc();
buf=api_malloc(150*100);
win=api_openwin(buf"stars");
api_boxfilwin(win,0);
for(i=0;i<50;i++){
x=(rand()%137)+6;
y=(rand()%67)+26;
api_point(win,x,y,3);
}
for(;;){
if(api_getkey
(1)==0x0a){
break;
}
}
api_end();
}
操作系统Makefile文件:
TOOLPATH=..z_tools
INCPATH=..z_toolsbeepdown.:
..z_toolsfdimg0at.tek\
wbinimgsrc:
len:
512from:
0to:
0\
copyfrom:
beepdown.:
$(MAKE)
$(MAKE)-C..z_toolsqemu
install:
$(MAKE)
$(MAKE)-Ccolor
$(MAKE)-Ccolor2
$(MAKE)_full:
$(MAKE)full
$(COPY)
$(MAKE)-C..z_toolsqemu
install_full:
$(MAKE)full
$(IMGTOL)wa:
_os:
$(MAKE)-C
clean:
src_only:
$(MAKE)clean
-$(DEL)_full:
$(MAKE)-C
$(MAKE)-Capilibclean
$(MAKE)-Caclean
$(MAKE)-C
$(MAKE)-C
$(MAKE)-C
$(MAKE)-Cwinheloclean
$(MAKE)-Cwinhelo2clean
$(MAKE)-Cwinhelo3clean
$(MAKE)-Cstar1clean
$(MAKE)-Cstarsclean
$(MAKE)-Cstars2clean
$(MAKE)-Clinesclean
$(MAKE)-Cwalkclean
$(MAKE)-Cnoodleclean
$(MAKE)-Cbeepdownclean
$(MAKE)-Ccolorclean
$(MAKE)-Ccolor2clean
src_only_full:
$(MAKE)-Csrc_only
$(MAKE)-Ccolorsrc_only
$(MAKE)-Ccolor2src_only
-$(DEL)_full
-$(DEL)haribote.img