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