
自制操作系统
《30天自制操作系统》的学习日记。
Lor :)
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自制操作系统13-定时器(2)
DAY13 定时器(2)2020.10.26今天主要是修改FIFO缓冲区和继续改进定时器。1. 简化字符串显示文档:harib10a先弄点简单的,一上来就讲难的只会降低效率。boxfill8(buf_back, binfo->scrnx, COL8_008484, 0, 16, 15, 31);putfonts8_asc(buf_back, binfo->scrnx, 0, 16, COL8_FFFFFF, s);sheet_refresh(sht_back, 0, 16, 16原创 2020-10-28 19:49:27 · 333 阅读 · 0 评论 -
自制操作系统12-定时器(1)
DAY12 定时器(1)2020.10.25为了铺垫之后需要实现的多任务,我们先学习如何使用定时器。学会使用定时器可不简单,还要逐步优化定时器的中断处理。1. 使用定时器文档:harib09aTimer(定时器):每隔一段时间就发送一个中断信号给CPU,有了Timer就不用CPU去辛苦计量时间了。想知道如果操作系统没有定时器有多艰难的可以想象一下自己没有手表还想知道时间的话得怎么办,所以说定时器非常重要,管理定时器是操作系统的重要任务之一。要使用定时器只需要对PIT(Programmable原创 2020-10-28 15:10:43 · 536 阅读 · 0 评论 -
自制操作系统11-制作窗口
DAY11 制作窗口2020.10.25今天实现了窗口显示并优化了画面刷新避免了闪烁的问题。1. 窗口边缘时的鼠标显示处理文档:harib08a看看下面这张截图鼠标移动到右侧后就不能再往右了,但我们在Windows鼠标移动到最右或最下是可以隐藏起来的。我们修改下HariMain中的鼠标边缘判断语句很轻松就能解决了。原来的程序:if (mx > binfo->scrnx - 16) { mx = binfo->scrnx - 16;} if (my >原创 2020-10-27 17:17:58 · 463 阅读 · 1 评论 -
自制操作系统10-图层叠加处理
DAY10 图层叠加处理2020.10.23-2020.10.24今天实现了画面中窗口的叠加解决了鼠标吃任务栏的问题,还相应地提高了画面刷新的速度。1. 叠加处理文档:harib07b现在我们继续回到上次鼠标显示的问题上,上次鼠标移动到下面后把任务栏给吃了。所以我们要处理画面叠加显示的问题,不仅适用于鼠标还要适用于多窗口的叠加。我们决定使用图层来存放窗口,通过移动图层的方法实现鼠标指针的移动以及窗口的移动。先定义图层结构体struct SHEET { unsigned char *bu原创 2020-10-27 14:53:33 · 502 阅读 · 0 评论 -
自制操作系统9-内存管理
DAY9 内存管理2020.10.22-2020.10.23今天的主要学习了内存管理的必要性和如何进行内存管理。1. 整理源文件文档:harib06a 暂时先把鼠标的问题放一边,今天干点别的。 bootpack.c现在已经182行了,看着不舒服,我们要稍微整理一下。将程序整理如下:函 数 名移 动 前移 动 后wait_KBC_sendreadybootpack.ckeyboard.cinit_keyboardbootpack.ckeyboard.c原创 2020-10-23 16:36:06 · 433 阅读 · 2 评论 -
自制操作系统8-鼠标控制与32位模式切换
DAY8 鼠标控制与32位模式切换2020.10.21今天非常开心,实现了鼠标的移动,但通往32位模式的任务有点艰巨。稳住!1. 鼠标解读文档:harib05a我们已经能从鼠标取得数据了,接来下就是解读这些数据让鼠标动起来,这听起来很简单。先来对bootpack.c的HariMain函数进行一些修改://这次HariMain的修改部分unsigned char mouse_dbuf[3], mouse_phase;enable_mouse();mouse_phase = 0; /*原创 2020-10-22 19:42:09 · 418 阅读 · 0 评论 -
自制操作系统7-FIFO与鼠标控制
DAY7 FIFO与鼠标控制2020.10.19今天的任务主要是学习如何获取中断数据并制作FIFO缓冲区来暂存数据,还有对鼠标的激活。1. 获取按键编码文档:hiarib04a今天继续加油!在解决鼠标问题前,还是先利用键盘多练手。现在我们按下不同的键却还是只显示相同的信息,我们需要改善一下程序,获取按键的编码并在画面上显示出来。//int.c节选#define PORT_KEYDAT 0x0060void inthandler21(int *esp){ struct BOOTI原创 2020-10-21 20:29:57 · 336 阅读 · 0 评论 -
自制操作系统6-分割编译与中断处理
DAY6 分割编译与中断处理2020.10.18今天主要整理了一下源文件,并实现中断处理。1. 分割源文件文档:harib03a今天先做点热身运动再继续昨天剩下的程序。现在的bootpack.c已经长达300行,我们决定把它分割为几部分。将源文件分割为几部分的优缺点:优点分类得好的话,修改时容易定位到对应代码处。只需要编译修改过的文件,提高make的速度。单个源文件都不长,多个小文件比一个大文件更好处理。缺点源文件数量增加。分类得不好的话,修改时不容易定位。分割后每原创 2020-10-19 19:38:19 · 307 阅读 · 0 评论 -
自制操作系统5-结构体、文字显示与GDT/IDT初始化
DAY5 结构体、文字显示与GDT/IDT初始化2020.10.17-2020.10.18今天的内容主要学习了如何显示符号,将鼠标指针显示出来后,进而考虑如何让它动起来。1. 接受启动信息文档:harib02a昨天的bootpack.c里的0xa0000,320,200等数字都是直接写入程序,当画面模式改变时,不更改bootpack.c里的值就不能正确运行。所以我们应该从asmhead.nas中把先前保存下来的值取出。因此,对bootpack.c做如下更改:; asmhead.nas节选;原创 2020-10-19 19:37:20 · 502 阅读 · 0 评论 -
自制操作系统4-C语言与画面显示的练习
DAY4 C语言与画面显示的练习2020.10.16-2020.10.17今天的主要内容是学习实现内存的写入和读出,学会如何设置颜色并通过设定相应颜色绘制界面。总体来说,也还算轻松。1. 用C语言实现内存写入文档:harib01a; naskfun.c添加部分_write_mem8: ; void write_mem8(int addr, int data); MOV ECX,[ESP+4] ; [ESP + 4]中存放的是地址,将其读入ECX MOV AL原创 2020-10-19 19:35:21 · 413 阅读 · 1 评论 -
自制操作系统3-进入32位模式并导入C语言
DAY3 进入32位模式并导入C语言2020.10.15-2020.10.16第三天的任务量突然提上来了,但是总体来说也还算轻松。主要任务是学习如何导入C语言。1. 制作真正的IPL文件:hairb00aMOV AX,0x0820MOV ES,AXMOV CH,0 ; 柱面0MOV DH,0 ; 磁头0MOV CL,2 ; 扇区2MOV AH,0x02 ; AH=0x02 : 读盘MOV AL,1 ; 1个扇区MOV BX,0 ; 将指定扇区读到ES:BX处即原创 2020-10-18 17:46:54 · 588 阅读 · 0 评论 -
自制操作系统2-汇编语言学习与Makefile入门
DAY2 汇编语言学习与Makefile入门2020.10.15第二天的任务也比较轻松,主要是学习汇编语言知识,和学会使用Makefile批处理文件。1. 文本编辑器Notepad++2. 继续开发文档:helloos3; hello-os; TAB=4 ORG 0x7c00 ; 指明程序的装载地址; 以下的记述用于标准FAT12格式的软盘 JMP entry DB 0x90---(中略)---; 程序核心entry: MOV AX,0 ; 初始化原创 2020-10-18 17:45:37 · 353 阅读 · 0 评论 -
自制操作系统1-从计算机结构到汇编程序入门
DAY1 从计算机结构到汇编程序入门2020.10.15第一天的任务很简单,就是体验一下制作一个非常简易的操作系统。1. 体验用二进制编写代码二进制编译器链接BZ用二进制编译器写入一个1474650(1440*1024)字节大小的磁盘映像文件2. 体验汇编程序DB 0xeb, 0x4e, 0x90, 0x48, 0x45, 0x4c, 0x4c, 0x4fDB 0x49, 0x50, 0x4c, 0x00, 0x02, 0x01, 0x01, 0x00DB 0x02, 0xe0, 0x原创 2020-10-18 17:40:36 · 291 阅读 · 0 评论