30自制操作系统
文章平均质量分 78
张某人的胡思乱想
这个作者很懒,什么都没留下…
展开
-
第10天 叠加处理
第10天 叠加处理1 内存管理(续)(harib07a)https://weread.qq.com/web/reader/38732220718ff5cf3877215k32b321d024832bb90e89958得益于昨天的努力,我们终于可以进行内存管理了。不过仔细一看会注意到,bootpack.c都已经有254行了。笔者感觉这段程序太长了,决定整理一下,分出一部分到memory.c中去。(整理中)……好了,整理完了。现在bootpack.c变成95行了。为了以后使用起来更加方便,我们还是把原创 2021-06-12 21:17:59 · 292 阅读 · 5 评论 -
第9天 内存管理
第9天 内存管理https://weread.qq.com/web/reader/38732220718ff5cf3877215ka3f32db0244a3f390d88bb91 整理源文件(harib06a)刚想改造bootpack.c,却发现为了解决鼠标处理问题而大加修改程序导致程序变大了很多,足足有182行。嗯,程序太长了,怎么看都不舒服,所以笔者决定将程序整理一下。wait_KBC_sendready -> keyboard.cinit_keyboard -> keyboard原创 2021-06-11 21:27:15 · 258 阅读 · 0 评论 -
第8天 鼠标控制与32位模式切换
第8天 鼠标控制与32位模式切换https://weread.qq.com/web/reader/38732220718ff5cf3877215k03a32a4023f03afdbd66a391 鼠标解读(1)(harib05a)好,现在我们已经能从鼠标取得数据了。紧接着的问题是要解读这些数据,调查鼠标是怎么移动的,然后结合鼠标的动作,让鼠标指针相应地动起来。这说起来简单,但做起来呢……事实上编起程序来,也很简单。(笑)我们要先来对bootpack.c的HariMain函数进行一些修改。这次Har原创 2021-06-11 09:56:58 · 257 阅读 · 2 评论 -
第7天 FIFO与鼠标控制
第7天 FIFO与鼠标控制https://weread.qq.com/web/reader/38732220718ff5cf3877215k9f6326602389f61408e3715第7天 FIFO与鼠标控制1 获取按键编码(harib04a)今天我们继续加油吧。鼠标不动的原因已经大体弄清楚了,主要是由于设定不到位。但是,在解决鼠标问题之前,还是先利用键盘多练练手,这样更易于鼠标问题的理解。现在,只要在键盘上按一个键,就会在屏幕上显示出信息,其他的我们什么都做不了。我们将程序改善一下,原创 2021-06-11 01:30:36 · 162 阅读 · 1 评论 -
第6天 分割编译与中断处理
第6天 分割编译与中断处理https://weread.qq.com/web/reader/38732220718ff5cf3877215kc0c320a0232c0c7c76d365a1 分割源文件(harib03a)不经意地看一下bootpack.c,发现它竟然已长达近300行,是太长了点。所以我们决定把它分割为几部分。将源文件分割为几部分的利弊,大致如下。我们先将源文件按下图分割一下看看。分割并不是很难,但有一点很关键。比如如果graphic.c也想使用naskfunc.nas的函数,就必原创 2021-06-10 23:32:22 · 255 阅读 · 0 评论 -
第5天 结构体、文字显示与GDT/IDT初始化
第5天 结构体、文字显示与GDT/IDT初始化https://weread.qq.com/web/reader/38732220718ff5cf3877215k34132fc02293416a75f431d1 接收启动信息(harib02a)在bootpack.c里的,都是将0xa0000呀,320、200等数字直接写入程序,而本来这些值应该从asmhead.nas先前保存下来的值中取。如果不这样做的话,当画面模式改变时,系统就不能正确运行。所以我们就试着用指针来取得这些值。顺便说一下,bin原创 2021-06-10 20:34:54 · 555 阅读 · 0 评论 -
第4天 C语言与画面显示的练习
第4天 C语言与画面显示的练习https://weread.qq.com/web/reader/38732220718ff5cf3877215k182326e0221182be0c5ca231 用C语言实现内存写入(harib01a)想要画东西的话,只要往VRAM里写点什么就可以了。但是在C语言中又没有直接写入指定内存地址的语句。嗯,真是不方便。所以,我们干脆就创建一个有这种功能的函数。下面就来修改一下naskfunc.nas。_write_mem8: ; void write_mem8(...原创 2021-06-10 17:32:06 · 313 阅读 · 0 评论 -
第3天 进入32位模式并导入C语言
第3天 进入32位模式并导入C语言https://weread.qq.com/web/reader/38732220718ff5cf3877215k37632cd021737693cfc71491 制作真正的IPL到昨天为止我们讲到的启动区,虽然也称为IPL(Initial Program Loader,启动程序装载器),但它实质上并没有装载任何程序。而从今天起,我们要真的用它来装载程序了。那么我们先从简单的程序开始吧。因为磁盘最初的512字节是启动区,所以要装载下一个512字节的内容。我们来.原创 2021-06-10 14:54:16 · 306 阅读 · 0 评论 -
第二天:汇编语言学习与Makefile入门
第二天:汇编语言学习与Makefile入门helloos.nas文件; hello-os; TAB=4 ORG 0x7c00 ; 指明程序装载地址; 标准FAT12格式 JMP entry DB 0x90 DB "HELLOIPL" ; ......; 程序核心entry: MOV AX,...原创 2021-06-09 15:52:42 · 442 阅读 · 0 评论 -
初次体验汇编程序
初次体验汇编程序https://zhuanlan.zhihu.com/p/100755422https://weread.qq.com/web/reader/38732220718ff5cf3877215k6f4322302126f4922f45dec好,现在就让我们马上来写一个汇编程序,用它来生成一个跟刚才完全一样的helloos.img吧。我们这次使用的汇编语言编译器是笔者自己开发的,名为“nask”,其中的很多语法都模仿了自由软件里享有盛名的汇编器“NASM”,不过在“NASM”的基础之上又提高原创 2021-06-09 10:20:55 · 287 阅读 · 0 评论