发信人: love1974()
整理人: smallhors(1999-07-25 13:05:05), 站内信件
|
【 以下文字转载自 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://club.netease.com.[FROM: 202.96.190.124] -- ※ 转载:.网易虚拟社区 http://club.netease.com.[FROM: 202.96.190.124]
|
|