自制操作系统Antz(12)——承上启下
我已经规范了系统代码风格,类似于按照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)——承上启下的更多相关文章
- 自制操作系统Antz -- 系列文章
自制操作系统Antz day10——实现shell(上) AntzUhl 2018-10-10 16:25 阅读:192 评论:0 Linux内核源码分析 day01——内存寻址 AntzUhl ...
- 自制操作系统Antz(13) 显示图片
显示图片只是在多媒体课上看着bmp格式图片的突发奇想,然后就实现在了我自己的操作系统 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 效果图: 显示图片的原理 在之前显卡操作时 ...
- 自制操作系统Antz(5)——深入理解保护模式与进入方法
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...
- 自制操作系统Antz(1)——Boot Sector
0.引子 最近在看操作系统底层方面的东西,最开始的为什么是07c00h这个问题就让我对操作系统有了很大的兴趣.所以准备在看书之余顺便写一个操作系统(Anz).至于为什么这个系统会被叫做Antz,可以参 ...
- 自制操作系统Antz(11)——实现shell(下)命令响应
我已经规范了系统代码风格,类似于按照linux分包,把各部分功能区分开了 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 在之前的任务中,我们已经通过直接操作显卡驱动完成了简单 ...
- 自制操作系统Antz(3)——进入保护模式 (中) 直接操作显存
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...
- 自制操作系统Antz(6)——内核初步,引入c语言
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...
- 自制操作系统Antz(2)——进入保护模式 (上) jmp到保护模式
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.htm Linux内核源码分析地址:https://www.cnblogs.c ...
- 自制操作系统Antz(10)——实现shell(上)
我已经规范了系统代码风格,类似于按照linux分包,把各部分功能区分开了 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 在之前的任务中,我们已经通过直接操作显卡驱动完成了简单 ...
随机推荐
- 手写AVL 树(下)
上一篇 手写AVL树上实现了AVL树的插入和查询 上代码: 头文件:AVL.h #include <iostream> template<typename T1,typename T ...
- Codeforces 785 - A/B/C/D/E - (Undone)
链接:https://codeforces.com/contest/785 A - Anton and Polyhedrons #include<bits/stdc++.h> using ...
- 音视频下载Chrome插件 官方主页
2019年3月20日前的旧版有不能下载的情况,请使用下面的新版 音视频下载是个点击图标后就能下载网页里正在播放的音视频文件的软件 下载:官方下载 百度网盘 Chr ...
- mock server 实现get方法的接口(二)
mock server 实现get方法的接口(二) 下面是实现查询品牌的接口demo: 1.当response数据量小的时候,可以直接使用json, mock会自动设置headers为applicat ...
- Docker File知识
- Android编程 控件与布局
控件和布局的继承结构 常用控件 1.TextView <?xml version="1.0" encoding="utf-8"?> <Line ...
- 20175211 2018-2019-2 《Java程序设计》第五周学习总结
目录 教材学习内容总结 第六章 接口与实现 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 学习进度条 参考资料 教材学习内容总结 第六章 接口与实现 6.1 接口 ...
- (转)测试如何区别是前端的问题还是后台的bug
常常说到的一个IT项目,包括前端开发,后台开发,软件测试,架构,项目经理,产品需求.那么对于一位优秀的软件测试工程师来说,需要区分前端和后台的工作就显得尤为重要. - 什么是前端和后台 简而言之,前端 ...
- Mac下vim7.4+vimgdb让vim支持gdb源码调试
下载vimgdb https://github.com/cpiger/vimgdb-for-vim7.4 下载vim7.4源码 将两个文件或者文件夹放到同一个目录解压 tar xjvf vim-7.4 ...
- Cocos Creator 动态改变sprite图片
首先将存放图片最外层文件夹命名为resources changeBj: function(){ var url = 'globalUI/video/gVideoPlayClick'; var _thi ...