非标准VGA模式(VESA)下的图形编程问题
<P>在117H模式(可参看最后边提供的附录)下编写了一个图形初始化并画一条斜线的小程序,如下所示:</P><DIV class=htmlcode>
<P>#include<dos.h><BR><BR>unsigned char far *screen=(unsigned char far *)0xA0000000L; /*显存首地址*/</P>
<P>int VesaOn(int mode)/*初始化117H模式*/<BR>{<BR> union REGS r;<BR> r.x.ax=0x4f02;<BR> r.x.bx=mode;<BR> int86(0x10,&r,&r);<BR> return(r.h.ah);<BR>}</P>
<P>void VesaOff(void)/*返回到文本模式*/<BR>{ union REGS r;<BR> r.x.ax=0x0003;<BR> int86(0x10,&r,&r);<BR>}</P>
<P>void Put_Pixel(int x,int y,int color)/*画点*/<BR>{<BR> screen[1024*y+x]=color;<BR>}</P>
<P>main()<BR>{ int i,j,k;<BR> k=VesaOn(0x117);<BR> for(i=0;i<768;i++)/*画一条135度的斜线*/<BR> Put_Pixel(i,i,5);<BR> getch();<BR> VesaOff();<BR> if(k==0)printf("OK");<BR>}<BR></P></DIV>
<P>但实际显示出来的是多条平行的斜线,而且都集中在屏幕上部!不知是什么问题呢?<BR><BR>附录:<BR><BR>1。VESA 标准定义的图像显示模式号(非标准VGA模式) <BR> 16色 256色 32768色 65536色 16777216色<BR>320×200 10DH 10EH 10FH<BR>640×400 100H <BR>640×800 101H 110H 111H 112H<BR>800×600 102H 103H 113H 114H 115H<BR>1024×768 104H 105H 116H 117H 118H<BR>1280×1024 106H 107H 119H 11AH <BR>1600×1200 120H </P>
<P>2。显示模式类型的识别<BR>彩色数 16 256 32768 65536 16777216<BR>每像素位数 4 8 15 16 24(32)<BR>位平面数 4 1 1 1 1</P>
<P>3。VESA BIOS只是标准VGA BIOS的扩充,也是通过中断INT 10H来实现。其功能号为4FH,VESA标准各功能则是它的子功能。调用方法如下:<BR>AH=4FH AL=VESA的子功能号(0~7)<BR>其它入口参数按需要输入BX、CX、DX、ES、DI等寄存器中。<BR>每一功能的调用返回信息都放在AX中,格式为:<BR>AL=4FH则属支持此功能,否则不支持;<BR>AH=0则功能调用成功,否则失败。<BR>输出参数放在BX、CX、DX寄存器中。<BR></P>
页:
[1]
