请保留-> 【原文: http://yiiyee.cn/blog/author/luobing/】
最近在写UEFI博客的时候,遇到些阻碍。我想移植一款开源的GUI到UEFI下,目前还没有找到。不过,博客开天窗这么久,总是不像话,所以回来继续写Foxdisk的博客了。
Foxdisk的博客更新较慢,主要是觉得这些都是Legacy BIOS下的东西,可能想了解的人不多,我也是随性而写,并不制定计划。
使用Foxdisk3的代码,很难演示如何进行图形编程。因此,我还是使用平常调试用的程序框架来说明。所有的代码,都是在DOS下实验通过,然后再移植到Foxdisk3的代码中去的。
特别说明,Foxdisk3只针对Legacy BIOS,所有访问硬盘、图形显示、键盘访问以及时钟中断的构建,都是在Legacy BIOS的架构下进行的。如想了解UEFI BIOS下如何编写类似代码,请移步我的另一博客-《UFEI开发探索系列》
1 编译和运行环境
我以前都是在虚拟机下调试,使用的是VirtualPC2.5以及Bochs,偶尔也用过Virtual BOX和Vmware构建。每种环境都各有优缺点,比如Bochs的调试环境非常完备,不过显示的时候颜色有时候会很奇怪。
如果只是演示图形编程的话,我觉得DosBox比较好:启动快、DOS环境模拟得很好。我使用的是DosBox v0.74-2,到网上去找即可,免费的。
为了访问硬盘上的文件,需要在DosBox下挂载一个分区。打开配置文件dosbox-0.74-2 Options,在最后一行添加:mount C D:\_develop\ASM_DOS,也即将硬盘上的文件夹ASM_DOS挂载为DosBox下的C盘。
2 编译软件
我使用的是Borland C++3.1。它可以编译C++和C程序,以及汇编程序,非常方便。
这是一款很古老而经典的编译器,当年打得微软溃不成军。Borland公司已经不存在了,这款编译器在网上也能找到。为了方便后续的说明,我把软件放到百度云上了,地址在文末。这是款商用软件,虽然应该不会有人找我麻烦,还是特别说明一下:仅用来研究学习使用。
我们不需要安装编译器,直接在/ASM_DOS下将BORLANDC.rar解压即可。编译的时候,使用批处理指定编译目录,后面会有相应的说明。
3 实验
Foxdisk运行的时候,只能调用BIOS中断。为了方便调试,我大部分的代码都是用汇编写的。
拷贝一个之前编写的图形显示程序pixel.asm,到ASM_DOS下的指定目录下,如图3。
打开DosBox,进入C盘,打开目录LUOTEST。首先运行批处理setpath.bat:
PATH=C:\BORLANDC\BIN;
它将编译软件的目录添加到PATH中了(因为不用考虑其他的软件使用,直接就赋值了)。
然后依次运行命令Tasm.exe PIXEL.asm和Tlink PIXEL.obj,编译成功。
输入PIXEL.exe,查看运行效果:
Pixel.asm中没有使用任何技巧,只是按照图像编程的要求,调用了BIOS中断(int 10h)。代码逻辑比较简单,将屏幕初始化101h模式(640×480)。然后调用画点函数,将屏幕填满蓝色,再用黄色画一个矩形,用白色画一段线段。
这个过程很有意思。实际上,市面上有不少书籍都介绍了如何从头到尾写操作系统,图形部分的编写和这个大同小异。当然,如果要实现完整的图形库和架构,还是有大量的工作需要完成(看微软GDI驱动的大小就知道了)。
不过,这是一个很好的开端。
百度云链接:https://pan.baidu.com/s/1XR8-wJw1PBrlnvXbWijIiA
提取码:zngr
Borland编译器在/Tools下
本节例子在/Foxdisk12下
3,293 total views, 2 views today