OSDev

для всех
Текущее время: 28 мар 2024, 13:30

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




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Программирование VGA
СообщениеДобавлено: 19 июл 2007, 18:15 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Выделено из темы: http://osdev.ru/viewtopic.php?f=4&t=90 по многочисленным просьбам трудящихся :) SII

legos спрашивал скрины с консольного режима 80x30 (720x480)... Я тут немного модифицировал приложение, текст которого показан выше, и вот что получилось:
Изображение

А вот прикол. Загрузил оригинальный шрифт и запустил то же самое приложение:
Изображение

Edited. Обновлены ссылки на картинки.


Последний раз редактировалось phantom-84 20 апр 2014, 11:43, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исполняемые файлы
СообщениеДобавлено: 19 июл 2007, 18:27 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
...чЕтО только буквы Ё нету, это даже не модифицированная альтернативная кодировка госта получается, наверное, тот, кто делал шрифт, ее попросту забыл включить в свое творение :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исполняемые файлы
СообщениеДобавлено: 20 июл 2007, 10:32 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Посмотрел на свои скрины и сразу пришло несколько оригинальных идей...

Во-первых, в старших битах номера видеорежима можно кодировать номер (или тип) кодировки, которая нужна приложению, тогда при установке видеорежима приложение будет автоматически выбирать необходимую ему кодировку. Отсутствие у драйвера шрифта в выбранной кодировке будет рассматриваться как ошибка установки видеорежима. 0 - кодировка по умолчанию, которая должна всегда присутствовать (это как режим 3). Аналогично можно выбирать и палитры цветов.

Во-вторых, в номере видеорежима можно кодировать флаг 3-й бит байта атрибутов отвечает за яркость символов/начертание символов. Это позволит приложению при наличии у драйвера шрифта сразу в двух начертаниях отображать на экране одновременно отдельные символы разных начертаний (номального и, например, полужирного).

А самое главное, эти преобразования затронут только текст видеодрайвера! Да, такая текстовая консоль будет хорошим подспорьем для приложений, использующих, скажем, псевдографику!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исполняемые файлы
СообщениеДобавлено: 21 июл 2007, 11:57 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
legos, ты не понял. Эти возможности могут использоваться при прямом выводе (direct output) на текстовую консоль. А "родной" кодировкой в оси сейчас является UTF-16 (LE).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование VGA
СообщениеДобавлено: 01 авг 2013, 19:06 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Решил вдохнуть жизнь в эту и в исходную темы.

Возможно, некоторым покажется, что данная тема не очень-то и актуальна в наше время. Однако для тех, кто придерживается принципа в рамках своего проекта программировать всю аппаратуру напрямую, VGA остается одним из немногих, если не единственным, стандартом, позволяющим иметь не слишком сложный и достаточно универсальный видеодрайвер для своей системы. Сразу скажу, что далее речь пойдет только о текстовых режимах, т.к. графические режимы VGA настолько морально устарели, что их использование очень трудно чем-либо оправдать вообще.

Особенность моей системы такова, что от видеодрайвера требуется наличие функции установки/определения видеорежима, позволяющей задавать/определять в любой момент времени абсолютно все параметры состояния видеорежима вплоть до содержимого видеобуфера (когда это не слишком накладно; альтернативой является посылка события RESET выходящему на передний план процессу, причем только ему, т.е. это не позволяет сохранять содержимое, а позволяет только воссоздавать содержимое). Стандартный VGA-драйвер встроен в ядро. Он позволяет задавать след. параметры видеорежима:
  • номер (т.н. селектор) видеорежима (сейчас используются только номера 0 и 1) - определяет все прочие параметры видеорежима, которые не задаются независимым образом;
  • флаг "7-й бит байта атрибутов отвечает за яркость фона/мигание символов";
  • флаг "3-й бит байта атрибутов отвечает за яркость символов/шрифт (основной/дополнительный)";
  • номер палитры (0-255; 0 - палитра по умолчанию, стандартная CGA-палитра; другие палитры загружаются/выгружаются отдельными функциями);
  • номер основного шрифта (0-255; 0 - шрифт по умолчанию, встроенный шрифт; другие шрифты загружаются/выгружаются отдельными функциями);
  • номер дополнительного шрифта (0-255);
  • стартовая позиция отображения (0-65535);
  • суперпозиция курсора (0-65535) - я задаю местоположение курсора одним числом, как это принято в VGA - весьма удобно в том числе и на прикладном уровне;
  • размер курсора (0-3) - здесь я наоборот абстрагируюсь от VGA - использую значения "нормальный", "половинный", "максимальный" и "скрытый";
  • указатель на буфер с видеоданными и его размер (если указатель равен нулю, то видеодрайвер обязан заполнить весь видеобуфер предопределенным заполнителем; если размер меньше 128 кб, то видеодрайвер может заполнить оставшуюся часть видеобуфера, как ему захочется, или даже вообще не заполнять - я не подписывался под какими-либо соглашениями о безопасности :D).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование VGA
