Mail Archives: djgpp/1997/01/12/13:19:34
This is a multi-part message in MIME format.
--------------49997AC41C48
Content-Type: text/plain; charset=us-ascii; name="Vesa.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="Vesa.c"
#include "vesa.h"
int xres, yres;
unsigned int addr; // Address of the linear frame buffer
unsigned char *video_pointer; // 8 bit pointer to the video memory
unsigned short *vid_point; // 16 bit pointer
VBE_ModeInfo *get_mode_info(int mode)
{
static VBE_ModeInfo modeinfo;
__dpmi_regs r;
r.x.ax = 0x4F01;
r.x.cx = mode;
r.x.es = __tb / 16;
r.x.di = 0;
__dpmi_int(0x10, &r);
if(r.h.ah) return 0;
dosmemget(__tb, sizeof(VBE_ModeInfo), &modeinfo);
return &modeinfo;
}
void VESA_INIT(int mode)
{
int bpp;
VBE_ModeInfo *modeinfo;
__dpmi_meminfo mem;
__dpmi_regs reg;
modeinfo=get_mode_info(mode);
xres=modeinfo->XResolution;
yres=modeinfo->YResolution;
bpp=modeinfo->BitsPerPixel/8;
mem.size=yres*xres*(bpp+1);
mem.address=modeinfo->PhysBasePtr;
__dpmi_physical_address_mapping(&mem);
addr=mem.address;
video_pointer = (unsigned char *)(addr + __djgpp_conventional_base);
vid_point = (unsigned short *)video_pointer;
printf("Vesa mode %x: %d x %d, %d colors\n", mode, xres, yres, (int)pow(2,bpp*8));
reg.x.ax=0x4f02;
reg.x.bx=0x4000+mode;
__dpmi_int(0x10,®);
}
void TEXT_MODE(unsigned char mode)
{
union REGS in;
union REGS out;
in.h.ah=0;
in.h.al=mode;
int86(0x10, &in, &out);
}
void putpixel(int x, int y, unsigned short c)
{
video_pointer[y*xres+x]=c; // same as *vid_point+y*xres+x = c
} // note: change to *video_pointer for 8bit modes
--------------49997AC41C48
Content-Type: text/plain; charset=us-ascii; name="Vesa.h"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="Vesa.h"
#include <stdio.h>
#include <stdlib.h>
#include <pc.h>
#include <dpmi.h>
#include <go32.h>
#include <dos.h>
#include <math.h>
#include <sys/nearptr.h>
#include <crt0.h>
#define PACKED __attribute__((packed))
#pragma pack(1)
typedef struct
{
short ModeAttributes PACKED; /* Mode attributes */
char WinAAttributes PACKED; /* Window A attributes */
char WinBAttributes PACKED; /* Window B attributes */
short WinGranularity PACKED; /* Window granularity in k */
short WinSize PACKED; /* Window size in k */
short WinASegment PACKED; /* Window A segment */
short WinBSegment PACKED; /* Window B segment */
void *WinFuncPtr PACKED; /* Pointer to window function */
short BytesPerScanLine PACKED; /* Bytes per scanline */
short XResolution PACKED; /* Horizontal resolution */
short YResolution PACKED; /* Vertical resolution */
char XCharSize PACKED; /* Character cell width */
char YCharSize PACKED; /* Character cell height */
char NumberOfPlanes PACKED; /* Number of memory planes */
char BitsPerPixel PACKED; /* Bits per pixel */
char NumberOfBanks PACKED; /* Number of CGA style banks */
char MemoryModel PACKED; /* Memory model type */
char BankSize PACKED; /* Size of CGA style banks */
char NumberOfImagePages PACKED; /* Number of images pages */
char res1 PACKED; /* Reserved */
char RedMaskSize PACKED; /* Size of direct color red mask */
char RedFieldPosition PACKED; /* Bit posn of lsb of red mask */
char GreenMaskSize PACKED; /* Size of direct color green mask */
char GreenFieldPosition PACKED; /* Bit posn of lsb of green mask */
char BlueMaskSize PACKED; /* Size of direct color blue mask */
char BlueFieldPosition PACKED; /* Bit posn of lsb of blue mask */
char RsvdMaskSize PACKED; /* Size of direct color res mask */
char RsvdFieldPosition PACKED; /* Bit posn of lsb of res mask */
char DirectColorModeInfo PACKED; /* Direct color mode attributes */
/* VESA 2.0 variables */
long PhysBasePtr; /* physical address for flat frame buffer */
long OffScreenMemOffset; /* pointer to start of off screen memory */
short OffScreenMemSize; /* amount of off screen memory in 1k units */
char res2[206] PACKED; /* Pad to 256 byte block size */
} VBE_ModeInfo;
#pragma pack(4)
VBE_ModeInfo *get_mode_info(int mode);
void VESA_INIT(int mode);
void TEXT_MODE(unsigned char mode);
void putpixel(int x, int y, unsigned short c);
--------------49997AC41C48
Content-Type: text/plain; charset=us-ascii; name="Main.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="Main.c"
#include "vesa.h"
main()
{
VESA_INIT(0x4101);
putpixel(100,100,255);
getch();
TEXT_MODE(0x3);
}
--------------49997AC41C48--
- Raw text -