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 кб, то видеодрайвер может заполнить оставшуюся часть видеобуфера, как ему захочется, или даже вообще не заполнять - я не подписывался под какими-либо соглашениями о безопасности
).[/list]
Неправильно совмещать в одной функции две.