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是作者从gcc改造来的。作者很会改造啊,这个技能需要学习一下。改造编译器是定制操作系统的必修课。
遇到的问题
harib00c文件夹里的内容,在命令窗口运行 make install报错,无法执行。
make run之所以能执行大约是因为启动了qume,而Makefile里的install命令里没有启动qume,像是引用了一个磁盘吗?
install :
$(MAKE) img
$(IMGTOL) w a: haribote.img
也许这个问题没有办法解决吧,也许可以改造这个命令解决?改天试试
想到的问题
1、这些读取磁盘的命令在未来磁盘消失的时代也会无法运行吧,是不是固态硬盘上运行的操作系统的读取数据代码会很不一样?
2、英特尔在BIOS时代设定的64M的限制为什么大家就只能忍着?这一部分我实际上没有看懂。
3、启动区是16位的系统,也就是说BIOS?启动区还有别的选择吗?