Ниже' приводится файл, определяющий необходимые константы и inline-функции для работы с портами видеокарты. Функции writeReg и readReg служат для доступа к регистрам.

SI // File ega.h
#ifndef EGA
#define _EGA_
#include <dos.h>
#define EGA GRAPHICS 0x3CE // Graphics Controller addr
#define EGA SEQUENCER 0x3C4
// Sequencer base addr
#define EGA_CRTC 0x3D4
#define EGA SET RESET
#define EGA ENABLE SET RESET
#define EGA COLOR COMPARE
#define EGA DATA ROTATE

Компьютерная графика. Полигональные модели

#define EGA READ MAP SELECT
#define EGA MODE
#define EGA MISC
#define EGA COLOR DONT CARE
#define EGA_ _BIT_MASK
#define EGA_ _MAP_MASK
struct RGB
char red; char dreen;. char blue;
inline void writeReg ( int base, int reg, int value )
outportb ( base, reg ); outportb ( base + 1, value );
inline char readReg ( int base, int reg )
outportb ( base, reg ), return inportb ( base + 1 );
inline char pixelMask ( int x ) return 0x80 » ( x & 7 ),
inline char leftMask ( int x ) return OxFF » ( x & 7 );
inline char rightMask ( int x ) return OxFF « ( 7 A ( x & 7 ) );
inline void setRWMode ( int readMode, int writeMode )
writeReg ( EGA_GRAPHICS, EGAJvlODE, ( writeMode & 3 ) | ( ( readMode & 1 ) « 3 ) );
inline void setWriteMode ( int mode )
writeReg ( EGA_GRAPHICS, EGA_DATA_ROTATE, ( mode & 3 ) « 3
int findEGA ();
int findVGA ();
void setVideoMode ( int );
void setVisiblePage ( int );

4. Работа с основными графическими устройствами

char far* findROMFont (int);
void setPalette ( RGB far * palette, int);
#endif

Рассмотрим две основные группы регистров, принадлежащих двум частям видеокарты, - Graphics Controller и Sequencer.

Каждой группе соответствует своя пара портов.

4.7.1. Graphics Controller (порты 3CE-3CF)

Номер

Регистр

Стандартное значение

Set/Reset
Enable Set/Reset
Color Compare
Data rotate
Read Map Select
Mode
Miscellaneous
Color Don't Care OF
Bit Mask FF

Для записи в регистр необходимо сначала послать номер регистра в порт ЗСЕ, а затем записать соответствующее значение в порт 3CF.


⇐ Предыдущая| |Следующая ⇒