X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fdos%2Fvbe.c;fp=src%2Fdos%2Fvbe.c;h=0000000000000000000000000000000000000000;hp=5b1afb51b179d61996ed2f9b728b6b7701b18534;hb=e306e700b04607927f659948590c2c2ed234157e;hpb=5f36e95f19ad8d7a5a1dd546ffeb54ce95d51749 diff --git a/src/dos/vbe.c b/src/dos/vbe.c deleted file mode 100644 index 5b1afb5..0000000 --- a/src/dos/vbe.c +++ /dev/null @@ -1,212 +0,0 @@ -#include -#include -#include -#include "vbe.h" -#include "cdpmi.h" -#include "inttypes.h" - -#ifdef __DJGPP__ -#include -#include - -#define SEG_ADDR(s) (((uint32_t)(s) << 4) - __djgpp_base_address) - -#define outp(p, v) outportb(p, v) -#else -#define SEG_ADDR(s) ((uint32_t)(s) << 4) -#endif - -/* VGA DAC registers used for palette setting in 8bpp modes */ -#define VGA_DAC_STATE 0x3c7 -#define VGA_DAC_ADDR_RD 0x3c7 -#define VGA_DAC_ADDR_WR 0x3c8 -#define VGA_DAC_DATA 0x3c9 - -#define MODE_LFB (1 << 14) - - -struct vbe_info *vbe_get_info(void) -{ - static uint16_t info_block_seg, info_block_selector; - static struct vbe_info *info; - struct dpmi_real_regs regs; - - if(!info) { - /* allocate 32 paragraphs (512 bytes) */ - info_block_seg = dpmi_alloc(32, &info_block_selector); - info = (struct vbe_info*)SEG_ADDR(info_block_seg); - } - - memcpy(info->sig, "VBE2", 4); - - memset(®s, 0, sizeof regs); - regs.es = info_block_seg; - regs.eax = 0x4f00; - - dpmi_real_int(0x10, ®s); - - return info; -} - -struct vbe_mode_info *vbe_get_mode_info(int mode) -{ - static uint16_t mode_info_seg, mode_info_selector; - static struct vbe_mode_info *mi; - struct dpmi_real_regs regs; - - if(!mi) { - /* allocate 16 paragraphs (256 bytes) */ - mode_info_seg = dpmi_alloc(16, &mode_info_selector); - mi = (struct vbe_mode_info*)SEG_ADDR(mode_info_seg); - } - - memset(®s, 0, sizeof regs); - regs.es = mode_info_seg; - regs.eax = 0x4f01; - regs.ecx = mode; - regs.es = mode_info_seg; - - dpmi_real_int(0x10, ®s); - if(regs.eax & 0xff00) { - return 0; - } - - return mi; -} - -int vbe_set_mode(int mode) -{ - struct dpmi_real_regs regs; - - memset(®s, 0, sizeof regs); - regs.eax = 0x4f02; - regs.ebx = mode; - dpmi_real_int(0x10, ®s); - - if(regs.eax == 0x100) { - return -1; - } - return 0; -} - -int vbe_set_palette_bits(int bits) -{ - struct dpmi_real_regs regs; - - memset(®s, 0, sizeof regs); - regs.eax = 0x4f08; - regs.ebx = bits << 8; /* bits in bh */ - dpmi_real_int(0x10, ®s); - - if(((regs.eax >> 8) & 0xff) == 3) { - return -1; - } - return regs.ebx >> 8 & 0xff; /* new color bits in bh */ -} - -/* TODO: implement palette setting through the VBE2 interface for - * non-VGA displays (actually don't). - */ -void vbe_set_palette(int idx, int *col, int count, int bits) -{ - int i, shift = 8 - bits; - - outp(VGA_DAC_ADDR_WR, idx); - - for(i=0; i>= shift; - g >>= shift; - b >>= shift; - } - - outp(VGA_DAC_DATA, r); - outp(VGA_DAC_DATA, g); - outp(VGA_DAC_DATA, b); - } -} - -int vbe_set_disp_start(int x, int y, int when) -{ - struct dpmi_real_regs regs; - - memset(®s, 0, sizeof regs); - regs.eax = 0x4f07; - regs.ebx = when & 0xffff; - regs.ecx = x & 0xffff; - regs.edx = y & 0xffff; - dpmi_real_int(0x10, ®s); - - if(regs.eax == 0x100) { - return -1; - } - return 0; -} - -int vbe_set_scanlen(int len, int mode) -{ - struct dpmi_real_regs regs; - - memset(®s, 0, sizeof regs); - regs.eax = 0x4f06; - regs.ebx = mode; - regs.ecx = len & 0xffff; - dpmi_real_int(0x10, ®s); - - if(regs.eax == 0x100) { - return -1; - } - return regs.ecx & 0xffff; -} - -int vbe_get_scanlen(int mode) -{ - int res; - struct dpmi_real_regs regs; - - memset(®s, 0, sizeof regs); - regs.eax = 0x4f06; - regs.ebx = 1; - dpmi_real_int(0x10, ®s); - - if(regs.eax == 0x100) { - return -1; - } - - if(mode == VBE_SCANLEN_PIXELS) { - res = regs.ecx & 0xffff; - } else { - res = regs.ebx & 0xffff; - } - return res; -} - - -static unsigned int get_mask(int sz, int pos) -{ - unsigned int i, mask = 0; - - for(i=0; ixres, mi->yres); - fprintf(fp, "color depth: %d\n", mi->bpp); - fprintf(fp, "mode attributes: %x\n", mi->mode_attr); - fprintf(fp, "bytes per scanline: %d\n", mi->scanline_bytes); - fprintf(fp, "number of planes: %d\n", (int)mi->num_planes); - fprintf(fp, "number of banks: %d\n", (int)mi->num_banks); - fprintf(fp, "mem model: %d\n", (int)mi->mem_model); - fprintf(fp, "red bits: %d (mask: %x)\n", (int)mi->rmask_size, get_mask(mi->rmask_size, mi->rpos)); - fprintf(fp, "green bits: %d (mask: %x)\n", (int)mi->gmask_size, get_mask(mi->gmask_size, mi->gpos)); - fprintf(fp, "blue bits: %d (mask: %x)\n", (int)mi->bmask_size, get_mask(mi->bmask_size, mi->bpos)); - fprintf(fp, "framebuffer address: %x\n", (unsigned int)mi->fb_addr); -}