转载

Foxdisk12 – 图形显示1

请保留-> 【原文: 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,到网上去找即可,免费的。

Foxdisk12 – 图形显示1
图1 DosBOX

为了访问硬盘上的文件,需要在DosBox下挂载一个分区。打开配置文件dosbox-0.74-2 Options,在最后一行添加:mount C D:/_develop/ASM_DOS,也即将硬盘上的文件夹ASM_DOS挂载为DosBox下的C盘。

2 编译软件

我使用的是Borland C++3.1。它可以编译C++和C程序,以及汇编程序,非常方便。

Foxdisk12 – 图形显示1
图2 Borland C++3.1

这是一款很古老而经典的编译器,当年打得微软溃不成军。Borland公司已经不存在了,这款编译器在网上也能找到。为了方便后续的说明,我把软件放到百度云上了,地址在文末。这是款商用软件,虽然应该不会有人找我麻烦,还是特别说明一下:仅用来研究学习使用。

我们不需要安装编译器,直接在/ASM_DOS下将BORLANDC.rar解压即可。编译的时候,使用批处理指定编译目录,后面会有相应的说明。

3 实验

Foxdisk运行的时候,只能调用BIOS中断。为了方便调试,我大部分的代码都是用汇编写的。

拷贝一个之前编写的图形显示程序pixel.asm,到ASM_DOS下的指定目录下,如图3。

Foxdisk12 – 图形显示1
图3 测试程序pixel.asm

打开DosBox,进入C盘,打开目录LUOTEST。首先运行批处理setpath.bat:

PATH=C:/BORLANDC/BIN;

它将编译软件的目录添加到PATH中了(因为不用考虑其他的软件使用,直接就赋值了)。

然后依次运行命令Tasm.exe PIXEL.asm和Tlink PIXEL.obj,编译成功。

输入PIXEL.exe,查看运行效果:

Foxdisk12 – 图形显示1
图4 pixel.exe运行效果

Pixel.asm中没有使用任何技巧,只是按照图像编程的要求,调用了BIOS中断(int 10h)。代码逻辑比较简单,将屏幕初始化101h模式(640×480)。然后调用画点函数,将屏幕填满蓝色,再用黄色画一个矩形,用白色画一段线段。

这个过程很有意思。实际上,市面上有不少书籍都介绍了如何从头到尾写操作系统,图形部分的编写和这个大同小异。当然,如果要实现完整的图形库和架构,还是有大量的工作需要完成(看微软GDI驱动的大小就知道了)。

不过,这是一个很好的开端。

百度云链接:https://pan.baidu.com/s/1XR8-wJw1PBrlnvXbWijIiA
提取码:zngr
Borland编译器在/Tools下
本节例子在/Foxdisk12下

7 total views, 7 views today

原文  http://yiiyee.cn/blog/2019/11/18/foxdisk12-图形显示1/
正文到此结束
Loading...