我已经规范了系统代码风格,类似于按照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. ST表 || RMQ问题 || BZOJ 1699: [Usaco2007 Jan]Balanced Lineup排队 || Luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup

    题面:P2880 [USACO07JAN]平衡的阵容Balanced Lineup 题解: ST表板子 代码: #include<cstdio> #include<cstring&g ...

  2. css学习_css3伸缩布局 flex布局

    1.flex布局 案例一: 案例二:   保证不至于缩放得太小或太大 案例三:flex的值不一定要写成几份,可以写成固定值 案例四: 竖着3等分(父容器按照高度3等分) !!案例  -----用fle ...

  3. vins-mono:雅可比矩阵的推导

    imu残差公式 我们计算雅可比采用加扰动形式 以下是位置增量偏差对旋转qbk的雅可比推导 对应的雅可比矩阵的代码 jacobian_pose_i.block<, >(O_P, O_R) = ...

  4. django上传excel文件

    def uploadGrade(request): ''' 班级信息导入 :param request: :return: ''' if request.method == 'POST': f = r ...

  5. mysql 编码问题

    有时候insert数据的时候,会报以下异常: ERROR 1366 (HY000): Incorrect string value: '\xE6\x9D\x83\xE9\x99\x90...' for ...

  6. Jmeter跨线程组传递参数

    Jmeter的线程组之间是相互独立的,各个线程组互不影响,所以线程组A中输出的参数,是无法直接在线程组B中被调用的. 但有时候为了方便,可以把不同模块接口放在不同线程组,就涉及不同线程组传参问题,比如 ...

  7. Ext选项卡tabpanel切换动态加载数据

    鸣人不说暗话,来张图: 代码开始:(使用Ext,ajax加载数据,如果你们有好的方法也可以多多交流)var tabxsk = new Object(); //初始化 tabxsk.init = fun ...

  8. 添加新网络模型后运行报错:未定义的参数:ps_roipooling param

    现象描述:在新增了具有自定义的data层或者loss层的网路之后,工程运行会报错: 疑惑:并没有这样的参数新增,并且前向的deploy文件已经将自定义的loss以及data等都去掉了: 可能的原因:虽 ...

  9. XLSReadWriteII5使用参考

    varxls: TXLSReadWriteII5 xls.Filename 文件名xls.Read 开始读取xls.Count sheet总数xls.Sheets[i].Name sheet名xls. ...

  10. Git使用之pull request

    一直对git的使用都不熟,由于工作需要经常需要在github上pull request,第一次还是有些麻烦的,写个笔记记录下 1. fork源项目到自己的github仓库中 fork之后自己也会多出一 ...