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没有关系的前后部分也读了进来,所以启动时很慢。可能会有人觉得这样做很浪费时间,但对于我们的纸娃娃操作系统来说,装载启动区这些部分,以后会起大作用的,所以暂时先忍耐一下吧。