From: walter DOT koebler AT franken2000 DOT de (Walter Köbler) Newsgroups: comp.os.msdos.djgpp Subject: Parameters of common graphic-cards? Date: Wed, 22 Jul 1998 13:21:07 GMT Organization: Nacamar Data Communications Message-ID: <35b5e355.6207811@news.astat.de> NNTP-Posting-Host: dialin-146.astat.de Lines: 65 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Hi Programming a trident SVGA-graphic-card is very simple. Example-resolution: 1024 x 768, 256 palette-registers, each contanining one of 63*63*63 possible colors. Operating system MS-DOS (here for example GNU/DJGPP/C++): #define COLUMNS 1024 #define ROWS 768 long VGA_START = 0xa0000; typedef U_C unsigned char; const U_C graphic_mode = 0x62, text_modus = 3; int read_write_port = 0x3c5;//int: 4 bytes int write_palette = 0x3c8; int read_palette = 0x3c7; int rgb_part = 0x3c9; U_C red,green,blue; U_C bank[] ={0x2,0x3,0x0,0x1,0x6,0x7,0x4,0x5,0xa,0xb,0x8,0x9}; //bank: 12*64 rows = 768 vertical monitor-lines(top->down) U_C *svga_array = new (U_C) [COLUMNS*ROWS];//each Byte is // the number 0...<=255 of a palette void SetVideoMode(U_C video_mode) { union REGS regs; regs.h.ah = 0; regs.h.al = video_mode; int86 (0x10, ®s, ®s); }//get_plot as simplified special-case of a shadow-array(svga_array): //y*1024 == y<<10; U_C get_plot(int &x, int &y, COLORS color) //upper-left:x=y=0, simple convertable to a bitmap-array { U_C C; outportb(read_write_port,bank[y>>6]); dosmemget(VGA_START + ((y%64)<<10)+x,1,&C);//get C-pixel dosmemput(&color,1,VGA_START + ((y%64)<<10)+x);//put color-pixel return C; } //256 paletten-register, each containing a red/green/blue-triple of //3x6 - bit color-bytes. 0<=red,green,blue<=62 . Scheme: for(int palette=0;palette<=255;palette++) //svga_array[y*COLUMNS+x] == palette, just for fun //all 256 registers get the same color: { outportb(write_palette,palette); outportb(rgb_part,red); outportb(rgb_part,green); outportb(rbg_part,blue); }//read paletten-register-rgb-contents: for(int palette=0;palette<=255;palette++) { outportb(read_palette,palette); red =inportb(rgb_part); green=inportb(rgb_part); blue =inportb(rgb_part); } This will be as simple with all graphic adapters from 1024 x 768 resolution upward - no book necessary. I ask you for the measly few values respectively for their equivalences: read/write_port,read/write_palette,rgb_part,bank[],graphic_mode for most common graphic adapters from 1024x768 to 1600x1200 pixel and from 256 to 16.700.000 colors. Many thanks greetings W.K. Also to my eMail: walter DOT koebler AT franken2000 DOT de