#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);}
