SVGA的模式设置后无法写屏
我编了一个通用的写象素的函数,以下程序是安照记忆中编写的有可能有错误,但源程序没有太大的问题!#include "stdio.h"
unsigned page=0; /*页 XM为模式的水平分辨率 */
void setpixe(unsigned x,unsigned y,unsigned color,unsigned XM)
{
asm push es;
_AX=y;
_DX=XM;
_CX=color;
asm mul dx;
asm add ax,x;/*计算偏移量*/
asm adc dx,0000;/*计算页*/
asm mov si,ax;/*偏移量给SI*/
asm mov ax,0a000h;/*段->ES*/
asm mov es,ax;
asm cmp dx,page;
asm je next;
asm mov page,dx;
asm mov ax,4f05h;
asm xor bx,bx;
asm int 10h;/*换页*/
next:;
asm mov es:[si],cl;/*写*/
asm pop es;
}
/*设置模式*/
int InitSvgaMode(unsigned Mode)
{
_BX=Mode;
asm mov ax,4f02h;
asm int 10h;
return _AX;
}
/*设置为3号文本模式*/
void Exit()
{
asm mov ax,13h;
asm int 10h;
}
void main()
{
unsigned i=0;*给DI赋值 其实 for(i=0;i<10;i++)里的i一是DI寄存器*/
InitSvgaMode(x120);
getchar();/* 等显示器切换模式好后再写屏*/
for(i=0;i<1600;i++)setpixe(i,0,0x4,1600);
for(i=0;i<1200;i++)setpixe(0,i,0x4,1600);
getchar();/*查看结果*/
Exit();
}
但这个程序从来没显示过0x120模式我不知道什么问题,但在100-101模式则有用