VGA图形控制器编程实例

王朝other·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

VGA图形控制器编程实例

VGA图形控制器编程实例

#include "graphics.h"

#include "dos.h"

#include "stdio.h"

#define ENABLE 0x0F

#define INDEXREG 0x3CE

/*定义索引寄存器端口地址*/

#define VALREG 0x3CF

/*定义数据寄存器端口地址*/

#define VGABASE 0xA0000000L

#define WIDTH 80L

#define XMAX 639

#define YMAX 479

#define XMIX 0

#define YMIN 0

#define OUTINDEX(index,val) outport(INDEXREG,index);outport(VALREG,val);

char far *vgabase;

void putpoint(int x,int y,int color,int how);

main()

{

int gmode=VGAHI,gdriver=VGA;

int color=1,x,y;

initgraph(&gdriver,&gmode,"");

/*绘制各种颜色的直线段*/

for(y=1;y<=479;++y){

for(x=1;x<=639;++x)

putpoint(x,y,color,0);

color++;}

getch();

/*用异或方式擦除各条直线*/

color=1;

for(y=1;y<=479;++y){

for(x=1;x<=639;++x)

putpoint(x,y,color,0x18);

color++;}

getch();

closegraph();

}

/*利用图形控制寄存器功能写像素函数*/

void putpoint(int x,int y,int color,int how)

{

register unsigned char mask=0x80;

register char far *base;

unsigned dummy;

vgabase=(char far *)MK_FP(0xA000,0);

base=(char far *)(vgabase+((long)y*

WIDTH+(long)x/8L));

mask>>=x%8;

dummy=*base;

OUTINDEX(0,color);/*设定额色*/

OUTINDEX(1,ENABLE);/*启动位平面*/

OUTINDEX(3,how); /*确定逻辑操作方式*/

OUTINDEX(8,mask);/*设置屏蔽位*/

*base=1;

OUTINDEX(0,0);/*寄存器复位*/

OUTINDEX(1,0);

OUTINDEX(3,0);

OUTINDEX(8,0xff);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航