- 博客(15)
- 资源 (2)
- 收藏
- 关注
原创 第六步:继续完善域结构并实现键盘模块与视频模块的交互
随着编写的不断深入,整个工程变得越来越大了。以前的一些文件,这里那里偶尔需要进行一下小的改动。单个文件的代码量也越来愈大。现今再一个一个文件的代码贴出来,就太占篇幅了。所以接下来的帖子里,我将直接给出下载链接,免得想要实际运行一下程序的朋友们需要粘贴来粘贴去。 我将所有的代码以及对应的img文件一起打包在了下面的压缩文件里。 因为是使用yc09编译器在xp下编译的,所以若想要修改代码的话,需要安装yc09编译器。修改代码后,无需手动编译整个工程,只需要运行压缩包里的run.e
2010-06-15 20:33:00
953
1
原创 第五步:进一步完善域结构并根据域结构重新编写键盘驱动
此次,对域结构进行了进一步完善,除了“子域”的概念没有出来外,域结构的最基本特性已经展现出来了。下面就对“域”的一些特点进行一下简单总结。然后利用“域”来重新实现键盘驱动程序。一个域,包含以下几个基本要素: 1.生命值 2.(主动)动作函数 //action 函数 3.(被动)动作函数 //on 事件(函数) 4.子域 //未实现域结构的操作(相当于域结构的系统调用函数): 1.运
2010-06-15 20:12:00
1039
原创 第四步:创建键盘中断处理模块和初步搭建程序执行系统
键盘中断处理模块: 在前一步,已经可以对键盘中断有反应了,但是按下一次键盘按钮后,就不再反应了。这是因为,必须要向键盘数据端口取出从键盘传来的扫描码后,才会继续等待与保存下一个键盘中断产生的扫描码。 t_8 scan_code = in_byte(KB_DATA); //获取扫描码,KB_DATA为键盘数据端口: 0x60 键盘每个按钮按下时和持续按下不松开会产生键盘中断,以
2010-05-27 20:27:00
1641
原创 第三步:初步建立中断异常处理机制
建立中断异常处理机制,主要就是对8259A的初始化,建立中断描述符表。因为要对十来个已定义的异常进行处理,再加上16个外部中断的处理,代码量就显得很庞大了。因为一时间也想不出更好的处理方案,所以就照搬《自己动手写操作系统》里的那一套方法用着先…… 具体的初始化流程为: kernel -> init_prot() //在 init_prot() 调用init_825
2010-05-17 04:19:00
1478
原创 第二步:在内核添加屏幕输出函数
这一步,主要是一个过渡,为将来的工作做准备。在这里的主要工作是整理代码与添加字符串与int型数值的输出函数。 在yc09中,编译后的二进制文件,函数似乎是按照在代码中的先后顺序排列的,然后再在末尾放置所有的变量。在整个内核中,是以kernel.c文件为核心。在后面添加任何模块,都是在kernel.c文件的开头包含头文件,在kernel.c文件的末尾包含代码文件。如此,就可以保证内核
2010-05-15 00:52:00
1369
原创 第一步:加载内核到内存中
在 操作系统学习笔记 里基本完成了《自己动手写操作系统》第三章的几个实验(除了分页机制实验外)。下面就要迈开编写自己的操作系统这万里长征的第一步了。 在迈出第一步前,有几件事要简要说明一下。 首先,为将要实现的操作系统命名为:maios。请不要问我这个名称的含义是什么…… 其次,制作此操作系统的目的是什么,或者所此操作系统的用户是谁。简单
2010-05-14 00:33:00
3786
2
原创 猫吃老鼠问题
今天在看雪看到这个“猫吃老鼠问题”的帖子,和当初学编程时的一个叫做“约瑟夫环问题”类似。自己按照数学的方法分析了一下,得到一个数学算法。 问题描述: 现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号。 数学算法 //若从1号算起 int total = 1;
2010-04-18 18:53:00
1483
原创 汉诺塔问题算法(c语言控制台动画演示版)
递归思想非常简单也是最常见的算法之一,其中一代表例题就是汉诺塔问题。解题的算法很简单:void Hanoi(int n,int A,int B,int C){ if(n>0) { Hanoi(n-1,a,c,b); move(a,b); show(); Hanoi(n-1,c,b,a);
2010-03-23 15:45:00
7911
原创 操作系统实验七:保护模式之中断测试实验
我对中断的理解: 中断,顾名思义,就是在遇到特殊的情况时,停下当前正在做的事情,转去干其他(根据特殊情况预先设计好的)事情,完成后(并不一定非要)再继续之前做的事情。 首先说说“去干其他(根据特殊情况预先设计好的)事情”。 我们可以预先设计好256件事情(处理函数),然后使用0~255这256个编号(中断向量号)表示代指。“事情”根据是否可以再次打断(中断),分为中断门(不可以被打断
2010-02-15 00:13:00
2491
原创 操作系统实验六:保护模式之使用调用门提升特权级
对IA32分段机制中特权级的个人总结: 在IA32的分段机制里,分为4个特权等级(ring0~ring3): Level0 高(内层) L e v e l 1 L e v e l 2 L e v e l 3
2010-02-14 23:42:00
2932
原创 操作系统实验五:保护模式之初步认知门任务(求助:如何使用其他指令替代或模拟retf指令)
向汇编高手求助: 此次实验中需要用到retf指令在调用门任务后返回。可是yc09编译器不支持retf指令。而我使用ret指令无法正确跳转返回。 因为对汇编不熟,胡乱试了许多方法后依然无法解决,无奈之下,只好在编译好代码后直接修改机器指令码。希望有路过的高手、大牛等告说我在不换编译器的前提下如何解决这问题。 使用retf指令报错信息: pm32.c(
2010-02-03 21:15:00
2000
2
原创 操作系统实验四:保护模式之局部任务(LDT)初探
通过前几次实验,对于实模式与保护模式间的跳转已经有了充分认知。此次实验与接下来的实验主要集中在认识保护模式下的一些特性,如多任务的基础(局部任务LDT)、分页机制、中断、异常、I/O等。为了尽可能将实验设计的简单,我尽量将以上实验压缩在引导扇区的512字节内。为了节省空间,我将pm16.c精简了许多,它只负责跳转到保护模式(程序限制在80字节以内),在pm32.c里会重新加载新
2010-01-30 19:44:00
1463
原创 操作系统实验三:实模式与保护模式间自由跳转
此次实验,是在 操作系统实验二:从实模式跳转到保护模式 基础上的进一步实验。实验实现的内容很简单,一开始进入实模式,然后跳转到保护模式,然后再跳转回实模式,然后再跳转到保护模式,如此不断循环。 从实模式调转到保护模式步骤:1.准备好GDT2.使用lgdt指令加载gdtr3.打开地址线A204.设置cr0的PE位为15.使用cli指令关闭中断6.根据G
2010-01-24 02:54:00
2267
原创 操作系统实验二:从实模式跳转到保护模式
写在前面的话: 编写这一个实验实在是让我感到惭愧,捣鼓了许多次,也失败了许多次,才好不容易才正确跳转到保护模式。想当初我按照《自己动手写操作系统》直接打代码,用nasm编译运行,尽管也会出现一些小错误。但仔细对照书或直接拉出源代码来对比一下就ok了。自以为已经完全弄懂了,如今换个编译器,在代码不完全通用而编译器又极度缺乏相关的参考资料、只能靠使用bochsdbg.exe一点一点调试的
2010-01-13 05:53:00
2308
原创 操作系统实验一:在引导扇区编写显示字符串的引导程序
写在前面的话: 一直以来就想要自己动手写一个简单的操作系统,可惜水平有限,在linux下编译安装一个程序几天都没有成功,更不用说研究Linux的内核代码了。后来买来minix的书籍,看了半个月,也不知道如何开始写自己的第一行代码……无意中发现于源写的《自己动手写操作系统》,终于让我真正踏上了编写操作系统的第一步。这里要非常感谢于源大大为广大学习编写操作系统的初学者作出的巨大贡献。
2010-01-12 02:09:00
4398
9
Win10 win32 Form C#读取蓝牙陀螺仪等数据
2017-01-07
一步步写操作系统之第六步的全部源代码与os镜像文件
2010-06-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人