[recovery mode] О бедном Text Mode замолвите слово…

d406689606123b5e965d3eb783eda292

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

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

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

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

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

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

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

  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. Если интересно, то во второй части я опишу проблему выбора фиксированного знакогенератора для интерпретации имеемого режима и проблем с перепрограммированием «на лету».

Habrahabr.ru прочитано 36992 раза