
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 · 302 阅读 · 5 评论 -
第9天 内存管理
第9天 内存管理 https://weread.qq.com/web/reader/38732220718ff5cf3877215ka3f32db0244a3f390d88bb9 1 整理源文件(harib06a) 刚想改造bootpack.c,却发现为了解决鼠标处理问题而大加修改程序导致程序变大了很多,足足有182行。嗯,程序太长了,怎么看都不舒服,所以笔者决定将程序整理一下。 wait_KBC_sendready -> keyboard.c init_keyboard -> keyboard原创 2021-06-11 21:27:15 · 273 阅读 · 0 评论 -
第8天 鼠标控制与32位模式切换
第8天 鼠标控制与32位模式切换 https://weread.qq.com/web/reader/38732220718ff5cf3877215k03a32a4023f03afdbd66a39 1 鼠标解读(1)(harib05a) 好,现在我们已经能从鼠标取得数据了。紧接着的问题是要解读这些数据,调查鼠标是怎么移动的,然后结合鼠标的动作,让鼠标指针相应地动起来。这说起来简单,但做起来呢……事实上编起程序来,也很简单。(笑) 我们要先来对bootpack.c的HariMain函数进行一些修改。这次Har原创 2021-06-11 09:56:58 · 265 阅读 · 2 评论 -
第7天 FIFO与鼠标控制
第7天 FIFO与鼠标控制 https://weread.qq.com/web/reader/38732220718ff5cf3877215k9f6326602389f61408e3715 第7天 FIFO与鼠标控制 1 获取按键编码(harib04a) 今天我们继续加油吧。鼠标不动的原因已经大体弄清楚了,主要是由于设定不到位。但是,在解决鼠标问题之前,还是先利用键盘多练练手,这样更易于鼠标问题的理解。 现在,只要在键盘上按一个键,就会在屏幕上显示出信息,其他的我们什么都做不了。我们将程序改善一下,原创 2021-06-11 01:30:36 · 174 阅读 · 1 评论 -
第6天 分割编译与中断处理
第6天 分割编译与中断处理 https://weread.qq.com/web/reader/38732220718ff5cf3877215kc0c320a0232c0c7c76d365a 1 分割源文件(harib03a) 不经意地看一下bootpack.c,发现它竟然已长达近300行,是太长了点。所以我们决定把它分割为几部分。将源文件分割为几部分的利弊,大致如下。 我们先将源文件按下图分割一下看看。 分割并不是很难,但有一点很关键。比如如果graphic.c也想使用naskfunc.nas的函数,就必原创 2021-06-10 23:32:22 · 266 阅读 · 0 评论 -
第5天 结构体、文字显示与GDT/IDT初始化
第5天 结构体、文字显示与GDT/IDT初始化 https://weread.qq.com/web/reader/38732220718ff5cf3877215k34132fc02293416a75f431d 1 接收启动信息(harib02a) 在bootpack.c里的,都是将0xa0000呀,320、200等数字直接写入程序,而本来这些值应该从asmhead.nas先前保存下来的值中取。如果不这样做的话,当画面模式改变时,系统就不能正确运行。 所以我们就试着用指针来取得这些值。顺便说一下,bin原创 2021-06-10 20:34:54 · 584 阅读 · 0 评论 -
第4天 C语言与画面显示的练习
第4天 C语言与画面显示的练习 https://weread.qq.com/web/reader/38732220718ff5cf3877215k182326e0221182be0c5ca23 1 用C语言实现内存写入(harib01a) 想要画东西的话,只要往VRAM里写点什么就可以了。但是在C语言中又没有直接写入指定内存地址的语句。嗯,真是不方便。所以,我们干脆就创建一个有这种功能的函数。下面就来修改一下naskfunc.nas。 _write_mem8: ; void write_mem8(...原创 2021-06-10 17:32:06 · 325 阅读 · 0 评论 -
第3天 进入32位模式并导入C语言
第3天 进入32位模式并导入C语言 https://weread.qq.com/web/reader/38732220718ff5cf3877215k37632cd021737693cfc7149 1 制作真正的IPL 到昨天为止我们讲到的启动区,虽然也称为IPL(Initial Program Loader,启动程序装载器),但它实质上并没有装载任何程序。而从今天起,我们要真的用它来装载程序了。 那么我们先从简单的程序开始吧。因为磁盘最初的512字节是启动区,所以要装载下一个512字节的内容。我们来.原创 2021-06-10 14:54:16 · 319 阅读 · 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 · 461 阅读 · 0 评论 -
初次体验汇编程序
初次体验汇编程序 https://zhuanlan.zhihu.com/p/100755422 https://weread.qq.com/web/reader/38732220718ff5cf3877215k6f4322302126f4922f45dec 好,现在就让我们马上来写一个汇编程序,用它来生成一个跟刚才完全一样的helloos.img吧。我们这次使用的汇编语言编译器是笔者自己开发的,名为“nask”,其中的很多语法都模仿了自由软件里享有盛名的汇编器“NASM”,不过在“NASM”的基础之上又提高原创 2021-06-09 10:20:55 · 301 阅读 · 0 评论