Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Как написать свой bgi драйвер
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
semix
Guest
 
Сообщений: n/a
По умолчанию Как написать свой bgi драйвер - 31.10.2004, 00:11

Помогите написать свой bgi драйвер[/i]
Ответить с цитированием
  (#2 (permalink)) Старый
Yaroslav Yaroslav вне форума
Member
 
Сообщений: 166
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.10.2004
По умолчанию ГРАФИКА VESA - 06.11.2004, 21:36

небольшой исходник для работы с VESA в 24-bit mode
Borland


fvesa.hpp

Код:
#ifndef FVESA_HPP
#define FVESA_HPP

#include <dos.h>
#include <mem.h>
//====================================================
//   determination constant
//====================================================
// 64k color modes
#define VESA_320x200x24Bit  0x10F
#define VESA_640x480x24Bit      0x112
#define VESA_800x600x24Bit  0x115
#define VESA_1024x768x24Bit  0x118
#define VESA_1280x1024x24Bit                 0x11B
//====================================================
// structure
//====================================================
 struct VESAInfo
{
 char Sign[4];  // VESA signature
 int Version;  // VESA BIOS version
 char far * OEM;    // Original Equipment Manufacture id
 long Capabilities;
 int far * ModeList;// list of supported modes
 int TotalMemory;    // total memory on board in 64k blocks
 char Reserved[236];
};
//---------------------------------------------------------------------------
 struct VESAModeInfo
{
 int ModeAttributes;
 char WinAAttributes;
 char WinBAttributes;
 int WinGranularity;
 int WinSize;
 unsigned WinASegment;
 unsigned WinBSegment;
 void far * WinFuncPtr;
 int BytesPerScanLine;
  // optional data
 int XResolution;
 int YResolution;
 char XCharSize;
 char YCharSize;
 char NumberOfPlanes;
 char BitsPerPixel;
 char NumberOfBanks;
 char MemoryModel;
 char BankSize;
 char NumberOfPages;
  // direct color fields
 char RedMaskSize;
 char RedFieldPosition;
 char GreenMaskSize;
 char GreenFieldPosition;
 char BlueMaskSize;
 char BlueFieldPosition;
 char RsvdMaskSize;
 char RsvdFieldPosition;
 char DirectColorModeInfo;
 char Reserved [216];
};
//====================================================
// Function
//====================================================
 int FindVESA (VESAInfo & );
 int FindVESAMode (int ,VESAModeInfo & );
 int SetVESAMode (int );
 int GetVESAMode ();
 void SetVESABank (int );
 void WritePixel(unsigned int x,unsigned int y,unsigned char color);
 void WriteString(unsigned int x,unsigned int y,unsigned short sizeS,unsigned char * color);
//====================================================

#endif


fvesa.cpp

Код:
#include "fvesa.hpp"

static int CurBank=0;
static int Granularity=1;
static VESAModeInfo CurMode;

//====================================================
//
 int FindVESA (VESAInfo & vi)
{
 _asm
 {
  push  es                     ;
  push  di                     ;
  les   di,    dword ptr vi    ;
  mov   ax, 4F00h              ;
  int   10h                    ;
  pop   di                     ;
  pop   es                     ;
 }
 if(_AX != 0x004f)
  return 0;
 return 1;
}
//====================================================
//
 int FindVESAMode (int mode,VESAModeInfo & mi)
{
 _asm
 {
  push  es                                     ;
  push  di                                     ;
  les   di,    dword ptr mi                       ;
  mov   ax, 4F01h                              ;
  mov   cx, mode                               ;
  int   10h                                    ;
  pop   di                                     ;
  pop   es                                     ;
 }
 return _AX==0x004f;
}
//====================================================
//
 int SetVESAMode (int mode)
{
 if(!FindVESAMode(mode,CurMode))
  return 0;

 Granularity=64/CurMode.WinGranularity;
 _asm
 {
  mov   ax,    4F02h                  ;
  mov   bx, mode                   ;
  int   10h                        ;
 }
 return _AX==0x004F;
}
//====================================================
//
 int GetVESAMode()
{
 _asm
 {
  mov   ax,    4F03h        ;
  int   10h              ;
 }
 if(_AX!=0x004f)
  return 0;
 else
  return _BX;
}
//====================================================
//
 void SetVESABank (int start)
{
 if(start==CurBank)
  return;
 CurBank=start;
 start *=Granularity;
 _asm
 {
  mov   ax,    4F05h;
  mov   bx, 0      ;
  mov   dx, start  ;
  push  dx         ;
  int   10h        ;
  mov   bx, 1      ;
  pop   dx         ;
 }
}
//====================================================
//
 void WritePixel(unsigned int x,unsigned int y,unsigned char color)
{
 long addr=(long)CurMode.BytesPerScanLine*(long)y+(long)x;
 SetVESABank((int)(addr>>16));
 pokeb(0xA000,(int)addr,color);
}
//====================================================
void WriteString(unsigned int x,unsigned int y,unsigned short sizeS,unsigned char * color)
{
 register unsigned long addr_B=(unsigned long)CurMode.BytesPerScanLine*(unsigned long)y+(unsigned long)x;
 register unsigned long addr_E=addr_B+sizeS;
 register unsigned short bank_B=addr_B>>16;
 register unsigned short bank_E=addr_E>>16;
 register unsigned long addr_D=(unsigned long) CurMode.WinASegment<<16;

 SetVESABank(bank_B);

 if(bank_B==bank_E)
 {
  addr_D=addr_D+(unsigned short)addr_B;
  memcpy((void *)(addr_D),(void *)color,sizeS);
 }
 else
 {
  bank_B=0-(unsigned short)addr_B;
  bank_E=addr_E;
  addr_D=addr_D+(unsigned short)addr_B;
  memcpy((void *)(addr_D),(void *)color,bank_B);

  SetVESABank((int)(addr_E>>16));
  addr_D=(unsigned long)CurMode.WinASegment<<16;
  memcpy((void *)(addr_D),(void *)(color+bank_B),bank_E);
 }
}
//====================================================
Ответить с цитированием
  (#3 (permalink)) Старый
neverstop neverstop вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.11.2004
По умолчанию 13.11.2004, 17:29

скажите пожалуйста значение VESAInfo и VESAModeInfo
Ответить с цитированием
  (#4 (permalink)) Старый
Yaroslav Yaroslav вне форума
Member
 
Сообщений: 166
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.10.2004
По умолчанию графика - 15.11.2004, 21:26

Две структуры дают информацию о видео карте (VESAInfo) и видео режиме (VESAModeInfo). заполняются при вызове / int FindVESA (VESAInfo & vi)/ и /int FindVESAMode (int mode,VESAModeInfo & mi)/ соответсвенно.
Ответить с цитированием
  (#5 (permalink)) Старый
neverstop neverstop вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.11.2004
По умолчанию 21.11.2004, 16:24

какие моды графики есть?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
neverstop neverstop вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.11.2004
По умолчанию 21.11.2004, 16:24

какие моды графики есть?
Ответить с цитированием
  (#7 (permalink)) Старый
Yaroslav Yaroslav вне форума
Member
 
Сообщений: 166
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.10.2004
По умолчанию графика - 24.11.2004, 18:14

Все стандартные режимы разрешения начиная с 16 цветов до 32 bit.
много информации на www.codenet.ru
Ответить с цитированием
  (#8 (permalink)) Старый
Yaroslav Yaroslav вне форума
Member
 
Сообщений: 166
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.10.2004
По умолчанию графика - 24.11.2004, 18:14

Все стандартные режимы разрешения начиная с 16 цветов до 32 bit.
много информации на www.codenet.ru
Ответить с цитированием
  (#9 (permalink)) Старый
neverstop neverstop вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.11.2004
По умолчанию 25.11.2004, 16:33

спосибо большое
Ответить с цитированием
  (#10 (permalink)) Старый
neverstop neverstop вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.11.2004
По умолчанию 25.11.2004, 16:33

спосибо большое
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать свой эквалайзер EEk Visual C++ 0 02.07.2006 12:34
USB драйвер как его написать Fly Железо. Написание драйверов 184 30.06.2006 10:05
USB как написать драйвер Fly Железо. Написание драйверов 0 13.04.2006 21:42
Как написать plug-in, котрый бы создавал свой проект AlekseyVolk Eclipse 1 01.04.2006 22:06
Устанавливаю свой драйвер как сделать Vitaliy® Железо. Написание драйверов 20 20.12.2005 09:35
Написать свой Процессор, тактовую частоту и рейтинг sashar2 Visual C++ 16 22.11.2005 08:25
Тип string, несколько вопросов! Помогите написать свой класс Relaxxx Visual C++ 5 09.03.2005 17:29
Как написать драйвер для PCI устройства Anonymous Железо. Написание драйверов 5 20.10.2004 15:31
Как самостоятельно написать свой POP3 сервер Дейв Delphi 2 01.03.2004 17:23
Floppy + WinXP + свой драйвер GreK Железо. Написание драйверов 1 02.06.2003 15:10
Как написать свой компонент с различными формулами Andry C++ Builder 2 23.05.2003 14:06
Как написать свой toolbar для IE artkir WinAPI 1 06.10.2002 17:42



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов