IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Адресация,что-ли?
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской
Реальное имя: Левон

Репутация: -  -4  +


Помогите пожалуста сообразить...Почитал про VESA 1.2 в статье С.А.Андрианова.Понравилось.
http://www.osp.ru/pcworld/1998/07/159374/

Но у меня есть проблеммммма.
Прямо с нулевой функции,которая возвращает инфу о наличии весы.
Как организовать эти 256 байт для буфера и записать его адрес в регистры es:di ?

Цитата

Функция 0 возвращает информацию о версии VESA и производителе видеоплаты. Перед ее вызовом необходимо выделить в нижней памяти буфер длиной 256 байт. В версии 2.0 функция позволяет получить некоторую дополнительную информацию, если в первые четыре байта выделенного буфера предварительно записать 4-байтную сигнатуру "VBE2". При этом размер буфера должен составлять 512 байт.

На входе:
AX = 4F00h;
ES:DI - указатель на буфер,
в который надо поместить информацию,
в формате сегмент:смещение
(обратите внимание: именно сегмент
реального режима, а не селектор защищенного).
На выходе:
AX - статус завершения.

Пишу в компиляторе паскаля,не 32.


--------------------
"Непросто тем,кто полагается на истину авторитета,вместо того,чтобы полагаться на авторитет истины"
Джэрольд Мэсси
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Вообще-то в конце статьи (на 4 странице) приведены исходники.
В том числе функции GetVesaInfo, которая делает именно то, о чем ты спрашиваешь.
Только там используется не простой массив байтов, а структура, которая существенно облегчает доступ к возвращаемым параметрам.

Сама процедура
function GetVESAInfo(Buffer:pointer):boolean; {информация о VESA}
var
RetCode : word;
begin
asm
mov ax,$4f00
les di,Buffer
int $10
mov RetCode,ax
end;
GetVESAInfo := RetCode = $004F;
end;
А в структуру я бы добавил по минимуму еще один параметр
  TBuffer = record
Sig: array [0..3] of Char;
UVersion: Byte;
LVersion: Byte;
Manufacturer: Pointer;
Flag: LongInt;
Modes: PWordArray;
TotalMemory : word;
Padding: array [20..255] of Byte;
end;

Правда, на современных видеокартах возвращаемое значение будет далеко от реальности. Впрочем, DOS-приложениям это не нужно, им нужно максимум разместить экранный буфер, а хранение текстур в видеопамяти для них неактуально.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 2.05.2024 12:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name