Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VESA, много вопросов 
:(
    Опции темы
renji
Дата 28.5.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.5.2006

Репутация: нет
Всего: нет



1. Как достать информацию о поддерживаемьіх режимах?
Не понимаю я почти ничего в ассемлерньіх штуках.
Вот шаблон как запрос делать:
Код

Input:   AH = 4Fh        Super VGA support
            AL = 00h        Return Super VGA information
            ES:DI = Pointer to buffer

Output: AX = Status

С AX, и тому подобньіми кажется немножко разобрался, но не знаю что делать с ES:DI, как его в union REGS оформить?. Если можно, пример кода пожалуйста.

Структура возвращаемого буфера тоже мне непонятна.

Код

VgaInfoBlock    STRUC
      VESASignature   db   'VESA'      ; 4 signature bytes
      VESAVersion     dw   ?           ; VESA version number
      OEMStringPtr    dd   ?           ; Pointer to OEM string
      Capabilities    db   4 dup(?)    ; capabilities of the video environment
      VideoModePtr    dd   ?           ; pointer to supported Super VGA modes
      TotalMemory     dw   ?           ; Number of 64kb memory blocks on board
      Reserved        db   236 dup(?)  ; Remainder of VgaInfoBlock
VgaInfoBlock    ENDS


Насколько я понимаю мне нужно добьіть  VideoModePtr, то есть список поддержьіваемьіх SVGA режимов, но совсем не понимаю как на практике сделать. Короче, нуждаюсь в примере smile  
PM MAIL   Вверх
bsa
Дата 28.5.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Код
struct VgaInfoBlock {
   char     Signature[4];
   WORD  Version;
   const char far * OEMStringPtr;
   BYTE Capabilities[4];
   const void far * VideoModePtr;
   WORD  TotalMemory;
   char     Reserved[236];
};

get_info() {
   struct VgaInfoBlock info;
   asm {
       lea di,info
       mov ax,4F00h
       int 10h
   }
}

Если я не ошибся с LEA (Load Effective Address) - всегда с ней проблемы были, то должно работать.

Добавлено @ 19:51 
Данный код расчитан для работы из-под Borland C++ 3.1 (реальный режим процессора, то есть). Если модель памяти по умолчанию far или huge, то far можно убрать из декларации указателей. 
PM   Вверх
sergejzr
Дата 28.5.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Модератор: Пожалуйста, один топик - один вопрос.
Модератор: Название темы должно отражать ее суть! 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
bsa
Дата 28.5.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



sergej.z, у человека и задан один вопрос + 1/2 решения. 
PM   Вверх
renji
Дата 28.5.2006, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.5.2006

Репутация: нет
Всего: нет



Спасибо з а ответ. Извиняюсь если плохо оформил названия темьі. Но наверное вопросов собираюсь задавать много smile 
Как проверить значения ah на вьіходе? (с ассемблерньіми включениями никогда дела не имел просто)

Добавлено @ 21:57 
И еще такое -  например я хочу вьівести на екран значения Signature структурьі VgaInfoBlock, почему так не работает:

Код

void main()
{
 int i;
 get_info();
 for (i=0; i<=3; i++)
   printf("%c",VgaInfoBlock.Signature[i]);
 getch();
}


говорит "Improper use of typedef 'VgaInfoBlock'" smile   

Это сообщение отредактировал(а) renji - 28.5.2006, 21:57
PM MAIL   Вверх
bsa
Дата 29.5.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Я тебе показал пример функции, а не полную реализацию.
VgaInfoBlock - у тебя это тип, а не переменная.
Для получения содержимого регистра AH, тебе надо присвоить какой либо переменной значение переменной _AH:
Код
unsigned char x;
//some code
x = _AH;
//some code
 
PM   Вверх
regis
Дата 30.5.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата(renji @ 28.5.2006,  19:16)
1. Как достать информацию о поддерживаемьіх режимах?
Не понимаю я почти ничего в ассемлерньіх штуках.
Вот шаблон как запрос делать:
Код

Input:   AH = 4Fh        Super VGA support
            AL = 00h        Return Super VGA information
            ES:DI = Pointer to buffer

Output: AX = Status

С AX, и тому подобньіми кажется немножко разобрался, но не знаю что делать с ES:DI, как его в union REGS оформить?. Если можно, пример кода пожалуйста.


Проблема, как я понимаю, заключается в том, откуда взять ES? Правильный ответ зависит от модели памяти, в которой компилируется ваша программа. Если Используется tiny, small или compact (насчет последней не уверен), то ES должно совпадать с сегментом данных программы (DGROUP). Если medium, large или huge -- все указатели будут far, то есть содержат сегментную часть, которую нужно перегрузить в ES при вызове.
 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1055 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.