СообщениеДобавлено: 01 авг 2013, 20:43 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Небольшая подборка тем по VGA (в основном касающаяся шрифтов и их загрузки в знакогенератор):
- Знакогенератор
- Unicode
- Русификация видеоадаптера
- где достать OEM 866
- как перевести буквенно-цифровой режим в 40x25


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование VGA
СообщениеДобавлено: 01 авг 2013, 20:59 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
phantom-84 писал(а):
Решил вдохнуть жизнь в эту и в исходную темы.
Возможно, некоторым покажется, что данная тема не очень-то и актуальна в наше время. Однако для тех, кто придерживается принципа в рамках своего проекта программировать всю аппаратуру напрямую, VGA остается одним из немногих, если не единственным, стандартом, позволяющим иметь не слишком сложный и достаточно универсальный видеодрайвер для своей системы. Сразу скажу, что далее речь пойдет только о текстовых режимах, т.к. графические режимы VGA настолько морально устарели, что их использование очень трудно чем-либо оправдать вообще.

Лично я считаю надо просто сделать уроки по этой теме. Даже не совсем уроки. Привести описания Int 10h. Сделать пример вызова сервисов BIOSa,а их немного.
Привести реализацию этих сервисов через свою функцию которая использует порты в/в.
Для продвинутых сделать описание устройства и работы видео карты. Не полное, а в рамках необходимого. И привести пример собственного драйвера. С вашим набором функций согласен.


phantom-84 писал(а):
Особенность моей системы такова, что от видеодрайвера требуется наличие функции установки/определения видеорежима, позволяющей задавать/определять в любой момент времени абсолютно все параметры состояния видеорежима вплоть до содержимого видеобуфера (когда это не слишком накладно; альтернативой является посылка события RESET выходящему на передний план процессу, причем только ему, т.е. это не позволяет сохранять содержимое, а позволяет только воссоздавать содержимое). Стандартный VGA-драйвер встроен в ядро.

Определение видео режима и его параметров сделано путём опроса видео карты или путем сохранения контекста в драйвере?

phantom-84 писал(а):

[*]номер (т.н. селектор) видеорежима (сейчас используются только номера 0 и 1) - определяет все прочие параметры видеорежима, которые не задаются независимым образом;

Что за магические константы 0 и 1?

phantom-84 писал(а):
[*]номер палитры (0-255; 0 - палитра по умолчанию, стандартная CGA-палитра; другие палитры загружаются/выгружаются отдельными функциями);
[*]номер основного шрифта (0-255; 0 - шрифт по умолчанию, встроенный шрифт; другие шрифты загружаются/выгружаются отдельными функциями);
[*]номер дополнительного шрифта (0-255);
[*]стартовая позиция отображения (0-65535);

Не очень понял что значит 0-255. Можно коментарий? По любому нужно более полное описание.

phantom-84 писал(а):
[*]суперпозиция курсора (0-65535) - я задаю местоположение курсора одним числом, как это принято в VGA - весьма удобно в том числе и на прикладном уровне;

У меня X,Y потому что VGA это криво. Оно не отражает суть перемещения курсора в 2-х мерном пространстве.
Лучше назвать не супер позиция курсора, а сырые данные положения курсора.

