自制操作系统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项目地址 在之前的任务中,我们已经通过直接操作显卡驱动完成了简单 ...
随机推荐
- 洛谷P3388 【模板】割点(割顶)
题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,m 下面m行每行输入x,y表示x到y有一条边 输出格式: 第一行输出割点个数 第二行按照 ...
- java_基础_异常
之前只是了解的最基础的异常形式,没有过多的深入 今天因为一些原因了解了一下 下面来说说异常的几种形式 1.try-catch语句块 代码示例 class test{ public static voi ...
- pe文件头详解
- [dev]typeof, offsetof 和container_of
转一篇文章.写的比较好,浅显易懂,还画了图. https://www.cnblogs.com/idorax/p/6796897.html 概况一下: container_of用到了typeof和off ...
- 队列->队列的应用(银行业务模拟)
文字描述 示意图 代码实现 // // Created by Zhenjie Yu on 2019-04-13. // #include <stdio.h> #include <st ...
- 《Redis 命令操作》
一:Redis 的启动与关闭 - 关闭指定端口的 Redis - redis-cli -p 9200 shutdown - 开启 Redis - redis-server redis.config 二 ...
- WangEditor+thinkphp5【真实可用+原创】
今天公司要编辑文章,一开始准备用ueditor,但是到了linux环境下一直不行,所以最终放弃.改用另外一个编辑器WangEditor.更加轻量级. 遇到最大的问题是 一个是图片上传,一个是div中的 ...
- mysql统计库下所有表数据行数
一.执行下面sql select concat( 'select "', TABLE_name, '", count(*) from ', TABLE_SCHEMA, '.', T ...
- 小白用阿里云搭载wordpress个人博客
阿里云服务已经购买多时,却一直没时间部署内容,借着这次机会自己照着博客园园友的方式用wordpress搭建了个人博客! 创建wordpress的内容就不多说了,直接附链接来源:https://www. ...
- ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)
using System; using System.Collections.Generic; using System.Data; using System.Text; namespace Gz ...