电脑技术吧

会员投稿 会员登录 会员注册 网站公告:
搜索: 您现在的位置主页 > C语言 亚博ios下载地址 > C语言基础 > 正文

TurboC高级编程之进阶篇【5】:加入XM缓冲的640*480*256绘

作者:admin    文章来源:互联网 电脑技术吧     点击数:    更新时间:2011-09-27
收藏】 【挑错】 【推荐】 【打印

注意:运行前请将OPTION菜单里LINKER的GRAPHICS LIBRARY选项置成OFF 织梦内容管理系统

/*--------------------------------------------------------
640*480*256带缓冲视频模式。
作者:李红伟
网址:http://huaigong.myrice.com
QQ:86608635
(有问题请访问我的主页)
--------------------------------------------------------*/
#include

void far (*FunctionXMS)() = 0L; /* XMS服务程序入口地址 */
int LargestXMS = 0; /* 最大自由扩充内存块尺寸 */
int AmountOfXMS = 0; /* 自由扩充内存总量 */
int ErrorNo = 0;

/*- 通过XMS规范使用扩充内存所用的数据结构和全局变量的定义 -*/
struct /* 扩充内存移动结构定义 */
{
unsigned long len; /* 需传输的数据字节数(32位) */
unsigned sour_han; /* 源数据块句柄 */
unsigned long sour_off; /* 源偏移量(32位) */
unsigned dest_han; /* 目标数据块句柄 */
unsigned long dest_off; /* 目标偏移量(32位) */
} Emb;

#define MAXX 640
#define MAXY 480

#define SUCCESS 1
#define FAIL 0

static float asp_ratio=1;
static int _vram=0;

void SizeofXMS(void)
{

本文来自织梦


if(FunctionXMS)
{
_AH = 8;
(*FunctionXMS)(); /* 调用XMS服务程序 */
LargestXMS = _AX;
AmountOfXMS = _DX;
ErrorNo = _BL;
}
}

int GetXMS(int size)
{
int handle = 0;
if(FunctionXMS)
{
_DX = size; /* 扩充内存块大小,单位为K字节 */
_AH = 0x09;
(*FunctionXMS)(); /* 调用XMS服务程序 */
if(_AX)
{
handle = _DX;
SizeofXMS();
}
else
ErrorNo = _BL;
}
return handle;
}

void FreeXMS(int handle)
{
if(FunctionXMS)
{
/*-- 释放扩充内存块 ---------------*/
_DX = handle;
_AH = 0x0a;
(*FunctionXMS)();
/*-- 修改扩充内存块的长度 ---------*/
if(_AX)
SizeofXMS();
else
ErrorNo = _BL;
}
}

void MoveDataXMS(void)
{
if(FunctionXMS)
{
_DS = FP_SEG(&Emb);
_SI = FP_OFF(&Emb);
_AH = 0x0b;
(*FunctionXMS)();
if(_AX)
ErrorNo = 0;
else
ErrorNo = _BL;
}
}

static void SelectPage(int page)
/*换页函数*/ 内容来自dedecms
{
union REGS r;
r.x.ax=0x4f05;
r.x.bx=0;
r.x.dx=page;
int86(0x10,&r,&r);
}

int Init256(void)
{
union REGS r;

/*-- 检查XMS驱动程序是否已经安装 ------*/
_AX = 0x4300;
geninterrupt(0x2f);
if(_AL!=0x80) return FAIL;
/*-- 取得XMS服务程序的入口地址 ----*/
_AX = 0x4310;
geninterrupt(0x2f);
FunctionXMS = MK_FP(_ES, 本文来自织梦

, $False$

_BX);
/*-- 最大自由扩充内存的大小 -------*/
SizeofXMS();
_vram=GetXMS(317);
if(!_vram) return FAIL;

r.x.ax=0x4f02;
r.x.bx=0x101;
int86(0x10,&r,&r);
return SUCCESS;
}

void Exit256(void)
{
union REGS r;
r.h.ah=0;
r.h.al=3;
int86(0x10,&r,&r);
if(_vram) FreeXMS(_vram);
}

void PutPixel(int x,int y,int color)
{
register unsigned long v_off;
v_off=y;
v_off*=MAXX;

发表评论 请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名:密码:新注册匿名
评论总数: [ 查看全部 ] 网友评论
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 在线帮助