该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*使用640*480分辨率对显存直接写屏*/
#include
#include
setpointcolor(int x,int y,int color,unsigned char far *videobuffer)
{
int bits[4],i; /*bits数组用于保存color的二进制每一位的值*/
int temp,cbit;
for(i=0;i<=3;i++) /*保存color二进制位到数组*/
{
bits[i]=color%2;
color=color/2;
}
for(i=0;i<=3;i++) /*循环写4个位面的值*/
{
temp=0x00;
outportb(0x3ce,2); /*往端口3ce送2说明位面可写*/
outportb(0x3c5,i); /*选择可写位面,其他位面屏蔽*/
cbit=7-x%8; /*象素点位于字节的具体哪一位*/
if(cbit==0) /*象素点位于字节的第0位*/
{
if(bits[i]==0) /*位面i的对应字节位的值为0*/
{
temp=0x00;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp); /*将该字节的值与temp或运算*/
}
else if(bits[i]==1)
{
temp=0x01;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
} /*位面i对应字节值为1*/
}
else if(cbit==1) /*位于字节的第1位*/
{
if(bits[i]==0)
{
temp=0x00;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
else if(bits[i]==1)
{
temp=0x02;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
}
else if(cbit==2)
{
if(bits[i]==0)
{
temp=0x00;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
else if(bits[i]==1)
{
temp=0x04;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
}
else if(cbit==3)
{
if(bits[i]==0)
{
temp=0x00;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
else if(bits[i]==1)
{
temp=0x08;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
}
else if(cbit==4)
{
if(bits[i]==0)
{
temp=0x00;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
else if(bits[i]==1)
{
temp=0x10;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
}
else if(cbit==5)
{
if(bits[i]==0)
{
temp=0x00;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
else if(bits[i]==1)
{
temp=0x20;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
}
else if(cbit==6)
{
if(bits[i]==0)
{
temp=0x00;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
else if(bits[i]==1)
{
temp=0x40;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
}
else if(cbit==7)
{
if(bits[i]==0)
{
temp=0x00;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
else if(bits[i]==1)
{
temp=0x80;
videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);
}
}
}
}
/*进入12h图形模式*/
setvideomode()
{
union REGS inregs,outregs;
inregs.h.ah=0x00;
inregs.h.al=0x12;
int86(0x10,&inregs,&outregs);
}
main()
{
unsigned char far *videobuffer=(char far *)0xa0000000;
int i;
setvideomode();
for(i=0;i<=639;i++)
setpointcolor(i,200,15,videobuffer);
getch();
}