主题:關於VGA 13 X-MODE 問一些有經驗的老手
dear 老手
問題1
我所要提的問題是如何任意更改解析度下面是320*400程式碼但我不曉得如何更改成我要的解析度如360*480會把256k視訊記憶体用的差不多,像那個副程式320*400書上也沒一一註解說明每一行port位址是更改那些解析度值,請高手指點一下或老手謝謝或者那些已有函式庫可提供給我先謝謝各位
副程式
void Set320By400Mode(void)
{
unsigned char val;
unsigned i;
_AX=0x0013;
__int__(0x10);
outportb(0x3c4,4);
outportb(0x3c5,((inportb(0x3c5) & (8^0xFF))) | 0x04); '問題那些是更改成我要的解析度值呢??
outportb(0x3ce,5);
outportb(0x3cf,inportb(0x3cf) & (0x10^0xFF)); '問題那些是更改成我要的解析度值呢??
outportb(0x3ce,6);
outportb(0x3cf,inportb(0x3cf) & (0x02^0xFF)); '問題那些是更改成我要的解析度值呢??
outportb(0x3c4,0x0f02);
for(i=0;i<65535;i++)
*((char far*)0xA0000000+i)=0;
outportb(0x3d4,0x09);
outportb(0x3d5,inportb(0x3d5) & (0x1f^0xFF)); '問題那些是更改成我要的解析度值呢??
outportb(0x3d4,0x14);
outportb(0x3d5,inportb(0x3d5) & (0x40^0xFF)); '問題那些是更改成我要的解析度值呢??
outportb(0x3d4,0x17);
outportb(0x3d5,inportb(0x3d5) | 0x40); '問題那些是更改成我要的解析度值呢??
}
void SetDisplayMode(char screenmode)
{
_AX=0x0000+screenmode;
__int__(0x10);
}
主程式碼
#include <io.h>
#include <dos.h>
#include <fcntl.h>
#include <string.h>
#include <alloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
char far *Videosegment=(char far *)0xa0000000;
main()
{
unsigned int i,j,x,y,k,r;
unsigned address,line;
clrscr();
Set320By400Mode();
for(y=0;y<400;y++)
{
line=y*80;
for(x=0;x<320;x++)
{
outportb(0x3c4,2);
outportb(0x3c5,1 << (x & 0x03) );
*(Videosegment+line+(x >> 2))=x; '這是把資料丟入指定視訊位址
}
}
getch();
SetDisplayMode(0x3);
return(0);
}
問題1
我所要提的問題是如何任意更改解析度下面是320*400程式碼但我不曉得如何更改成我要的解析度如360*480會把256k視訊記憶体用的差不多,像那個副程式320*400書上也沒一一註解說明每一行port位址是更改那些解析度值,請高手指點一下或老手謝謝或者那些已有函式庫可提供給我先謝謝各位
副程式
void Set320By400Mode(void)
{
unsigned char val;
unsigned i;
_AX=0x0013;
__int__(0x10);
outportb(0x3c4,4);
outportb(0x3c5,((inportb(0x3c5) & (8^0xFF))) | 0x04); '問題那些是更改成我要的解析度值呢??
outportb(0x3ce,5);
outportb(0x3cf,inportb(0x3cf) & (0x10^0xFF)); '問題那些是更改成我要的解析度值呢??
outportb(0x3ce,6);
outportb(0x3cf,inportb(0x3cf) & (0x02^0xFF)); '問題那些是更改成我要的解析度值呢??
outportb(0x3c4,0x0f02);
for(i=0;i<65535;i++)
*((char far*)0xA0000000+i)=0;
outportb(0x3d4,0x09);
outportb(0x3d5,inportb(0x3d5) & (0x1f^0xFF)); '問題那些是更改成我要的解析度值呢??
outportb(0x3d4,0x14);
outportb(0x3d5,inportb(0x3d5) & (0x40^0xFF)); '問題那些是更改成我要的解析度值呢??
outportb(0x3d4,0x17);
outportb(0x3d5,inportb(0x3d5) | 0x40); '問題那些是更改成我要的解析度值呢??
}
void SetDisplayMode(char screenmode)
{
_AX=0x0000+screenmode;
__int__(0x10);
}
主程式碼
#include <io.h>
#include <dos.h>
#include <fcntl.h>
#include <string.h>
#include <alloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
char far *Videosegment=(char far *)0xa0000000;
main()
{
unsigned int i,j,x,y,k,r;
unsigned address,line;
clrscr();
Set320By400Mode();
for(y=0;y<400;y++)
{
line=y*80;
for(x=0;x<320;x++)
{
outportb(0x3c4,2);
outportb(0x3c5,1 << (x & 0x03) );
*(Videosegment+line+(x >> 2))=x; '這是把資料丟入指定視訊位址
}
}
getch();
SetDisplayMode(0x3);
return(0);
}