Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смена видео режима через BIOS parameter block 
:(
    Опции темы
GShadrin
Дата 28.3.2011, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте.

Необходимо на тасме сменить текущий видео режим прямым доступом к BIOS parameter block.
Нагуглил, что BIOS parameter block находится в сегменте 0040.
Смещение для текущего видео режима 49h (byte).
Пишу следующим образом:
Код

 mov ax, 0040h ; Сегментный адрес BPB
 mov es, ax
 mov bx, 49h ; смещение режима 
 mov  byte ptr ES:[BX], 0 ; или любой другой
     
Но режим не меняется. Может кто-то делал, что-то подобное.
В чем моя ошибка?

Это сообщение отредактировал(а) GShadrin - 28.3.2011, 18:00
PM MAIL   Вверх
iff
Дата 28.3.2011, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


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

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



49h - текущий видеорежим, указывемый единичным битом:
бит --- Режим
7 - монохромный
6 - 640х200 монохромный
5 - 320х200 монохромный
4 - 320х200 цветной
3 - 80х25 цветной (здесь и далее текстовые режимы)
2 - 80х25 монохромный
1 - 40х25 цветной
0 - 40х25 монохромный

П.С. Попробуйте запустить на виртуальной машине (досбокс) или вообще по чистым ДОС.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
GShadrin
Дата 28.3.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Запускал под досбоксом. На чистом досе нет возможности.
Спасибо за расшифровку режимов, но я ее знаю.

Проблема заключается в том, что после записи на 49h, указанным выше способом, допустим нулевого режима (как и любого другого), смены режима не происходит. Досбокс запускается с шириной 80, после выполнения смены режима указанным способом ширина остается 80 (а не 40, как для 0-го режима). Если делаю через int10h ширина меняется на 40. Хочется разобраться почему происходит именно так. Может просто записать на 49h необходимый режим недостаточно для изменения режима? Можно ли так делать? В интернете мало информации.
PM MAIL   Вверх
iff
Дата 28.3.2011, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


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

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



Цитата(GShadrin @  28.3.2011,  16:02 Найти цитируемый пост)
Спасибо за расшифровку режимов

Это расшифровка значения байта 40:49 по битам (для каждого бита, от нулевого до седьмого указано его значение).

Боюсь, что этот параметр обеспечивает только чтение. Т.е. прочитав его, можно узнать инф. о рижиме, а записав его режим изменить нельзя, можно только нарушить работу программ, которые читают это значение.
Например функция 00h прерывания int 10 считывает значинеия из таких портов как:
03CA
03C4
03CE
03CC
03D4
03D5
и записывает в такие как:
03D4
03D5
это наверно не весь список, т.к. я просто в отладчике debug просмотрел как работает это прерывание.

А интересно для чего вам нужно устанавливать режим, не используя int 10h?


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
ФедосеевПавел
Дата 28.3.2011, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



GShadrin, IMHO, в BIOS Area для видеорежимов хранится справочная информация. Сами видеорежимы можно менять или через прерывание 10h или прямым обращением к портам видеоконтроллера.
При вызове прерывания 10h BIOS обращается к портам видеоконроллера, а затем обновляет ряд переменых в BIOS Area.

Хотя, для перемещения курсора всё наоборот. После записи новых координат в соответствующие ячейки (аппаратный курсор пока не переместился) и вызова int 10h для вывода символа или строки, символы напечатаются в ожидаемом месте (и аппаратный курсор переместится).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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