30天自制操作系统
上QQ阅读APP看书,第一时间看更新

第1天 从计算机结构到汇编程序入门

1 先动手操作

与其啰啰嗦嗦地写上一大堆,还不如实际动手开发来得轻松,我们这就开始吧。而且我们一上来就完全抛开前面的说明,既不用C语言,也不用汇编程序,而是采用一个迥然不同的工具来进行开发(笑)。

■■■■■

有一种工具软件名为“二进制编辑器”(Binary Editor)原文直译为“二进制编辑器”(Binary Editor),在中国“二进制编辑器”、“十六进制编辑器”这两种说法都有,这里尊重原著保留了“二进制编辑器”的说法。——译者注,是一种能够直接对二进制数进行编辑的软件。我们现在要用它来编辑出下图这样的文件。

也许有人会说“这样的工具我从来没有见过呀”,没关系,下面我们来详细地介绍一下。

首先打开下面这个网页:

http://www.vcraft.jp/soft/bz.html如果此网页连接不上,也可用google等检索工具来搜索一下,从别处下载Bz1621.lzh。

用BZ打开helloos.img时的画面

点击“在此下载”(Download)的链接,下载文件Bz1621.lzh(在此非常感谢c.mos公司无偿公开这么好的软件)。当你读到本书的时候,也许会有新的版本发布,所以文件名可能会有所不同。接下来,安装下载下来的文件,然后双击启动Bz.exe程序。如果不能正常启动的话,可以参考上面网页的“★注意★”一项,按照上面的安装指导进行操作。

顺利启动的话屏幕上会出现如下画面。

BZ起动时的画面

好,让我们赶紧来输入吧,只要从键盘上直接输入EB4E904845……就可以了,简单吧。其中字符之间的空格是这个软件在显示时为方便阅读自动插入的,不用自己从键盘上输入。另外,右边的.N.HELLOIPL……部分,也不用从键盘输入,这是软件自动显示的。可能版本或者显示模式不一样的时候,右侧显示的内容会与下面的截图有所不同。不过不用往心里去,这些内容完全是锦上添花的东西,即使不一样也没事。

输入到000037位置时的画面

从000090开始后面全都是00,一直输入到最后168000这个地址。如果一直按着键盘上的“0”不放手的话,画面上的0就会不停地增加,但因为个数相当多,也还是挺花时间的。如果家里有只猫的话,倒是可以考虑请它来帮忙按住这个键(日本的谚语:想让猫来搭把手,形容人手不足,连猫爪子都想借用一下),或者也可以干脆就用透明胶把这个键粘上。

168000附近的画面

因为一下子输入到最后实在是挺花时间的,大家也许想保存一下中间结果,这时可以从菜单上选择“文件”(File)→“另存为”(Save As),画面上就会弹出保存文件的对话框。我们可以随便取个名字进行保存,笔者推荐使用“helloos.img”。当想要打开保存过的文件时,首先要启动Bz.exe,从菜单上选择“文件”(File)→“打开”(Open),然后选择目标文件,这样原来保存的内容就能显示出来了。可是这个时候不管我们怎么努力按键盘,它都一点反应也没有。这是怎么回事?难道必须要一次性输入到最后吗?这个大家不必担心,其实只要从菜单里选择“编辑”(Edit)→“只读”(Read Only)就可以进入编辑状态啦。好了,我们继续输入。

如果家里的猫自由散漫惯了,不肯帮忙,而大家又不想用透明胶粘键盘这种土方法的话,不妨这样:用鼠标选择一部分0,然后从菜单选择“编辑”(Edit)→“复制”(Copy)。简简单单复制粘贴几次就可以大功告成了,这工具还真方便呀。

哦,对了,差点忘记一件重要的事——在地址0001F0和001400附近还有些地方不全是00,要像下图那样把它们也改过来,然后整体检查一下,确认没有输入错误。

0001F0附近

001400附近

下面,我们把输入的内容保存下来就完成了软盘映像文件的制作,这时查看一下文件属性,应该能看到文件大小正好是1474560字节(=1440×1024字节)。然后我们将这个文件写入软盘(具体后述),并用它来启动电脑。如下所示,画面上会显示出“hello, world”这个字符串。目前的程序虽然简单,但毕竟一打开电脑它就能够自动启动,还能在屏幕上显示出一句话来,已经小小成功了哦。不过,我们现在还没有结束这个程序的方法,所以想要结束的时候,只能把软盘取出来后切断电脑电源,或者重新启动。

至于最关键的往磁盘上写映像文件的方法,笔者已经预先准备好了一个程序。在介绍它的使用方法之前,我们先把笔者准备的工具全都安装进来吧,这样后面讲解起来比较省事。下面我们就来看怎么安装这些工具。

■■■■■

打开附带光盘,里面有一个名为tolsettool set的缩写,“工具套件”的意思。的文件夹,把这个文件夹复制到硬盘的任意一个位置上。现在里面的东西还不多,只有3MB左右,不过以后我们自己开发的软件也都要放到这个文件夹里,所以往后它会越来越大,因此硬盘上最好留出100MB左右的剩余空间。工具安装到此结束,我们既不用修改注册表,也不用设定路径参数,就这么简单。而且以后不管什么时候,都可以把这整个文件夹移动到任何其他地方。用这些工具,我们不仅可以开发操作系统,还可以开发简单的Windows应用程序或OSASK应用程序等。

接下来我们打开刚才安装的tolset文件夹,在文件夹的名字上单击鼠标右键,从弹出的菜单上选择“新建”(New)→“文件夹”(Folder)。画面上会显示出缺省的文件夹名“新建文件夹”(New Folder),我们要把它改为“helloos0”,并把前面保存的映像文件helloos.img复制到这个文件夹里。另外,刚才安装的tolset文件夹下有个名为z_new_w的子文件夹,其中有!cons_9x.bat和!cons_nt.bat这两个文件,要把它们也复制粘贴到helloos0文件夹里。

接着,在文件夹helloos0里单击鼠标右键,从弹出的菜单中选择“新建”(New)→“文本文件”(Text Document),并将文件命名为“run.bat”,回车后屏幕上会显示“如果改变文件扩展名,可能会导致文件不可用。确实要更改吗?”的对话框,我们选择“是”,创建run.bat文件。然后在run.bat文件名上单击鼠标右键,在弹出的菜单上选择“编辑”(Edit),输入下面内容并保存。

run.bat

copy helloos.img ..\z_tools\qemu\fdimage0.bin
..\z_tools\make.exe -C ../z_tools/qemu

然后按照同样的步骤,创建install.bat,并将下列内容输入进去。

install.bat

..\z_tools\imgtol.com w a: helloos.img

其实以上步骤创建的所有文件都已经给事先给大家准备好了,就放在附带光盘中名为projects\01_day\helloos0的子文件夹里。所以大家只要把光盘上的helloos0复制下来,粘帖到硬盘的tolset文件夹里,所有的准备工作就瞬间完成了。

■■■■■

好了,现在我们就来把这个有点像操作系统的软件安装到软盘上吧。随便从附近的小店里买片新软盘来,在Windows下格式化一下(格式化方法:把软盘插入磁盘驱动器后打开“我的电脑”,在“3.5吋软盘”(3.5inches Floppy)A:上单击鼠标右键,再选择“格式化”(Format)即可)。对了,这个时候不要选择“快速格式化”选项。然后用鼠标左键双击helloos0文件夹里的!cons_nt.bat文件(Windows95/98/Me的用户需要双击!cons_9x.bat),屏幕上就会出现一个命令行窗口(console)。我们先仔细确认一下软盘是否已经插好,然后在命令行窗口上输入“install”并回车,这样安装操作就开始了。稍候片刻,等安装程序执行完毕,我们的操作系统启动盘也就做好了。完成安装之后,也可以关闭刚才的命令行窗口了。

现在我们就用这张操作系统启动软盘来启动一下电脑试试吧,肯定跟刚才一样,会显示出“hello, world”的字样来。

在这里要提醒大家几点:一是软盘虽然不要求必须用全新的,但如果太旧的话,在读写过程中容易出问题,所以最好还是不要用太旧的软盘。另外,就算是新盘,如果太便宜的话有时也用不了,若是发现有问题,就需要再去买一张。最后一点,一旦格式化或者往软盘内安装操作系统,就会把里面原有的东西全部覆盖掉,所以大家千万不要用存有重要文件的软盘来尝试哦。

■■■■■

看到这里,大家可能会有各种问题:“这些我都明白,可是既要专门去买张软盘,又要重启电脑,实在太麻烦了,难道就没有什么更简单的方法吗?”、“我家的电脑根本就没有软驱呀”、“我的电脑没有什么重启按钮,也没有关电源的开关,一旦启动了这个奇怪的操作系统,就没法终止啦”。其实这些问题笔者已经考虑到了,所以特意准备了一个模拟器。我们有了这个模拟器,不用软盘,也不用终止Windows,就可以确认所开发的操作系统启动以后的动作,很方便呢。

使用模拟器的方法也非常简单,我们只需要在用!cons_nt.bat(或者是!cons_9x.bat)打开的命令行窗口中输入“run”指令就可以了。然后一个名叫QEMU的非常优秀的免费PC模拟器就会自动运行。QEMU不是笔者开发的,它是由国外的一些天才们开发出来的。感谢他们!

“我按照你说的一步一步地做了一遍,可是不行呀!怎么回事呢?”会遇到这种情况的人肯定是个非常认真的人,可能真的完全按照上面步骤用二进制编辑器自己做了一个helloos.img文件出来。出现这种问题,肯定是因为文件中有输入错误的地方,虽然笔者不知道具体错在哪儿,不过建议最好检查一下000000到000090,以及0001F0前后的数据。如果还是不行的话,那就干脆用附带光盘中笔者做的helloos.img好了。

可能有些人嫌麻烦,懒得自己输入,上来就直接使用光盘里的helloos.img文件,这当然也没什么不可以;但笔者认为这种体验(一点一点地输入,再千辛万苦地纠错,最终功夫不负有心人取得成功)本身更难能可贵,建议大家最好还是亲自尝试一下。

■■■■■

就这样,我们没有去改造现成的操作系统,而是从零开始开发了一个,并让它运转了起来(当然,如果别人承认这是个操作系统的话)。这太了不起了!大家完全可以在朋友们面前炫耀一番了。仅学习了几个小时开发的一个初学者,就能从零开始做出一个操作系统,这本书不错吧(笑)?这次我们考虑到从键盘直接输入比较麻烦,所以就只让它显示了一条消息;如果能再多输入一些内容的话,那仅用这种方法就可以开发任意一个操作系统(当然最大只能到1440KB)。现在唯一的问题是,我们还不知道之前输入的那些“EB 4E 90 48 45……”到底是什么意思(而这也正是我们所面临的最大问题)。今天剩下的时间,以及以后的29天时间里,我们都会讲解这个问题。