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

7 确认操作系统的执行情况

怎么让它表现呢?如果还只是输出一条信息的话就太没意思了。考虑到将来我们肯定要做成Windows那样的画面,所以这次就来切换一下画面模式。我们这次做成的文件,就是projects/03_day下的harib00g。

本次的haribote.nas

; haribote-os
; TAB=4

        ORG      0xc200           ; 这个程序将要被装载到内存的什么地方呢?

        MOV      AL,0x13          ; VGA显卡,320x200x8位彩色
        MOV      AH,0x00
        INT      0x10
fin:
        HLT
        JMP      fin

设定AH=0x00后,调用显卡BIOS的函数,这样就可以切换显示模式了。我们还可以在支持网页(AT)BIOS里看看。

设置显卡模式(video mode)

❏ AH=0x00;

❏ AL=模式:(省略了一些不重要的画面模式)

0x03:16色字符模式,80× 25

0x12:VGA图形模式,640× 480× 4位彩色模式,独特的4面存储模式

0x13:VGA图形模式,320× 200× 8位彩色模式,调色板模式

0x6a:扩展VGA图形模式,800× 600× 4位彩色模式,独特的4面存储模式

(有的显卡不支持这个模式)

❏ 返回值:无

参照以上说明,我们暂且选择0x13画面模式,因为8位彩色模式可以使用256种颜色,这一点看来不错。

如果画面模式切换正常,画面应该会变为一片漆黑。也就是说,因为可以看到画面的变化,所以能判断程序是否运行正常。由于变成了图形模式,因此光标会消失。

另外,这次还顺便修改了其他一些地方。首先将ipl.nas的文件名变成了ipl10.nas。这是为了提醒大家这个程序只能读入10个柱面。另外,想要把磁盘装载内容的结束地址告诉给haribote.sys,所以我们在“JMP 0xc200”之前,加入了一行命令,将CYLS的值写到内存地址0x0ff0中。这样启动区程序就算完成了。

赶紧“make run”看看。

哦哦,画面一片漆黑。运行顺利!真是太好了!

有一点要先说明一下,现在我们把启动区里与haribote.sys没有关系的前后部分也读了进来,所以启动时很慢。可能会有人觉得这样做很浪费时间,但对于我们的纸娃娃操作系统来说,装载启动区这些部分,以后会起大作用的,所以暂时先忍耐一下吧。