30天自制操作系统 Day3

BIOS的寄存器和磁盘

http://community.osdev.info/?(AT)BIOS 作者给的这个页面可能需要*,访问不了。我的选择是暂时放弃T_T。反正作者写了我们在还页面上会看到的内容了。

今天的学习内容和JC这个命令有关。

JC: Jump if carry, 如果进位标志位1,就跳转。

我对照了之前关注的大佬的笔记,https://blog.csdn.net/qq511714326/article/details/82924920, 好像这一天,大佬记得不是很详细了,不过大佬贴出了源码,好开心,我的编辑器打开后看日文是乱码啊。所以抄笔记也是有收获的:P。

其实关于BIOS的寄存器这里我有些不太懂了。作者说要记住的几个寄存器是
CH:柱面号
CL:扇区号
DH:磁头号
DL:驱动器号

其实初看这些好懵啊,我觉得只要记住柱面是同心圆(环),从盘面外圈开始往里数。磁头有两个,正面是0,反面是1. 扇区就简单了,顾名思义,把每个柱面均分成18份。含有启动区的那个扇区是1,看图好像是顺时针方向排序的。每一个扇区有512个字节(看起来不是按照面积越大,存储越大的规则来的?)。

其实软盘现在应该没有人用了,这个知识后续大概也没有价值了,不过我们把排序方法记录一下,也许这种排序方法对我们还有用,大概看看,排序方法是先横向划分,在纵向划分,依旧是层次结构。

make仍然是核心

上面的草稿是几个月前留下的啦。后来再继续的时候就完全忘记应该如何操作啦,中断学习是一件很不开心的事情。

复习了很多,重新开始发现只要make run就可以看到系统运行的界面啦。刚才忘记的时候直接敲了Makefile里面的命令asm,发现完全没有用。看起来make是管家,Makefile只是账簿,还得管家拿着账簿才行。

启动区文件和实际操作系统是两个不同的文件

ipl和haribote终于同时出现了,第三天开始感觉有些难度啦。

ipl和haribote之间用一个地址相连。之所以分成两个文件我觉得有两个原因:
1、为了修改起来方便
2、使用了不同进制的寄存器

VRAM

显卡内存出现了,VRAM的每一个地址都对应画面上的像素,哇塞,好重要!

书中说VRAM分布在内存中的不同位置,也就是说VRAM本身就是分布式的?

作者屡次提到内存分布图,这个到底是在什么地方查看?

C语言版本开始了

为了调用C语言版本,汇编语言版本增加了100行…作者把这部分放在后面讲了,这里mark一下,要跟进这个问题。

C语言版本要变成机器语言,走的路程更加长:

cc1.exe gas2nask.exe nask.exe ojb2bim.exe bim2hrb.exe bootpack.c bootpack.gas bootpack.nas bootpack.obj bootpack.bim bootpack.hrb

cc1是作者从gcc改造来的。作者很会改造啊,这个技能需要学习一下。改造编译器是定制操作系统的必修课。

遇到的问题

harib00c文件夹里的内容,在命令窗口运行 make install报错,无法执行。30天自制操作系统 Day3
make run之所以能执行大约是因为启动了qume,而Makefile里的install命令里没有启动qume,像是引用了一个磁盘吗?

 install :
	$(MAKE) img
	$(IMGTOL) w a: haribote.img

也许这个问题没有办法解决吧,也许可以改造这个命令解决?改天试试

想到的问题

1、这些读取磁盘的命令在未来磁盘消失的时代也会无法运行吧,是不是固态硬盘上运行的操作系统的读取数据代码会很不一样?
2、英特尔在BIOS时代设定的64M的限制为什么大家就只能忍着?这一部分我实际上没有看懂。
3、启动区是16位的系统,也就是说BIOS?启动区还有别的选择吗?

上一篇:联想ThinkPad x1carbon 7th,i5 8265安装win7踩过的坑


下一篇:ThinkPad X1 Nano Gen1 2021年 使用问题跟踪