OSDev

для всех
Текущее время: 02 май 2024, 21:00

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Переключение в текстовый режим
СообщениеДобавлено: 30 янв 2012, 16:25 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Здравствуйте, все!

Вопрос - есть ли в PM простой способ переключится в текстовый видеорежим из любого другого (дабы не было "снега" или мигания , когда выводим отладочную инфу) без всяких извратов?

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переключение в текстовый режим
СообщениеДобавлено: 30 янв 2012, 18:17 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Мне кажется, мигание обусловлено конструкцией монитора, и программой это не исправить. Предлагаю использовать подключение монитора через разъём DVI, тогда мерцания при смене режимов исчезнут.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переключение в текстовый режим
СообщениеДобавлено: 30 янв 2012, 18:43 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Я имел ввиду неверные видеорежимы по умолчанию - доисторическое мигнаие. Например у меня сейчас была проблема - на "железе" экран мигал с частотой в полсекунды. Оказалось - неправильный цвет (в эмуляторе ничего такого не было). Но ведь на другом железе может быть вообще графический режим со снегом!

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переключение в текстовый режим
СообщениеДобавлено: 30 янв 2012, 19:14 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Не понял. Что моргает как моргает когда моргает?
Во вторых, а зачем переключаться? Может сразу в графическом режиме работать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переключение в текстовый режим
СообщениеДобавлено: 30 янв 2012, 20:45 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Я проводил эксперименты, устанавливая тестовый режим путем перепрограммировния всех VGA-регистров. В случае переключения из графического режима VESA текстовый режим не всегда устанавливался корректно, т.е. в SVGA-режимах есть какие-то дополнительные "перемычки", которые (не) позволяют установить VGA-режимы. В случае переключения из текстового/графического VGA-режима BIOS никаких проблем не наблюдалось. Для меня этот вопрос тоже актуален. Пока в процессе начальной инициализации устанавливаю режим 3 посредством BIOS (еще в реальном режиме), а уже потом переустанавливаю один из "моих" режимов. У меня их всего два: 80x25 (720x400) и 80x30 (720x480) с независимой настройкой некоторых параметров (палитры цветов, шрифты, 8/16 цветов фона/переднего плана, мерцание, 256/512 символов, 4 разных размера курсора, стартовая позиция отображения содержимого видеопамяти). У меня пока используются только текстовые режимы. С появлением драйверов, позволяющих работать в графических режимах, данная проблема станет снова актуальной, но тогда, думаю, будет и проще ее решить.

Edited: мерцание/16 цветов фона программируется на уровне EGA/VGA-регистров. Это не проблема. Основная проблема, о которой я говорил, где-то глубже.


Последний раз редактировалось phantom-84 30 янв 2012, 20:56, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переключение в текстовый режим
СообщениеДобавлено: 30 янв 2012, 20:56 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
418ImATeapot писал(а):
Я имел ввиду неверные видеорежимы по умолчанию - доисторическое мигнаие. Например у меня сейчас была проблема - на "железе" экран мигал с частотой в полсекунды. Оказалось - неправильный цвет (в эмуляторе ничего такого не было).

А, теперь понял о чём речь. Ты серьёзно считаешь, что в эмуляторе правильно, а на железе неправильно? Весьма необычный взгляд на вещи. Ладно, вот решение.
В атрибуте цвета, бит 7 изначально отвечал за мигание. Путём программной перенастройки можно изменить его назначение, и он будет работать как бит цвета, а не мигания. Для этого надо в контроллере VGA поменять один регистр. Порт 3C0h, записать в него сначала индекс 10h, потом туда же число с битом 3 - только из справочника не ясно, установить или сбросить его. Остальные биты нужно оставить неизменными, поэтому надо сначала прочитать оттуда старое значение, и поменять только бит 3. Прочитай документацию на VGA, там есть ещё нюансы программирования этого порта.


Последний раз редактировалось Himik 30 янв 2012, 21:10, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переключение в текстовый режим
СообщениеДобавлено: 30 янв 2012, 21:03 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Контроллер атрибутов (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 фоновых цветов).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переключение в текстовый режим
СообщениеДобавлено: 31 янв 2012, 15:13 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Я, видимо, просто не умею формулировать. Извините.

Допустим, произошёл БСОД, или просто ОСь уже загрузилась, а драйвера - нет (как в данном случае). Видеорежим неизвестен. Необходимо вывести на экран сообщение не переключаясь в RM.

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переключение в текстовый режим
СообщениеДобавлено: 31 янв 2012, 15:27 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Из портов 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переключение в текстовый режим
СообщениеДобавлено: 31 янв 2012, 16:03 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Спасибо. А как быть с БСОДом?

_________________
Found a CPU. LAPIC ID: 00


Последний раз редактировалось 418ImATeapot 31 янв 2012, 16:06, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB