Читая zx-pk.ru, я наткнулся на пару тем, где обсуждалась возможность создания видеокарты с полной реализацией текстовых режимов VGA. В одной из тем даже кипела бурная деятельность. Прототип был создан, в нескольких вариациях. Работал. Но...

В упомянутой выше теме, видеокарта реализовывала практически потолок для VGA в текстовом режиме. Даже придумывались различные способы применения в духе эмуляции CGA в VGA. Тестировался и FastDoom.

Все было бы хорошо если бы не одно но - и 10% возможностей было не раскрыто.

Текстовый режим для VGA подразумевает несколько особенностей

  1. Первое и главное: размер знакоместа. От 8x8 до 8x16. Да, некоторые режимы определяются как 9xN, но в 99.9% случаев режим 9xN дублирует 8 колонку в 9. Исключение: попытка реального отображения чего-то национального.

  2. Второе: количество страниц. От 2 до бесконечности. Определяется размером памяти, но напрямую от нее не зависит. 256kb позволяет выделить до 16 страниц.

  3. Третье: матрица знакомест. От 40x25 до 80x50. Фактически зависит от адаптера. Возможна адресация до 132x60 (даже 160x50, но это редкость).

  4. Четвертое: знакогенератор. VGA позволяет использовать отображать от 256 до 512 символов одновременно из набора "насколько хватит памяти". И... дополнение будет ниже.

  5. Пятое: цвета. По-умолчанию VGA использует для текстового режима "совместимую палитру". Это 16 цветов "каноничного" CGA. Вполне неплохая палитра кстати. Уж на фоне конкурентов так точно (посмотрите на "конючевших" о нехватке коричневого и целых четырех градаций серого в базовом). Есть нюанс. Можно сменить все цвета создав любую палитру из 16 цветов на свой выбор, но только при 256 знакоместах или 8 при 512. Но, хоть 16, хоть 8, они не будут фиксированными.

  6. Шестое: Перепрограммируемый "на лету" знакогенератор. Грубо говоря это способность превратить любой символ в любой в момент меньше чем способен оценить человеческий глаз. Графические "моменты" в Norton Utilies, FFORMAT, Impulse Tracker и прочих - это оно и есть. Но там было перепрограммирование всего и сразу для интерфейса + 4 знакомест в процессе для курсора.

Исходя из всего вышеперечисленного хочется заметить: Попытка создать эмулятор CGA в текстовом режиме VGA используя CP437 выглядит как минимум наивно.

Вы можете создать собственную таблицу. Вы можете создать много таблиц. Вы можете подменять таблицы в реальном времени. Вы даже способны соорудить нечто вроде спектрумовского GigaScreen, получая до 4 цветов на знакоместо (в реальности гораздо больше даже для 8088).

Благодарности

  1. zx-pk.ru:freddy

  2. zx-pk.ru:Tronix

P.S. В процессе написания своего движка для Text-Mode-Based игр я столкнулся с непониманием того, почему первый Tetris не использовал кастомный знакогенератор, поскольку первая (не первая конечно, но одна из первых) моя попытка что-то перенести на IBM с ZX (Kingdom of Grain) использовала именно его для отображения заставок. Возможно повлияло то, что мой первый xIBM-PC был "не совсем совместимый" и позволял делать то, что на оригинале было невозможно. Это был МК-88. Знакогенератор можно было менять сколько угодно, отжирая одну ячейку.

P.S.S. Если интересно, то во второй части я опишу проблему выбора фиксированного знакогенератора для интерпретации имеемого режима и проблем с перепрограммированием "на лету".

Комментарии (7)


  1. frog
    16.01.2023 15:28

    Я бы добавил, что для полноценной реализации текстовых режимов VGA было бы очень полезно поддержать ещё и знакоместо 8x1 (в знакогенератор при этом записывается шрифт, в котором код символа соответствует содержимому символа). Это позволяет сделать очень быстрый "графический" режим, в котором цвет будет задаваться не на точку, а на знакоместо 8x16. Редко, но это использовалось (я и сам использовал).


    1. NickDoom
      16.01.2023 19:46

      Почти Спектрум :)

      Интересно, а какой идеал идеальнее: 2х4 (но получается дублирование, потому что можно сделать символ 01001100 красный на синем фоне, а можно 10110011 синий на красном, например); или же 3х3, но придётся каждый раз смотреть, что станет цветом фона, а что — цветом шрифта, в зависимости от того, какой цвет нужно придать «лишнему, вечно нулевому» девятому пикселу.


      1. frog
        16.01.2023 20:13

        С цветами будет гибче, но адресация получится крайне неудобной. А так выходит очень красиво - 640x400 битмап и атрибуты. Для всяких интерфейсов, где не надо показывать картинки, идеально.


  1. Akela_wolf
    16.01.2023 15:39
    +7

    Не понял о чем статья. Где-то кто-то что-то делал, но делал неправильно, потому что правильно надо было так, но автор правильно тоже не сделал, по крайней мере ничего об этом не написал. Какую ценность несет для сообщества данная статья?


  1. Kotofay
    16.01.2023 16:27
    +1

    Ещё VGA позволял перепрограммировать тайминги и текстовый режим выводился с частотой (?)60Гц. Если монитор тянул то мерцания практически не было. Даже помню такая программка была для DOS.


  1. NeoCode
    16.01.2023 18:02

    Сделали бы для разнообразия реализацию текстового режима с поддержкой Unicode и RGB: 8 байт на символ - 3 байта цвет символа, 3 байта цвет фона, 2 байта код символа (ну не весь Юникод, но хотя-бы основная часть). Плюс произвольное количество строк и столбцов экрана (вероятно, чтобы лучше вписываться в разные мониторы). Получился бы такой синтез старых и современных технологий.


  1. axe_chita
    16.01.2023 18:09
    +1

    Начнем с первого: «Маловато будет!»
    Второе: в тэгах должно быть «ретродизайн»
    Третье: Совсем забыли про старый добрый Hercules Graphics Card у которого, как ни странно, не было графического режима;) А то что мы считали графикой, на самом деле было хитрым текстовым режимом нестандартно запрограммированного МС6845
    Четвертое: На ютубе есть замечательный канал James Sharman, где он создает устройство на дискретной логике, способное работать с VGA монитором (VGA from Scratch).