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

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

本次的haribote.nas

  1. ; haribote-os
  2. ; TAB=4
  3. ORG 0xc200 ; 这个程序将要被装载到内存的什么地方呢?
  4. MOV AL,0x13 ; VGA显卡,320x200x8位彩色
  5. MOV AH,0x00
  6. INT 0x10
  7. fin:
  8. HLT
  9. 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中。这样启动区程序就算完成了。

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

成功地出现全黑画面

赶紧“make run”看看。

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

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