网站首页  |  论文  |  撰写  |  发表  |  汇款  |  期刊  |  订单  |  联系  |  招聘
 
·陈杰人:北京网络裸聊案的司法教
·吴官正抵达哈瓦那开始访问古巴
·杨涛:校园生死协议践踏法治精神
·熊光楷在日本发表演讲:永远不搞
·医生报告称吸烟者胃肿瘤发病率高
·王小峰:国安争第一?虚张声势还
·国亲两党联手成功阻止“排马条款
·中国巴基斯坦发表联合声明扩大教
·莊子·齊物論》窺管
邮箱:
 
  lunwencentre@126.com
电话: 15820098670
QQ: 438538614
    626506084
·《 科学XX 》杂志

 省级教育 / 月刊

·《XX和XX医学杂志》

 省级医学类 / 月刊

·《 电影XX 》

 国家级核心 / 半月刊

·《 交通 ×× 》

 省级建筑类 / 月刊

首页>论文>自然>正文

可移植的256色图形用户界面的设计

pseg equ [bp+14]
mov reserved,ds
mov ds,pseg
mov si,offs ;DS:SI图像数据所在源地址
mov ax,0a000h;显存段址
mov es,ax ;ES:DI显存目的地址
mov ax,y
push ds
mov ds,reserved
mul word ptr DGROUP:-vga-width
pop ds
add ax,x
adc dx,0
mov di,ax ;DI=-vga-width*y+x
mov ah,dl ;进位部分(DL)=页号
call dword ptr cs:-PageSelect
mov cx, num ;本行要传送字节数
mov bx, cx
add bx,di ;检测传送是否在一个页内
jnc Dump-In-One-Page
sub cx,bx ;CX=本页字节数,BX=下页字节数
shr cx,1 ;CX/2=字数
rep movsw ;本页内的传送
adc cx,0
rep movsb ;处理可能的奇数字节数
inc ah ;调整页号
call dword ptr cs:-PageSelect
mov cx,bx ;新页内要写的字节数
jcxz Dump-Done
Dump-In-One-Page:
shr cx,1 ;CX/2=字数
rep movsw ;图像传送
adc cx,0
rep movsb ;处理可能的奇数字节数
Dump-Done:
pop di
pop si
pop es
pop ds
mov sp,bp
pop bp
ret
LineDump endp
二、表格驱动的基本思想
根据上面的分析,用以驱动显示系统的表格,至少应当包含下列项目:
(1)实际显示模式:vga-mode
(2)水平分辨率:vga-width
(3)垂直分辨率:vga-depth
(4)页选择例程的入口地址:PageSelect
(5)当前显示方式所使用的最大页号:vga-pages
这个表格由图形初始化例程来填写。图形初始化例程接收的显示模式是统一的模式号,这样可以撇开具体的设备,如InitVGA(TVGA800×600)。该例程调用显示设备检测程序DetectVGA来判断显示器的类型,从而填写表格中的各栏目,并初始化图形系统为所需的图形方式。所有图形算法都要查此表。
除了用上述方法来实现兼容外,视频电子学标准协会(VESA)为我们提供了另一种方法。
VESA
提供了一组附加的BIOS功能,这组功能以标准的方式访问SuperVGA扩充的模式。VESA的附加功能都是通过BIOS中断10H的4FH功能来实现的。VESA的子功能01能返回非常有用的SuperVGA模式信息,包括分页例程的地址。
因此,程序员可以按照VESA的标准来编写图形系统,这样的程序可以在所有支持VESA的显示器上运行。由于VESA包括了世界上的主要VGA供应商,写出来的程序可移植性是很好的。但是,其效率却可能是最低的。所以最好采用一种折衷的办法,对于熟悉的产品,可以不用VESA的功能,对于不熟悉(资料不全)或检测不出来的显示器尝试用VESA提供的手段来编程,当然要检测显示设备是否支持VESA。
有时出于某种考虑,不希望支持所有显示设备的代码集中在一个程序中,可以为每个显示设备分别提供驱动模块,主程序根据检测的结果选择一个合适的模块加载。Borland的C++就是这样,它有一套BGI驱动程序,各驱动程序提供统一的图形函数接口。笔者在实际工作中,为每一种显示设备编写了一个256色的BGI格式的驱动程序,这样,在编写图形系统时,再也没有必要考虑用户的实际显示设备了。
三、范 例
本文附有两个图形显示的例子。ShowGif能显示16/256色GIF格式图像,能以任何256色模式启动,支持多种显示器。图像可以漫游,并可随时通过按键切换显示方式。Main则是一个BGI驱动的鼠标/键盘控制的256色汉字图形菜单。它自己会挑选一个合适的BGI,也可以从命令行指定一个BGI(比如指定VESA256给TVGA显示器)。
限于篇幅,这里仅给出有关的数据结构和部分函数的说明(程序2)。然后给出一个初始化显
示系统的C语言片断(程序3)。
程序2(TVGA256.H):
/* 统一的模式集 */
enum TVGA-MODE
TVGA320x200=0,
TVGA640x400=1,
TVGA640x480=2,
TVGA800x600=3,
TVGA1024x768=4,
;
void TVGA256-driver(void);
void PVGA256-driver(void);
void AVGA256-driver(void);
...
void VESA256-driver(void);
extern int far-Cdecl TVGA256-driver-far[];
extern int far-Cdecl PVGA256-driver-far[];
extern int far-Cdecl AVGA256-driver-far[];
...
extern int far-Cdecl VESA256-driver-far[];

本新闻共3页,当前在第2页  1  2  3  

起点中文网  中国论文联盟  红袖添香  黄金书屋  新浪读书  舞文弄墨-天涯社区  网易文化频道  腾讯读书  网文报社  文学酷站  且听风吟
关于我们 | 联系热线 | 广告刊登 | 友情链接 | 网站地图 | 帮助HELP
Copyright 2001-2005 《论文中心》--轻松生活,一起创造!
(中国老牌知名“论文网”)
《论文中心》提供专业的“文稿写作”、“论文发表”服务!四年成功运营,品质值得信赖!
主要业务:论文代写,论文发表,商业策划,资料翻译,书稿出版,文书撰写等!
本站坚持:优质、诚信、高效、安全四大原则!需要“发表论文、代写论文”请与本站联系!