≡ Передовица » Hardware » Полезное » Про знакогенераторы
Про знакогенераторыТекстовые режимы у ВСЕХ АГАТов аппаратные, очень быстрые. ПЗУ знакогенератор располагается в отдельной микросхеме, ёмкостью 2кб. Этого объёма достаточно для хранения 256-ти различных знаков. * * *Для Агат-7 встречается два варианта: полный и сокращённый.
Сокращённый вариант появился из-за дефицита микросхем необходимой ёмкости. Схема навесного монтажа: Для апгрейда 96→256 достаточно убрать обе к556рт5, навесной паук из проводов, и на это место припаять одну к556рт7(рт18). Теперь сравним знакогенераторы. Основной регион ($A0-$FF), чаще всего используемый в софте, совпадает полностью. Стиль букв несколько изменён. Прописные буквы ($40-$7F) на сокращённом знакогенераторе отображаются как заглавные. А вот регионы псевдографики ($00-$3F/$80-$9F) используются в программах для Агат-7 исключительно редко. Вид СОКРАЩЁННОГО и ПОЛНОГО знакогенераторов Агат-7: 96% реального софта даже если не поддерживает маленькие/большие буквы, всё равно старается выводить на экран текст с установленным старшим битом. "Агат-Автор" использует полный знакогенератор по-честному. Причём большие буквы он выводит в инверсии, на случай, если знакогенератор всё-таки сокращённый. Бейсики и сопутствующие им ДОСы семёрки довольно вольготно пользуются старшим битом в текстовых строках и текстовых файлах. Например, при выводе на экран стандартными средствами (через PRINT) у HELLO-60 D7 жёстко ставится в единицу. Отладочный комплекс и редактор РАПИРы выводят маленькие буквы голубым цветом, а большие - зелёным. Но почему-то в них тоже жёстко устанавливается старший бит. Если эту установку отключить (подправив код в памяти или на диске), редактор совершенно корректно работает с полным набором 256 знаков. 2% реального софта выводит буквы в виде "тексТ" - то есть последний знак большой, остальные - маленькие. Этот софт не был рассчитан на 256 символов, а его авторы использовали в коде макрос DCI. Он последнему знаку в строке выставлял D7=1 - это такой, чисто АГАТовский, вариант ASCIZ. Ну и, возможно, были какие-то ещё 2% со своими особенностями. Часто возникает вопрос, а можно ли в знакогенераторе Агат-7 использовать микросхемы к573рф2/к573рф5 вместо к556рт7(рт18)? Короткий ответ - лучше не надо. Разработчики Агата знали, что они делают, читали справочники и не стали бы ставить к556рт7(рт18) если можно было обойтись более доступной к573рф2. Собственно footprint на плате именно под к556рт7(рт18). Более подробный ответ такой - у микросхем ПЗУ есть важный параметр: время доступа. Этот параметр у них отличается в разы: 450нс у РФ2 и 60нс у РТ7 (70нс у РТ18). Это наихудшее (максимальное) время доступа. У большей части микросхем оно будет меньше, поэтому иногда указывают ещё типовое время доступа. Оно для РФ2 равно 250нс. Когда нужно вывести символ на экран, его код сначала запоминается в регистр РПД, затем ПЗУ выдаёт нужный байт матрицы символа и, наконец, этот байт попадает в сдвиговый регистр. Интервал между записью в эти регистры и есть то время, за которое ПЗУ должно сработать. В результате, в режиме Т32 у ПЗУ есть 190нс на чтение, а в режиме Т64 - 95нс. И если для режима Т32 реально подобрать РФ2(где-то одна микросхема из 5 будет иметь нужное время доступа), то для Т64 - без шансов. Только какой-то импорт. Последствия замены ПЗУ знакогенератора на к573рф2 приводят или к пропаданию символов, или к их искажению. Причем это может быть незаметно в одних программах, но заметно в других, например в играх. Причина тут может быть в том, что время доступа у ПЗУ растёт при нагреве. А нагрев усиливается, когда содержимое экрана постоянно меняется*. Если в текстовом редакторе картинка малоподвижная, то в играх наоборот. И времени доступа ПЗУ начинает не хватать. Символы начинают время от времени пропадать или искажаться. Это "моргание" может происходить не в каждом кадре и потому быть не очень заметным, но глаза от этого точно устанут. * Нагрев ПЗУ знакогенератора зависит не от активности работы процессора, а от содержимого видеопамяти. ПЗУ нагревается сильнее, когда в нём что-то активно переключается. Переключаются в нём дешифраторы адреса и выходные ключи. Предположим, экран весь заполнен символом $A0 (пробел). На ПЗУ всё время поступает один и тот же код, а выходы всё время в одном и том же состоянии. Нагрев получается небольшой. Теперь заполним экран только заглавными русскими буквами. Их коды лежат в диапазоне $E0 - $F0. То есть, меняется только 5 бит кода символа. Дешифраторы начинают работать активнее, но не на полную катушку. Нагрев усилится. И, наконец, начнём заполнять экран символами из всего диапазона и дополнительно будем менять содержимое экрана в каждом кадре. Дешифраторы и выходные ключи начнут работать на полную катушку и нагревать ПЗУ ещё сильнее. Понятное дело, что эффект будет больше зависеть от сочетания символов. Но когда картинка всё время меняется, то выше шанс напороться на такое сочетание. Вот игры и повышают этот шанс. Спрашивается, а почему в знакогенераторе Агат-9 стоит к573рф2? Да просто в "девятке" увеличен интервал между записью в регистры. Поэтому у ПЗУ остаётся больше времени на чтение байта матрицы и появляется возможность использовать более "медленную" микросхему. * * *Знакогенератор Агат-9. Используется микросхема к573рф2. Размер всегда полный. Вид знакогенераторов ПОЛНЫЙ Агат-7 и АГАТ-9: Основной регион ($A0-$FF), который чаще всего используется в софте, совпадает с обоими вариантами для Агат-7. Прописные буквы ($40-$7F) на том же месте. Начертание некоторых символов отличается, не меняя смысла (например: размер квадратных скобок, символ $DF короче на один левый пиксель, стилизация символа $CD и т.д.). Теперь есть буквы "ё" и "Ё", а так же символ списка ($9F). Псевдографические символы Агат-9 отличаются от Агат-7. У девятки скорее научный уклон. Кроме того, нижний регион псевдографики ($80-$9F) заполнен обычными буквами, которые уже есть в основном регионе, но этому явлению есть объяснение*. Таким образом, различных символов в "девятке" только 226. Во времена Агат-9 программисты стали понемногу использовать псевдографику. Это позитивно сказалось на внешнем оформлении софта. Однако на Агат-7, такие программы выглядели не совсем как задумано. Вероятно поэтому владельцы Агат-7 при апгрейде знакогенератора, предпочитали набор псевдографики от Агат-9. На компьютерах "Тошкент", по сути являющихся Агат-9, используется несколько иной набор символов знакогенератора. Разница в символах $20-$3F, это татарский алфавит.
Причём ПЗУ системного монитора на известных нам экземплярах не подвергалось изменениям. Этот знакогенератор был воспроизведён по фотографии, так как сдампить его с реальной машины пока не представилось возможности. * * *Теперь рассмотрим что происходит со знакогенератором, если Агат-9 переходит в режим совместимости с Apple][. ЗГ у семейства ЭВМ Apple][ устроены несколько иначе и даже в поздних моделях скромнее по возможностям, чем у АГАТа. Сравнительные характеристики - в статье Агат - это клон Apple][ ? (см. часть про дисплейный контроллер). Знакогенератор Apple][ в "девятке" формируется из знакогенератора Агат. Для этого требуется только часть имеющихся тайлов. Первые три фрагмента полностью дублируют $80-$BF, а последний -- $C0-$FF. Теперь становится понятно, почему в регионе $80-$9F нет псевдографики. Вид знакогенераторов в режиме Агат и режиме Apple у девятки: Таким образом получаем стандартный знакогенератор Apple][, плюс заглавные русские буквы в регионе $E0-FF.
Этот регион традиционно используется для добавления национальных алфавитов в ЭВМ Apple][. Заметили, что нет знака доллара, как в оригинальном Apple - вместо него "жучок") Знакогенератор для режима Apple][ у Агат-7 находится в микросхеме D35 на плате ячейки 121, и не зависит от основного. Вид знакогенераторов в режиме яч121 у Агат-7: * * *Скачать содержимое микросхем знакогенератора можно на страницах "Материнские платы Агат-7" и "Материнские платы Агат-9" нашего сайта. Упомянем еще один интересный момент. Во всех "семёрочных" ПЗУ знакогенератора пиксели идут от младшего бита к старшему, и нулевой бит обозначает линию, а единичный -- фон. А в "девяточном" -- от старшего бита к младшему, нулевой бит значит фон, а единичный -- линию. Остаётся заметить, что существовали модули расширения для программной подмены знакогенератора. Например в плате палитр. * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |