
30天自制操作系统
麓山君陌
在校科研生
展开
-
30天自制操作系统——自写设计
写在前面:这是我在学习了一个学期的《30天自制操作系统》之后,用了差不多一个周的时间,所写出来的一个纸娃娃操作系统,有一个小的开机动画,可以输入密码,然后有一个小的画图程序。现在把他写出来,只是为了记录这一个学期的学习经历吧,至少证明自己学有所成,所有所获。一、实验环境硬件环境:计算机,无特殊配置要求软件环境:QEMU虚拟机、批处理文件、相关编译工具等语言环境:C语言、汇编语言二、功能介...原创 2019-12-23 13:35:35 · 8288 阅读 · 7 评论 -
30天自制操作系统(day14)
第14天:高分辨率及键盘输入1、内容1:继续测试性能因为在对前一天的程序进行性能检测时,效果并没有达到想要的结果,于是就想再重新检测看下程序的运行结果。发现没有什么不同之后,考虑为啥做了不少修改之后,程序的速度也没有变快。于是考虑到,在前一个程序的改进的地方是消除了移位处理,要想看到程序上的速度有明显变化,应该是进行了大量的移位操作之后,而一直只使用了三个定时器,所以并没有什么不同。因此增...原创 2019-12-13 15:44:48 · 2142 阅读 · 0 评论 -
30天自制操作系统(day13)
第13天:定时器1、内容1:简化字符串显示,a文件夹将类似于这种三步操作:1)涂上背景色2)在上面写字符3)完成刷新因为bootpack.c中出现了很多次如下代码,因此可以制作一个显示函数来使得bootpack.c中的内容进一步的简化,使得这个功能更更方便使用。改写函数:X、y是显示位置的坐标,c是字符颜色,b是背景颜色,s是字符串,l是字符串的长度。这样改写之后,虽然缩短了两...原创 2019-12-08 14:29:32 · 2051 阅读 · 0 评论 -
30天自制操作系统(day12)
第12天:定时器(1)1、内容1:使用定时器定时器的意思是每隔一段时间就发送一个中断信号给CPU,这样CPU就不需要自己去计量时间。如果不采用定时器会导致程序对时间的管理难度增大,并且不能再使用HLT指令了。因此很有必要采用定时器中断,当使用定时器后,程序只需要以自己的步调处理问题即可,当需要知道时间时,只需要在中断程序中记录定时器中断发生的次数即可。即使CPU处于HLT状态时,也可以通过中断...原创 2019-12-07 21:57:51 · 2844 阅读 · 0 评论 -
30天自制操作系统(day11)
第11天:制作窗口1、内容1:添加一个窗口图层有哪些步骤?(格式:文字说明+对应代码)步骤一:创建描绘窗口的函数。void window(unsigned char* buf, int xsize, int ysize){ static char closebtn[15][17] = { "@@@@@@@@@@@@@@@@@", "@$$$$$$$$$$$$$$$@", "@$...原创 2019-12-03 15:19:49 · 2127 阅读 · 1 评论 -
30天自制操作系统(day10)
第10天:叠加处理1、内容1:内存管理因为bootpack.c太长了,所以创建一个memory.c,将bootpack里的一部分内容分到memory中,使bootpack.c的代码变短。在之前的内存管理函数中,memman_alloc和memman_free是以1字节为单位进行内存管理的,虽然这样没啥问题,但是分配过小的话,在反复进行内存分配和内存释放之后,内存中就会出现很多不连续的小段未...原创 2019-12-01 17:40:22 · 929 阅读 · 0 评论 -
30天自制操作系统(day9)
第9天:内存管理1、内容1:整理源文件因为之前为了能让鼠标动起来,不断的修改bootpack.c文件,使得文件程序代码变得很长,因此将程序进行整理修改。具体修改如下:需要注意的是,在Makefile文件中的OBJS_BOOTPACK=里,要将keyboard.obj和mouse.obj也要补进去。运行之后一切正常。2、内容2:内存容量检查(1)要进行内存管理的第一步便是要确定内存...原创 2019-12-01 17:35:59 · 727 阅读 · 0 评论 -
30天自制操作系统(day8)
第8天:鼠标控制与32位模式切换1、内容1:鼠标解读(1)前一天已经实现了从鼠标中取得数据,因此这一天就是解读之前取得的数据,让鼠标能够动起来。首先对HariMain函数进行修改,将读鼠标得到的最初的0xfa舍弃。将之后的鼠标传送的3个字节一组的数据,使其显示在屏幕上。为什么要舍弃0xfa?因为鼠标已经激活,不需要这个显示的数据了。其中,变量mouse_phase是用来记住接收鼠标数...原创 2019-11-21 19:47:11 · 656 阅读 · 0 评论 -
30天自制操作系统(day7)
第7天:FIFO与鼠标控制1、内容1:获取按键编码将程序进行改善,使其在按下一个键后不结束,而是将按键编码在画面上显示出来,切实完成中断处理程序。要完成上述操作,主要是要修改int.c程序中的inthandler21函数,修改如下:首先执行io_out8(PIC0_OCW2,0x61)之后,PIC继续时刻监视IRQ1中断是否发生。如果忘记执行这句话,PIC就不再监视IRQ1中断,不管下次...原创 2019-11-18 20:14:14 · 565 阅读 · 0 评论 -
30天自制操作系统(day6)
第6天:分割编译与中断处理1、内容1:分割源文件因为之前的bookpack.c程序已经很长了,因此就将其进行切割成几个部分,分别是graphic.c、dsctbl.c和bootpack.c三个部分。这三个部分依次是关于画图的处理、关于GDT、IDT等descriptor table的处理以及其他部分的处理。但是如果graphic.c也想使用naskfunc.nas函数的话,必须加上void...原创 2019-11-15 20:23:57 · 658 阅读 · 0 评论 -
30天自制操作系统(day5)
第5天:结构体、文字显示与GDT/IDT初始化**一、实验主要内容1、内容1:**接收启动信息在原先的bookpack.c中,都是将0xa0000,320,200等数字直接写入程序,但这些值本来应该从asmhead.nas先前保存下来的值取,否则当画面模式改变时,系统就不能正常运行。采用指针去除上述数值:这里的0x0ff4之类的地址是为了与asmhead.nas保持一致才出现的。**2...原创 2019-11-08 13:12:50 · 697 阅读 · 0 评论 -
30天自制操作系统(day4)
第4天:C语言与画面显示的练习**一、实验主要内容1、内容1:**用C语言实现内存写入如果想要在画面上显示东西的话,那么只需要向内存中写入东西即可。但是C语言没有直接写入指定内存地址的语句,便需要采用汇编语言创建一个有这种功能的函数。修改naskfunc.nas,向其添加部分代码:这个函数类似于C语言中的write_mem8(0x1234,0x56),其中addr是内存地址,data是...原创 2019-11-08 13:08:38 · 906 阅读 · 1 评论 -
30天自制操作系统(day3)
第3天:进入32位模式并导入C语言一、实验主要内容**1、内容1:**制作真正的IPL因为磁盘最初的512字节是启动区,因此要装载下一个512字节的内容,于是在IPL.nas文件中添加以下指令:其中JC为jump if carry”意思是如果进位标志(carry flag)是1的话,就跳转。INT 0x13表示调用BIOS的0x13号函数。这里有BIOS的各个函数:01H 读取磁盘系...原创 2019-11-08 13:04:33 · 1225 阅读 · 3 评论 -
30天自制操作系统(day2)
第2天:汇编语言学习与Makefile入门**一、实验主要内容1、内容1:**文本编译器notepad++下载。在网上另外找到的编译器,然后在群里进行了分享,网址为https://dl.pconline.com.cn/html_2/1/117/id=10699&pn=0.html。直接选择本地下载,注意设置语言。点击就可以使用,界面如下(太简洁了吧…)用他来打开一个nas文件,如h...原创 2019-11-08 12:59:45 · 851 阅读 · 0 评论 -
30天自制操作系统(day1)
第1天:从计算机结构到汇编程序入门**一、实验主要内容1、内容1:**BZ.exe编辑器下载。这里我没有从书上的网站去找,而是在网上另外找到的编译器,网址为http://www.pc6.com/softview/SoftView_557368.html。直接选择本地下载,然后解压即可使用。点击BZ.exe可以直接使用,界面如下(太简洁了吧…)用他来打开一个helloos.img文件看一下:...原创 2019-11-08 12:55:50 · 1235 阅读 · 0 评论