phantom-84 писал(а):
[*]указатель на буфер с видеоданными и его размер (если указатель равен нулю, то видеодрайвер обязан заполнить весь видеобуфер предопределенным заполнителем; если размер меньше 128 кб, то видеодрайвер может заполнить оставшуюся часть видеобуфера, как ему захочется, или даже вообще не заполнять - я не подписывался под какими-либо соглашениями о безопасности :D).[/list]

Неправильно совмещать в одной функции две.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование VGA
СообщениеДобавлено: 01 авг 2013, 22:07 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
pavia писал(а):
Лично я считаю надо просто сделать уроки по этой теме. Даже не совсем уроки.
Я как обычно начинаю с форума. Если достаточно отрывистые факты, упоминаемые здесь, начнут складываться в более-менее логичную картинку, можно будет и статью написать.

Цитата:
Для продвинутых сделать описание устройства и работы видео карты. Не полное, а в рамках необходимого. И привести пример собственного драйвера. С вашим набором функций согласен.
Я пока полный набор функций не перечислял, а говорил, что должна быть функция, которая может установить сразу все параметры, и функция, которая может определить сразу все параметры. Есть и другие функции, которые отвечают за установку/определение отдельных параметров.

Цитата:
Определение видео режима и его параметров сделано путём опроса видео карты или путем сохранения контекста в драйвере?
Все параметры читаются из памяти драйвера, т.к. они дублируются в ней перед их записью в видеокарту.

Цитата:
Что за магические константы 0 и 1?
Это номера основных режимов (0 - 80x25, 1 - 80x30). Раньше я использовал номера 2 и 3 (номер 3 соответствовал режиму 80x25).

Цитата:
Не очень понял что значит 0-255. Можно коментарий? По любому нужно более полное описание.
Палитры и шрифты могут загружаться в память драйвера отдельными функциями, а при установке видеорежима они просто выбираются по их номеру. Загрузка/выгрузка может выполняться достаточно свободно. К примеру можно загрузить шрифт в одной программе, а выбрать и использовать его в другой. Также можно делать подмену палитр/шрифтов для одной программы со стороны другой программы.

Цитата:
У меня X,Y потому что VGA это криво. Оно не отражает суть перемещения курсора в 2-х мерном пространстве.
Я тоже когда-то так думал. Но сейчас считаю, что использование одного значения красивее и удобнее, чем двух.

Цитата:
Неправильно совмещать в одной функции две.
Не понял, о чем ты. Если речь идет об отдельных функциях установки/определения видеорежима, то у меня они отдельные (в видеодрайвере вообще все функции парные), а писал я через дробь просто для краткости.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование VGA
СообщениеДобавлено: 01 авг 2013, 22:48 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Выложил некоторые используемые мной ресурсы в папках fonts и palettes. bintobmp и makefont - уже когда-то упоминавшиеся на страницах этого форума средства. Первый скрипт позволяет сделать из бинарника шрифта bmp-картинку с изображением соответствующего шрифта, а второй - из бинарника шрифта в кодировке cp866 бинарник шрифта в моей консольной кодировке (я поменял местами две группы символов, чтобы добиться лексикографического порядка следования малых букв кириллицы). Примеры использования скриптов:
Код:
makefont cp866\sans16.bin sansfont.bin
Код:
bintobmp sansfont.bin sansfont.bmp

Edited. Обновлены ссылки.


Последний раз редактировалось phantom-84 20 апр 2014, 11:41, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование VGA
СообщениеДобавлено: 07 окт 2013, 23:44 

Зарегистрирован: 04 сен 2013, 21:56
Сообщения: 17
Подскажите, пожалуйста, насколько реально установить текстовой режим 120x50 (символы 8x12) на новой карточке от NVIDIA ? Монитор в графике под Windows проверил. CRTC VGA - безумен в меру, разобраться можно.
Непонятно два момента:
1. Как получить частоту пикселей (Dot Clock) 41.53 МГц? Или в этом больше нет необходимости - всё на автомате?
2. Есть ли смысл использовать отображение портов на память? Разве стандартных портов VGA больше нет?


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

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


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

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


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

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