OSDev http://osdev.su/ |
|
Переключение в текстовый режим http://osdev.su/viewtopic.php?f=6&t=489 |
Страница 1 из 2 |
Автор: | 418ImATeapot [ 30 янв 2012, 16:25 ] |
Заголовок сообщения: | Переключение в текстовый режим |
Здравствуйте, все! Вопрос - есть ли в PM простой способ переключится в текстовый видеорежим из любого другого (дабы не было "снега" или мигания , когда выводим отладочную инфу) без всяких извратов? |
Автор: | Himik [ 30 янв 2012, 18:17 ] |
Заголовок сообщения: | Re: Переключение в текстовый режим |
Мне кажется, мигание обусловлено конструкцией монитора, и программой это не исправить. Предлагаю использовать подключение монитора через разъём DVI, тогда мерцания при смене режимов исчезнут. |
Автор: | 418ImATeapot [ 30 янв 2012, 18:43 ] |
Заголовок сообщения: | Re: Переключение в текстовый режим |
Я имел ввиду неверные видеорежимы по умолчанию - доисторическое мигнаие. Например у меня сейчас была проблема - на "железе" экран мигал с частотой в полсекунды. Оказалось - неправильный цвет (в эмуляторе ничего такого не было). Но ведь на другом железе может быть вообще графический режим со снегом! |
Автор: | pavia [ 30 янв 2012, 19:14 ] |
Заголовок сообщения: | Re: Переключение в текстовый режим |
Не понял. Что моргает как моргает когда моргает? Во вторых, а зачем переключаться? Может сразу в графическом режиме работать? |
Автор: | phantom-84 [ 30 янв 2012, 20:45 ] |
Заголовок сообщения: | Re: Переключение в текстовый режим |
Я проводил эксперименты, устанавливая тестовый режим путем перепрограммировния всех VGA-регистров. В случае переключения из графического режима VESA текстовый режим не всегда устанавливался корректно, т.е. в SVGA-режимах есть какие-то дополнительные "перемычки", которые (не) позволяют установить VGA-режимы. В случае переключения из текстового/графического VGA-режима BIOS никаких проблем не наблюдалось. Для меня этот вопрос тоже актуален. Пока в процессе начальной инициализации устанавливаю режим 3 посредством BIOS (еще в реальном режиме), а уже потом переустанавливаю один из "моих" режимов. У меня их всего два: 80x25 (720x400) и 80x30 (720x480) с независимой настройкой некоторых параметров (палитры цветов, шрифты, 8/16 цветов фона/переднего плана, мерцание, 256/512 символов, 4 разных размера курсора, стартовая позиция отображения содержимого видеопамяти). У меня пока используются только текстовые режимы. С появлением драйверов, позволяющих работать в графических режимах, данная проблема станет снова актуальной, но тогда, думаю, будет и проще ее решить. Edited: мерцание/16 цветов фона программируется на уровне EGA/VGA-регистров. Это не проблема. Основная проблема, о которой я говорил, где-то глубже. |
Автор: | Himik [ 30 янв 2012, 20:56 ] |
Заголовок сообщения: | Re: Переключение в текстовый режим |
418ImATeapot писал(а): Я имел ввиду неверные видеорежимы по умолчанию - доисторическое мигнаие. Например у меня сейчас была проблема - на "железе" экран мигал с частотой в полсекунды. Оказалось - неправильный цвет (в эмуляторе ничего такого не было). А, теперь понял о чём речь. Ты серьёзно считаешь, что в эмуляторе правильно, а на железе неправильно? Весьма необычный взгляд на вещи. Ладно, вот решение. В атрибуте цвета, бит 7 изначально отвечал за мигание. Путём программной перенастройки можно изменить его назначение, и он будет работать как бит цвета, а не мигания. Для этого надо в контроллере VGA поменять один регистр. Порт 3C0h, записать в него сначала индекс 10h, потом туда же число с битом 3 - только из справочника не ясно, установить или сбросить его. Остальные биты нужно оставить неизменными, поэтому надо сначала прочитать оттуда старое значение, и поменять только бит 3. Прочитай документацию на VGA, там есть ещё нюансы программирования этого порта. |
Автор: | phantom-84 [ 30 янв 2012, 21:03 ] |
Заголовок сообщения: | Re: Переключение в текстовый режим |
Контроллер атрибутов (3C0h, 3C1h), регистр управления режимом (10h), бит 3. Действительно, это эмуляторы ведут себя неправильно, когда не воспроизводят мерцание при соответствующей настройке. Edited: Перед записью номера регистра не помешает сделать холостое чтение из регистра ISR1 (3DAh), чтобы подготовить регистр к принятию адреса. А если после записи значения регистра экран потухнет, то неси моник на свалку (шутка)... то попробуй еще раз записать номера регистра (не обязательно 10h), установив бит 5, например так: Код: VIDEO_AADR equ 3C0h ... VIDEO_MAXATTR equ 14h ... mov al,VIDEO_MAXATTR or 20h mov dl,VIDEO_AADR and 0FFh ; dh=3 out dx,al Edited: Мерцание - 1, 16 фоновых цветов - 0. При полной переустановке режима обычно понятно, каковы должны быть значения всех битов регистра. Например, у меня в таблице для этого регистра указано значение 0Ch (мерцание) или 4 (16 фоновых цветов). |
Автор: | 418ImATeapot [ 31 янв 2012, 15:13 ] |
Заголовок сообщения: | Re: Переключение в текстовый режим |
Я, видимо, просто не умею формулировать. Извините. Допустим, произошёл БСОД, или просто ОСь уже загрузилась, а драйвера - нет (как в данном случае). Видеорежим неизвестен. Необходимо вывести на экран сообщение не переключаясь в RM. |
Автор: | Himik [ 31 янв 2012, 15:27 ] |
Заголовок сообщения: | Re: Переключение в текстовый режим |
Из портов VGA можно прочитать тип текущего режима и остальные параметры. Но в общем, текстовый режим на этапе загрузки является стандартом, проверкой можно и не заморачиваться. В сегменте данных BIOS есть различная информация. В ячейке 0040h:0049h лежит номер текущего режима. --------V-M00400049-------------------------- MEM 0040h:0049h - VIDEO - CURRENT VIDEO MODE Size: BYTE SeeAlso: MEM 0040h:004Ah,INT 10/AH=00h --------V-M0040004A-------------------------- MEM 0040h:004Ah - VIDEO - COLUMNS ON SCREEN Size: WORD SeeAlso: MEM 0040h:0049h,MEM 0040h:004Ch,MEM 0040h:004Eh,INT 10/AH=0Fh --------V-M0040004C-------------------------- MEM 0040h:004Ch - VIDEO - PAGE (REGEN BUFFER) SIZE IN BYTES Size: WORD SeeAlso: MEM 0040h:004Ah,MEM 0040h:004Eh,MEM 0040h:0050h --------V-M0040004E-------------------------- MEM 0040h:004Eh - VIDEO - CURRENT PAGE START ADDRESS IN REGEN BUFFER Size: WORD SeeAlso: MEM 0040h:004Ch,MEM 0040h:0050h,MEM 0040h:0062h,INT 10/AH=05h --------V-M00400050-------------------------- MEM 0040h:0050h - VIDEO - CURSOR POSITIONS Size: 8 WORDs Desc: contains row and column position for the cursors on each of eight video pages SeeAlso: MEM 0040h:004Eh,MEM 0040h:0060h,INT 10/AH=02h --------V-M00400060-------------------------- MEM 0040h:0060h - VIDEO - CURSOR TYPE Size: WORD (big-endian) Desc: contains cursor start scan line and cursor end scan line SeeAlso: MEM 0040h:0050h,MEM 0040h:0062h,INT 10/AH=03h --------V-M00400062-------------------------- MEM 0040h:0062h - VIDEO - CURRENT PAGE NUMBER Size: BYTE SeeAlso: MEM 0040h:004Eh,MEM 0040h:0063h,INT 10/AH=05h |
Автор: | 418ImATeapot [ 31 янв 2012, 16:03 ] |
Заголовок сообщения: | Re: Переключение в текстовый режим |
Спасибо. А как быть с БСОДом? |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |