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

Antz系统更新地址

Linux内核源码分析地址

Github项目地址

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

真机运行情况 :

这个系统在我最初的目的中就是实现一个半图形半终端的轻巧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都可以帮助你更加的深入了解计算机操作系统底层的实现。

自制操作系统Antz(12)——承上启下的更多相关文章

  1. 自制操作系统Antz -- 系列文章

    自制操作系统Antz day10——实现shell(上) AntzUhl 2018-10-10 16:25 阅读:192 评论:0   Linux内核源码分析 day01——内存寻址 AntzUhl ...

  2. 自制操作系统Antz(13) 显示图片

    显示图片只是在多媒体课上看着bmp格式图片的突发奇想,然后就实现在了我自己的操作系统 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 效果图: 显示图片的原理 在之前显卡操作时 ...

  3. 自制操作系统Antz(5)——深入理解保护模式与进入方法

    Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...

  4. 自制操作系统Antz(1)——Boot Sector

    0.引子 最近在看操作系统底层方面的东西,最开始的为什么是07c00h这个问题就让我对操作系统有了很大的兴趣.所以准备在看书之余顺便写一个操作系统(Anz).至于为什么这个系统会被叫做Antz,可以参 ...

  5. 自制操作系统Antz(11)——实现shell(下)命令响应

    我已经规范了系统代码风格,类似于按照linux分包,把各部分功能区分开了 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 在之前的任务中,我们已经通过直接操作显卡驱动完成了简单 ...

  6. 自制操作系统Antz(3)——进入保护模式 (中) 直接操作显存

    Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...

  7. 自制操作系统Antz(6)——内核初步,引入c语言

    Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...

  8. 自制操作系统Antz(2)——进入保护模式 (上) jmp到保护模式

    Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.htm Linux内核源码分析地址:https://www.cnblogs.c ...

  9. 自制操作系统Antz(10)——实现shell(上)

    我已经规范了系统代码风格,类似于按照linux分包,把各部分功能区分开了 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 在之前的任务中,我们已经通过直接操作显卡驱动完成了简单 ...

随机推荐

  1. Docker 试用

    Docker还是从.net core 了解的 百度百科 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可 ...

  2. 实现promise

    // 判断变量否为function  const isFunction = variable => typeof variable === 'function'  // 定义Promise的三种 ...

  3. 是否能设计一种DNN的特定网络结构来改善DNN,使得其学习起来更加高效

    小结: 1. 是否能设计一种DNN的特定网络结构来改善DNN,使得其学习起来更加高效 https://mp.weixin.qq.com/s/lF_WLAn6JyQqf10076hsjA Deep &a ...

  4. 在Fastreport里使用的CRC函数

    如标题, 是在Fastreport的脚本里运行的CRC计算函数, 包括CRC-16/CRC-32 基本是从网上找的代码, 然后改出来的 至于为什么要在FR的脚本里运行....呵呵 不要在意这些细节(找 ...

  5. 安装Nginx到linux服务器(Ubuntu)详解

    先去下载一个nginx放到服务器. 然后解压(可参考前面安装tomcat)编译(./configure --prefix=/usr/local/nginx/server/ && mak ...

  6. Django中的form组件

    Django中的form组件有两大作用 1.验证获取正确的结果或者错误信息 2.生成html代码 一.为什么需要form组件呢? 在写form表单,提交数据时,自己写验证的代码是一件非常困难的事情. ...

  7. zabbix基础服务搭建

    监控系统的介绍 性能优化和监控点 1.cpu           调度器          有效的分配cpu的时间片           上下文切换           运行队列            ...

  8. NABCD分析---校园服务

    N(需求): 大学生活中,很多琐碎的小事浪费同学时间精力.我们的APP本着为同学服务的宗旨,解决生活中各方面的问题,同学们可以在APP上发布各种信息,例如兼职,二手买卖等等. A(做法): 用户打开A ...

  9. Cocos Creator 动态改变sprite图片

    首先将存放图片最外层文件夹命名为resources changeBj: function(){ var url = 'globalUI/video/gVideoPlayClick'; var _thi ...

  10. Hadoop集群故障诊断

    集群故障诊断通行方法:1.cloudera manager 监控和管理软件本身出问题了(没有任何数据),集群还是好的,业务还在正常跑:2.监控软件是好的,从监控里发现了很多问题,如CPU飙高.内存飙高 ...