30天自制操作系统阅读笔记
whime_sakura
分享记录一些学习笔记,写的很不好的请见谅。
展开
-
使用二进制编辑器制作操作系统启动盘
通过二进制编辑器BZ制作引导扇区,写入软盘,也可以通过模拟器运行。一开始在虚拟机无法引导,总是提示找不到系统,之后找到了本书的光盘资源,里面提供完整的代码和软件,将里面的helloos.img拿出来按照教程跑一遍发现可以,应该是自己的错误。 通过windows的fc指令比较发现映像文件有不一样的地方,但是无法输出确切的是哪一行,文件是二进制文件,输出是乱码的,只好一个一...原创 2018-10-30 10:31:48 · 679 阅读 · 0 评论 -
初始化PIC
初始化PIC PIC是programmable interrupt controller,可编程中断控制器。 PIC的初始化程序: ICW是 initial control word,初始化控制数据。ICW有四个,分别编号为1~4,共有4个字节的数据。ICW1和ICW4与PIC主板配线方式,中断信号的电气特性等有关。ICW2决...原创 2018-10-19 09:25:49 · 1178 阅读 · 0 评论 -
整理头文件及程序说明
头文件: 将一系列的函数声明放在一个头文件里,在分割出来的文件里面分别使用 #include<bootpack.h> 引用,减少重复声明。程序说明: GDTR 的低16位是段上限,它等于“GDT的有效字节数减一“,剩下的高32位,代表GDT的开始地址。 为了保存段的大小,段的起始地址,段的管理属性,声明了结构体segmen...原创 2018-10-19 09:26:26 · 521 阅读 · 1 评论 -
分割源文件,整理makefile
makefile可修改为:使用makefile一般规则:原创 2018-10-29 00:51:22 · 182 阅读 · 0 评论 -
GDT与IDT的初始化
GDT 实地址模式: 286架构以前的采用实地址模式,使用16位段寄存器的内容乘以16得到段基地址,加上16位的偏移地址得到内存地址。这种方式只能访问1MB的内存地址。保护地址模式:80286开始出现的保护模式可以寻址1MB以上的内存,采用的是段号加GDT的方式。 CPU用8个字节的数据表示这些信息,由于段寄存器只有16位,加上...原创 2018-10-29 00:52:05 · 1454 阅读 · 0 评论 -
结构体的使用和显示模式的保存
使用结构体这部分主要是对asmhead.nas保存下来的状态信息读出,在bootpack.c里面使用。将0x0ff0即VRAM地址使用结构体指针存放,按照结构体存储,注意对应的结构体声明顺序应该与汇编语言里的顺序一致。(个人理解) 显示字符 要显示字符,可以用8X16长方形像素点阵表示,像如下转换: 只需要根据对应的字体0...原创 2018-10-29 00:52:25 · 197 阅读 · 0 评论 -
用C语言实现内存写入
英特尔CPU迭代:创建直接写入内存的汇编程序 通过C语言程序调用汇编函数_write_mem8;由于VRAM写入了15,意味着所有像素颜色使用第15种颜色,所以画面是白色的。将程序改写使每隔16个像素色号就反复一次,可以呈现条纹图案。挑战指针使用C语言指针存储值。C程序改为同样可以输出条纹图案如上。...原创 2018-10-29 00:54:13 · 6899 阅读 · 1 评论 -
进入32位模式并导入C语言
显卡内存和一般的内存一样可以存储数据,它的每个地址都对应着画面上的像素,可以利用这一机制在画面上绘制出五彩缤纷的图案。VRAM 分布在内存分布图上好几个不同的地方。这是因为不同的画面模式的像素数也不一样,不同的画面模式可以使用的内存也不一样。 32位模式下可使用的内存容量远远大于1MB。CPU的自我保护功能(识别出可疑机器语言并进行屏蔽)在16位下不能用,但在32位下能用...原创 2018-10-29 00:54:42 · 290 阅读 · 0 评论 -
制作真正的IPL
今天通过修改启动区,使其装载程序,主要是使用BIOS INT 0x13读盘操作。逐渐修改代码,使用循环读入18个扇区和10个柱面。 接下来使用一个小程序作为加载对象,制作磁盘映像haribote.img 打开haribote.sys和haribote.img比较异同: 之...原创 2018-10-29 00:55:07 · 734 阅读 · 0 评论 -
512字节的启动盘和make工具
这个和第一天的差不多,只是制作启动区,使用nask汇编ipl.nas,生成ipl.bin和ipl.lst(列表文件,用于简单确认每个指令是怎样翻译成机器语言的)。之后使用makeimg.bat将ipl.bin制作成镜像文件helloos.img,各种工具均有提供。 Ipl.bin:ipl.nas Makefile,制作ipl.bin之前先检查ipl.nas和mak...原创 2018-10-29 00:55:24 · 182 阅读 · 0 评论 -
换用汇编程序写映像文件
这个部分就是使用汇编程序代替二进制编辑器制作helloos.img,作者提供了一个汇编源程序hellloos.nas,使用自己开发的汇编器nask,对nasm进行了优化,其中有一个就是对resb指令的优化,在当前指令预留指定字节并填充0x 00。 运行!cons_nt.bat或者!cons_9x.bat,其实这个批处理就是在当前目录调出命令行,接着运行asm.bat,其...原创 2018-10-30 10:31:32 · 385 阅读 · 0 评论 -
中断处理程序的制作
将函数注册到IDT中,在dsctbl.c的init_gdtidt 中加入:原创 2018-10-19 09:25:21 · 252 阅读 · 0 评论