发信人: love1974()
整理人: wenbobo(2002-08-13 10:45:44), 站内信件
|
【 以下文字转载自 VBVC 讨论区 】 【 原文由 <marquee>令狐冲</ 所发表 】 <2>屏幕图形的读入
从保存的图形文件读如,再在屏幕上显示,关键在于对定序输出寄存器的正确
控制,其断口地址为34CH和3C5H
定序寄存器
------------------|----------------------------------
序号(3C4H) | 定序寄存器(3C5H)
00 | 重置寄存器
01 | 时钟模式
02 | 彩色页面写允许
03 | 字符发生器选择
04 | 存储模式
-----------------------------------------------------
EGA/VGA的定序寄存器包括六个寄存器.定序器地址寄存器的端口为3C4H.
定序器数据寄存器,端口为3C5H.给3C4端口赋予不同的值可以选择不同的定序
数据寄存器作为当前活动寄存器,如赋予端口3C4H的值为02时,就选择了位面
寄存器,位面寄存器的D3,D2,D1,DO分别置位时,就可以选择不同的显示页面来写
实现步骤:
1>.打开文件读
2>.启动页面允许寄存器
outportb(0x34C,2);
3>.从0页面开始写,每次从地址A0000:0000写入,直到4个页面写完.
Read_to_screen()函数
功能:将存放在文件中的屏幕图形放到屏幕上.
入口:x1,y1: 保存屏幕时左上脚坐标
x2,y2: 保存屏幕时右下脚坐标
fp: 保存的文件
出口:void
void Read_to_screen(int x1,int y1,int x2,int y2,FILE *fp)
{
int x,y,k,lx;
char far *buf0,*buf1;
buf0=(char far *)(0xA0000000L);
lx=(x2-x1)/2;
buf1=(char far *)malloc(lx);
outportb(0x34C,2); //启动页面写允许寄存器
for(y=y1;y<y2;y++)
{
fread(buf1,lx,1.fp);
for(k=0;k<4;k++)
{
outportb(0x3C5,(1<<k));//写4个页面
for(x=x1/8;x<x2/8,x++)
*(buf0+80*y+x)=*(buf1+lx*k/4+x);
}
}
free(buf1);
}
-- 太太平平,不是我活着的目标;不温不火,不是我的性格。是云就该下雨,是火就该发光。
那罐星砂送給你
╭╯ ╰╮╭╯╰╮ 願你心想事成
║▃▃▃║║☆★║ 這罐海水留給我
║███║║☆★║ 裝滿我的思念
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.124] -- ※ 转载:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.124]
|
|