- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
可移植的256色图形用户界面的设计毕业论.doc
可移植的256色图形用户界面的设计毕业论
摘要该文从软件可移植性的角度指出设计256色图形用户界面时应当注意的问题,在对SuperVGA产品进行分析的基础上,提出了基于表格驱动的程序设计思想,并给出了范例。
随着各种超级VGA的出现,同时具有高分辨率和丰富色彩的图形用户界面已经成为程序员和用户共同追求的目标。然而由于各制造商提供的VGA产品之间的差异,使得高分辨率256色图形界面的兼容性受到影响,常常会出现这样的情况:在一个显示系统下运行良好的程序,在另一种显示系统下变得面目全非,甚至根本不显示。这表明程序员对程序的可移植性重视不够,或对各种显示设备缺乏足够的了解。
软件的可移植性是指软件产品从一个硬件/软件环境转移到另一个硬件/软件环境的难易与繁简程度。它从软件对新环境的适应性这一方面,反映了软件的质量。为了提高软件的可移植性,应尽量使软件与具体的设备无关,即提高软件的设备独立性。对于256色图形界面而言,就是要使程序不依赖于某种特定的显示器。例如,程序员没有任何理由假定用户使用的是TVGA。为此,程序员必须提供显示卡的常规检测例程,并能根据检测的结果决定图形算法的具体实现。
提高软件设备独立性的方法有很多,表格驱动就是其中一种。所谓表格,就是根据需要设计的数据结构。表格中的数据由检测例程填写。表格中包含哪些栏目,应在对各制造商提供的SuperVGA产品足够了解的基础上取舍,栏目应体现各产品之间的差异。
一、SuperVGA编程综述
SuperVGA产品在体系结构上和标准的IBMVGA有所不同。但编程思想基本上是一样的,这些编程方法已有许多文章介绍,这里不再重复。
影响256色图形界面可移植性的主要障碍来自各制造商提供的VGA产品的下面几点差异。 (fp(intx,inty,intnum,charfar*ptr)
;参数:
;x,y-屏幕坐标
;num-本行的像素个数
;ptr-指向像素数据的远指针
LineDumpprocfar
pushbp
movbp,sp
subsp,2;odel
yequ[bp+8]
numequ[bp+10]
offsequ[bp+12]
psegequ[bp+14]
movreserved,ds
movds,pseg
movsi,offs;DS:SI图像数据所在源地址
movax,0a000h;显存段址
moves,ax;ES:DI显存目的地址
movax,y
pushds
movds,reserved
mulovdi,ax;DI=-vga-ovah,dl;进位部分(DL)=页号
calldovcx,num;本行要传送字节数
movbx,cx
addbx,di;检测传送是否在一个页内
jncDump-In-One
subcx,bx;CX=本页字节数,BX=下页字节数
shrcx,1;CX/2=字数
repmovsovsb;处理可能的奇数字节数
incah;调整页号
calldovcx,bx;新页内要写的字节数
jcxzDump-Done
Dump-In-One:
shrcx,1;CX/2=字数
repmovsovsb;处理可能的奇数字节数
Dump-Done:
popdi
popsi
popes
popds
movsp,bp ( lpendp
二、表格驱动的基本思想
根据上面的分析,用以驱动显示系统的表格,至少应当包含下列项目:
(1)实际显示模式:vga-mode
(2)水平分辨率:vga-TVGA-MODE
TVGA320x200=0,
TVGA640x400=1,
TVGA640x480=2,
TVGA800x600=3,
TVGA1024x768=4,
;
voidTVGA256-driver(void);
voidPVGA256-driver(void);
voidAVGA256-driver(void);
...
voidVESA256-driver(void);
externintfar-CdeclTVGA256-driver-far[];
externintfar-CdeclPVGA256-driver-far[];
externintfar-CdeclAVGA256-driver-far[];
...
externintfar-CdeclVESA256-driver-far[];
/*支持的VGA集合*/
enumVGAs{
UnKno1-TridentVGA2-ParadiseVGA
...
x-不能检测出的VGA,但支持VESA
返回值同时写入全局变量vga-type*/
externintVesaFound(void);
/*功能:检测VESABIOS的存在性
返回:0-不支持VESA;
其它-VESA版本号(0x0102即1.02版);
返回值同时写入全程变量v
文档评论(0)