🌏 Develop an intelligent AI half terminal half graphical operating system Antz. 一个集成化智能化AI的半终端半图形化的操作系统Antz。
Switch branches/tags
Nothing to show
Clone or download
Latest commit 4b58033 Oct 21, 2018
Permalink
Failed to load latest commit information.
asmfunc nas funcation Oct 12, 2018
assic english assic build Oct 10, 2018
boot not change Oct 17, 2018
include change h Oct 20, 2018
interrupt int Oct 19, 2018
io delete todo.h Oct 18, 2018
lgdt Merge branch 'master' of https://github.com/CasterWx/AntzOS Oct 19, 2018
log delete build Oct 21, 2018
main add vim save Oct 21, 2018
thun change game Oct 21, 2018
windows mouse Oct 21, 2018
Makefile add makefile build Oct 18, 2018
README.md readme Oct 19, 2018
antz.img img Oct 20, 2018
log.md cheage Oct 19, 2018

README.md

自制操作系统Antz

我已经规范了系统代码风格,类似于按照linux分包,把各部分功能区分开了

Antz系统更新地址

Linux内核源码分析地址

Github项目地址

在之前的工作中,AntzOS已经从单调的界面,变得逐渐拥有自己的功能了。

真机运行情况 :

os1

os2

os3

这个系统在我最初的目的中就是实现一个半图形半终端的轻巧OS。

完成了当前的工作后,Antz接下来需要实现的则是关于任务调度相关的。

目前实现的是在Terminal中对命令的响应,还有一个简易的vim,可以用于右边界面的文本编辑。

对于按键中断,对全键盘的响应改良之后不会出现之前说的bug,但是在shift按下时的按键模式却是有很大问题,虽然我已经想到了解决方案,不外乎给shift的按下一个flag,弹起一个flag,但这部分感觉现在实现与否都是不怎么重要,所以就先忽略这里了。

最近同时也在读Linux内核源码。发现其中的注释也是很有意思,甚至Linus自己写的,他也不知道这部分为什么这样写,不断尝试之后发现可以实现,他就这样用了。

仔细看看关于按键响应命令的实现,现在只能说很懵,又臭又长,估计随便改改我就会不知道怎么继续下一步了。(不过好在我每添加一个功能都会把整个项目备份一份)

void key(Binfo binfo,char s[40]){
	if((strcmp(s,"1C")==0)){  // enter
			if(x_move!=0){
				// 右边
				write_x = 58 ;
				write_y += 19 ;
			}else {
				// 左边
				action_command(binfo);
				write_x = 58 ;
				write_y += 19 ;
				if (x_move==0)
					printasc(binfo->vram, binfo->scrnx, 4, write_y, COL8_FFFFFF, "AntzOS>");
			}
	}else if((strcmp(s,"0F")==0)){
		// 关于tab 0F 8F
		printasc(binfo->vram, binfo->scrnx, x_move+write_x, write_y, COL8_FFFFFF, " ");
		write_x += 8 ;
		border(binfo);
		printasc(binfo->vram, binfo->scrnx, x_move+write_x, write_y, COL8_FFFFFF, " ");
		write_x += 8 ;
		border(binfo);
		printasc(binfo->vram, binfo->scrnx, x_move+write_x, write_y, COL8_FFFFFF, " ");
		write_x += 8 ;
		border(binfo);
	}else if((strcmp(s,"3B")==0)){  //关于F1的响应中断
			sprintf(command,"%s","");
			// flag = 0	
			x_move = 0 ;
			new_pe(binfo);
			printasc(binfo->vram, binfo->scrnx, 4, write_y, COL8_FFFFFF, "AntzOS>");
	}else if(strcmp(s,"0E")==0){
			// 回退
			int len = strlen(command);
			command[len - 1] = '\0';
			write_x -= 8 ;
			flash(binfo->vram, binfo->scrnx , COL8_000000,  x_move + write_x,     write_y,     x_move+write_x+19, write_y+19);
			if(x_move!=0){
   				// 正在右边界
					if(write_x<=60) {
						write_x = 202 ;
						write_y -= 19 ;
					}
			}else if(x_move==0){
					// 正在左边界
					if(write_x<=4) {
						write_x = 146 ;
						write_y -= 19 ;
					}
			}

	}else {
			char *in = replace_char(s) ;
			if(strcmp(in,"")==0){

			}else {
				printasc(binfo->vram, binfo->scrnx,  x_move + write_x,  write_y, COL8_FFFFFF, in);
				add_command(in);
				write_x += 8 ;
			}
			// 添加响应区
			//清除
			//打印字符 Only use debug
	}
	border(binfo);
}
// 边界处理
void border(struct BOOTINFO *binfo){
	if (x_move==0){
		// 左边
		if(write_x>148){
			write_x = 4 ;
			write_y += 19 ;
		}
		if(write_y>180){
	 		new_pe(binfo);
			printasc(binfo->vram, binfo->scrnx, 4, write_y, COL8_FFFFFF, "AntzOS>");
		}
	}else if(x_move!=0){
		// vim模式
		if(write_x>310-x_move){
			write_x = 58 ;
			write_y += 19 ;
		}
		if(write_y>180){
			write_y = 15 ;
			write_x = 58 ;
			flash(binfo->vram,binfo->scrnx,COL8_000000, 160,0,320-3,260-3);
			printasc(binfo->vram,binfo->scrnx,162,2,COL8_00FF00,"Vim :");
		}
	}
}

目前的项目目录,请忽略掉md文件,这个镜像文件可以直接使用工具写入u盘启动,或者在虚拟机打开。thun.c是今天(2018年10月18日)新增的,目的是为了抽离其他c文件中的工具化函数,不然以后只是一个源码文件都会让人头疼。

▒▒  antz.img
▒▒  Makefile
▒▒  README.md
▒▒
▒▒▒▒asmfunc
▒▒      naskfunc.nas
▒▒
▒▒▒▒assic
▒▒      char.set
▒▒
▒▒▒▒boot
▒▒      asmhead.asm
▒▒      mbr.asm
▒▒
▒▒▒▒include
▒▒      errno.h
▒▒      float.h
▒▒      limits.h
▒▒      math.h
▒▒      stdio.h
▒▒      string.h
▒▒      todo.h
▒▒
▒▒▒▒interrupt
▒▒      int.c
▒▒
▒▒▒▒io
▒▒      fifo.c
▒▒
▒▒▒▒lgdt
▒▒      set_lgdt.c
▒▒
▒▒▒▒log
▒▒      build.log
▒▒      delete.log
▒▒
▒▒▒▒main
▒▒      bootpack.c
▒▒      README..md
▒▒      shell_1.md
▒▒      shell_2.md
▒▒
▒▒▒▒thun
▒▒      thun.c
▒▒
▒▒▒▒windows
        graphic.c

Makefile非常关键,如果没有这个,怕是我只是编译链接就得花费很长时间,而且中间估计会错误频出。

Antz_kernel = main/bootpack.obj asmfunc/naskfunc.obj assic/char.set windows/graphic.obj lgdt/set_lgdt.obj interrupt/int.obj io/fifo.obj thun/thun.obj

之后的添加c文件,只需要在这里预先确定路径,然后将需要实现的函数声明在include/todo.h中即可。显卡虽然实现了函数可以直接操作,但是分辨率太低,导致界面极不美观,网卡驱动暂时没有想过要写,如果要实现,恐怕得整个antz都可以让用户使用的情况下才具备条件。

AntzOs需要更多优秀的开发者来实现,无论你是正在学习操作系统课程还是其他方面,我相信AntzOs都可以帮助你更加的深入了解计算机操作系统底层的实现。