| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Смена видео режима через BIOS parameter block |
| Автор: GShadrin 28.3.2011, 11:45 | ||
| Здравствуйте. Необходимо на тасме сменить текущий видео режим прямым доступом к BIOS parameter block. Нагуглил, что BIOS parameter block находится в сегменте 0040. Смещение для текущего видео режима 49h (byte). Пишу следующим образом:
Но режим не меняется. Может кто-то делал, что-то подобное. В чем моя ошибка? |
| Автор: iff 28.3.2011, 15:25 |
| 49h - текущий видеорежим, указывемый единичным битом: бит --- Режим 7 - монохромный 6 - 640х200 монохромный 5 - 320х200 монохромный 4 - 320х200 цветной 3 - 80х25 цветной (здесь и далее текстовые режимы) 2 - 80х25 монохромный 1 - 40х25 цветной 0 - 40х25 монохромный П.С. Попробуйте запустить на виртуальной машине (досбокс) или вообще по чистым ДОС. |
| Автор: GShadrin 28.3.2011, 16:02 |
| Запускал под досбоксом. На чистом досе нет возможности. Спасибо за расшифровку режимов, но я ее знаю. Проблема заключается в том, что после записи на 49h, указанным выше способом, допустим нулевого режима (как и любого другого), смены режима не происходит. Досбокс запускается с шириной 80, после выполнения смены режима указанным способом ширина остается 80 (а не 40, как для 0-го режима). Если делаю через int10h ширина меняется на 40. Хочется разобраться почему происходит именно так. Может просто записать на 49h необходимый режим недостаточно для изменения режима? Можно ли так делать? В интернете мало информации. |
| Автор: iff 28.3.2011, 18:19 |
Это расшифровка значения байта 40:49 по битам (для каждого бита, от нулевого до седьмого указано его значение). Боюсь, что этот параметр обеспечивает только чтение. Т.е. прочитав его, можно узнать инф. о рижиме, а записав его режим изменить нельзя, можно только нарушить работу программ, которые читают это значение. Например функция 00h прерывания int 10 считывает значинеия из таких портов как: 03CA 03C4 03CE 03CC 03D4 03D5 и записывает в такие как: 03D4 03D5 это наверно не весь список, т.к. я просто в отладчике debug просмотрел как работает это прерывание. А интересно для чего вам нужно устанавливать режим, не используя int 10h? |
| Автор: ФедосеевПавел 28.3.2011, 19:32 |
| GShadrin, IMHO, в BIOS Area для видеорежимов хранится справочная информация. Сами видеорежимы можно менять или через прерывание 10h или прямым обращением к портам видеоконтроллера. При вызове прерывания 10h BIOS обращается к портам видеоконроллера, а затем обновляет ряд переменых в BIOS Area. Хотя, для перемещения курсора всё наоборот. После записи новых координат в соответствующие ячейки (аппаратный курсор пока не переместился) и вызова int 10h для вывода символа или строки, символы напечатаются в ожидаемом месте (и аппаратный курсор переместится). |