![]() |
|
|
![]()
|
|
| GShadrin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 20.7.2009 Где: Екатеринбург Репутация: нет Всего: нет |
Здравствуйте.
Необходимо на тасме сменить текущий видео режим прямым доступом к BIOS parameter block. Нагуглил, что BIOS parameter block находится в сегменте 0040. Смещение для текущего видео режима 49h (byte). Пишу следующим образом:
Но режим не меняется. Может кто-то делал, что-то подобное. В чем моя ошибка? Это сообщение отредактировал(а) GShadrin - 28.3.2011, 18:00 |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 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, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| GShadrin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 20.7.2009 Где: Екатеринбург Репутация: нет Всего: нет |
Запускал под досбоксом. На чистом досе нет возможности.
Спасибо за расшифровку режимов, но я ее знаю. Проблема заключается в том, что после записи на 49h, указанным выше способом, допустим нулевого режима (как и любого другого), смены режима не происходит. Досбокс запускается с шириной 80, после выполнения смены режима указанным способом ширина остается 80 (а не 40, как для 0-го режима). Если делаю через int10h ширина меняется на 40. Хочется разобраться почему происходит именно так. Может просто записать на 49h необходимый режим недостаточно для изменения режима? Можно ли так делать? В интернете мало информации. |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 5 Всего: 16 |
Это расшифровка значения байта 40:49 по битам (для каждого бита, от нулевого до седьмого указано его значение). Боюсь, что этот параметр обеспечивает только чтение. Т.е. прочитав его, можно узнать инф. о рижиме, а записав его режим изменить нельзя, можно только нарушить работу программ, которые читают это значение. Например функция 00h прерывания int 10 считывает значинеия из таких портов как: 03CA 03C4 03CE 03CC 03D4 03D5 и записывает в такие как: 03D4 03D5 это наверно не весь список, т.к. я просто в отладчике debug просмотрел как работает это прерывание. А интересно для чего вам нужно устанавливать режим, не используя int 10h? -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| ФедосеевПавел |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 7.2.2009 Репутация: нет Всего: 10 |
GShadrin, IMHO, в BIOS Area для видеорежимов хранится справочная информация. Сами видеорежимы можно менять или через прерывание 10h или прямым обращением к портам видеоконтроллера.
При вызове прерывания 10h BIOS обращается к портам видеоконроллера, а затем обновляет ряд переменых в BIOS Area. Хотя, для перемещения курсора всё наоборот. После записи новых координат в соответствующие ячейки (аппаратный курсор пока не переместился) и вызова int 10h для вывода символа или строки, символы напечатаются в ожидаемом месте (и аппаратный курсор переместится). |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |