1.优化第4天代码:
在第四天的bootpack.c中绘制界面部分,都是将一些数字直接写入程序,这样的程序是没法维护的。所以第五天首先把这些数字用变量代替,后期更改需要更改的时候只需更改一处即可。再者,这些出现数字的地方主要是一些显存的设置,所以索性将它们放到结构体里面。
如下:
struct BOOTINFO{
char cyls, leds, vmode, reserve;
short scrnx, scrny;
char *vram;
}
结构体中的变量和之前在asmhead.nas中设置的是对应的,如下:
CYLS EQU 0x0ff0 ; 设定启动区
LEDS EQU 0x0ff1
VMODE EQU 0x0ff2 ; 关于颜色数目的信息。颜色的位数
SCRNX EQU 0x0ff4 ; 分辨率的X(screen x)
SCRNY EQU 0x0ff6 ; 分辨率的Y(screen y)
VRAM EQU 0x0ff8 ; 图像缓冲区的开始地址
接下来创建并初始化一个结构体指针,即可完成所有结构体内部变量的初始化,如下:
struct BOOTINFO *binfo = (struct BOOTINFO *) 0x0ff0;
这条语句执行完以后:
binfo->cyls 的值为 0x0ff0
binfo->leds 的值为 0x0ff1
...
2.显示字符、字符串、鼠标指针:
不管是显示字符还是字符串还是鼠标指针,原理都是一样的,就是往显存的特定地方写特定的值(颜色信息)
void putfont8(char *vram, int xsize, int x, int y, char c, char *font) //显示hankaku中的某一个字符
{
int i;
char *p,d;
for(i = 0; i < 16; i++)
{
p = vram + (y + i) * xsize + x;
d = font[i];
if((d & 0x80) != 0) { p[0] = c; }
if((d & 0x40) != 0) { p[1] = c; }
if((d & 0x20) != 0) { p[2] = c; }
if((d & 0x10) != 0) { p[3] = c; }
if((d & 0x08) != 0) { p[4] = c; }
if((d & 0x04) != 0) { p[5] = c; }
if((d & 0x02) != 0) { p[6] = c; }
if((d & 0x01) != 0) { p[7] = c; }
}
}
void putfont8_str(char *vram, int xsize, int x, int y, char c, unsigned char *s) //显示字符串s
{
extern char hankaku[4096];
for(; *s != 0x00; s++)
{
putfont8(vram, xsize, x, y, c, hankaku + *s * 16);
x += 8;
}
}
3.字库文件的连接
字库文件是一个txt文件,需要通过一些工具把他编译,连接到我们的程序中。makefile文件中的依赖关系,如下图
4.GDT与IDT的初始化
GDT: Global(segment) Descriptor Table 全局段号记录表.
IDT: Interrput Descriptor Table 中断记录表
1)为了解决内存范围重叠使用的问题,需要对内存进行分段(即对GDT进行初始化)。分段以后,即使两个程序
要同时访问内存地址0xa000,只要不在同一段,就不会产生冲突。
2)IDT记录了0~255的中断号码与调用函数的对应关系。
最终效果:
分享到:
相关推荐
《30天自制操作系统——用U盘启动自制系统》所用的工具 文章地址:http://blog.csdn.net/nonekey/article/details/8758715 以上工具均来自互联网!
操作系统课程设计报告,基于30天自制操作系统,内容为简单demo的实现,可参考学习
30天自制操作系统第1~15天实验日志,包括实验内容,问题及解决方式,描述创新点
《30天自制操作系统》源码中文版。自己制作一个操作系统(OSASK)的过程
自己制作一个操作系统的过程,阅读过程会一边汉化源码,一边执行还有根据一些相关的内容进行代码的书写,欢迎大家交流。 运行方法,在 tolset 中新建一个 run 文件夹,把代码拷贝进去,然后根据系统版本运行 !cons_...
30天自制操作系统最后的实验验收,将近两千行的代码,两点在于开机动画的帧数多,密码,双击,时钟绘制的好看,直线的绘制,可以用拖动的方式绘制矩形,还可以通过输入的方式改变绘制的大小,以及窗口颜色来改变颜色
自制软件————个人版自制软件————个人版自制软件————个人版
我是一个大二的学生,学C语言快两年了 这个程序是修改自《30天自制操作系统》的,作者有声明任何人使用它的程序可以不负任何费用,但是保留任何人修改并出售它的权利,而且这个并不是完整的操作系统。相反,其实我并...
30天自制操作系统书籍源程序文件
30天制作操作系统光盘内容,内容完整、代码清晰、适合初学者
《30 天自制操作系统》读书笔记.zip
管理系统系列--<30天自制操作系统>-----用GIT管理你的自制操作系统。
30天自制操作系统-川合秀实.docx
30天自制操作系统第2次,第3次实验验收,还包括窗口关闭与显示,完善任务栏被吃掉
改进版的30天自制操作系统-操作系统课程作业+源代码+文档说明 - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分...
关于30天自作操作系统源码包,欢迎下载
利用Excel的VBA技术自制时间管理工具——时间助理