Ресурсы УКНЦ/Глава 3
Глава 3. Стандартный экранный вывод.
§ 7. Разделение экранов
Итак, мы разобрались с буфером и с Диспетчером. Рассмотрим такую рядовую ситуацию: ПП «кружит» в Диспетчере, сканируя таблицу запросов и с нетерпением ожидая задачи на исполнение.
Пусть теперь ЦП по каналу К0 послал байт (пока неважно какой). Сработает прерывание от приемника К0 со стороны ПП. Наш байт запишется в буфер, указатель буфера изменится.
Также установится ячейка (7064) в таблице запросов. Программа обработки прерывания завершается, и управление возвращается в Диспетчер. Он обнаруживает, что поступил запрос на обслуживания экрана (ячейка (7064) не равна 0) и запускает подпрограмму экранного вывода, адрес которой находит в таблице задач.
Этот адрес — 111144.
Вряд ли стоит спешить сходу описывать эту подпрограмму. Вообще-то она не очень сложная. Просто будет удобнее подойти к ней с другой стороны.
7.0. Принцип разделения экранов
Из множества хитростей, заложенных в УК разработчиками, эта, на первый взгляд, в глаза не бросается. Однако без нее УК — не УК.
Допустим, Вы работаете в Бейсике, или в пультовом отладчике, и понадобилось, например, изменить цвет символа. Что Вы делаете? Нажимаете клавишу «УСТ». Что происходит? Появляется меню «Установка режимов». Выполнив необходимые манипуляции с этим меню, Вы возвращаетесь опять в ту же среду, где находились, нажатием клавиш «ИСП» или «Ввод».
При этом никаких изменений в текущем экране Вы не находите. Даже курсор на том же месте.
Иными словами, работа в меню «Уст» не касалась Вашей программы и Вашего экрана. Эта работа велась в другом экране. Каким образом этот другой экран влез вместо основного, рабочего? Конечно же, с помощью таблицы строк. Она стала указывать на другие адреса в ВОЗУ, и, таким образом, сделала видимой видеоинформацию другой области видеопамяти.
В этом заключается принцип разделения экранов в УК. Вместо того, чтобы копировать массивы видеоинформации, сохраняя старое изображение, просто меняются несколько ячеек в таблице строк, и в результате перед Вами — новый экран.
7.1 Стандартные экраны в УК-НЦ
Поскольку таблица строк указывает на целые строки, а не на их отрезки, экраны в УК представляют собой горизонтальные «полосы» на всю ширину экрана, различной высоты и расположения на экране.
Системой поддерживаются 4 стандартных экрана (см. рис. 7.0).
Два из них можно назвать экранами лишь с натяжкой. Они представляют собой по символьной строке каждая — служебная (вверху) и информационная (внизу). Эти «экранчики» всегда присутствуют на терминале. Каждая из них содержит 40 знакомест.
Служебная строка служит для отображения текущего алфавита (РУС/ЛАТ), индикации режимов инверсии, подчеркивания, дополнительной клавиатуры (ИНВ, ПОДЧ, ДКЛ), режима индикации символов управления (ИСУ), режима «Установка режимов» (УСТ). Разработчиками предусмотрен вывод и кое-каких других надписей в верхнюю строку, но почему-то Система не использует эти возможности.
Нижняя инфо-строка в Системе вообще не используется.
Для вывода в эти строки предназначены ЕМТ 52 и ЕМТ 56. Но о них позже. Пока — на очереди еще 2 экрана.
Они выводятся в «окошко» между служебной строкой и инфо-строкой. Один — назовем его рабочим — самый главный в УК. В нем работают практически все программы пользователя.
Этот экран содержит 26 символьных строк по 80 символов максимум. Из этих 26 строк 24 всегда выводятся на экран, а две оставшиеся можно просмотреть, циклически сдвинув экран вверх или вниз с помощью команд терминала (УПР+R или УПР+V). Лишь в этом экране действует рулон, и меню «Установка режимов» меняет режимы этого экрана (меняет цвета, формат рабочего экрана, тип рулона).
И последний стандартный экран — служебный. Он содержит 20 символьных строк, максимум по 40 символов в каждой. Рулон в этом экране всегда выключен. Служебный экран используется для размещения меню «Установка режимов», а также под монитор ПП.
Входят в этот монитор так: вызывают меню «Установка» нажатием УСТ, а затем нажимают ГРАФ + ИСП или УПР + @. Работа в мониторе ПП аналогична работе в мониторе ЦП. Однако подвесить машину здесь намного легче. Выход из него в меню «Установки» выполняется нажатием УПР + C.
Каждому экрану в таблице строк соответствуют свои регистры управления цветом и отображением. Их адреса даны в таблице 7.1. Напомним, что каждый из этих регистров занимает в таблице строк 2 слова.
TODO: Таблица 7.1. Адреса регистров управления отображением и цветом для стандартных экранов.
Экран Адр. УО Адр. УЦ Рабочий 2460 2470 Служебный 4670 4700 Служебная строка (верхняя) 2370 2400 Инфо-строка (нижняя) 6740 6750
Ячейка с адресом 2476 содержит информцию о том, какой экран - рабочий или служебный - будет отображаться в окне:
1) рабочий экран: (2476)=2500 2) служебный экран: (2476)=4672.
7.2. Экранные карты
Как отображаются экраны и как отобразить, к примеру, служебный экран вместо рабочего, ясно. Но как организуется вывод в каждый экран так, чтобы было полное разделение экранов? И можно ли конструировать свои экраны так, чтобы вывод в них выполнялся с помощью стандартного обеспечения столь же легко и удобно, как и в рабочий экран?
Оказывается, можно.
Вывод на экран требует размещения в ОЗУ некоторых переменных, например, цвета символа, знакоместа, текущего адреса в ВОЗУ и т.д. Чтобы разделение экранов было полным, у каждого из экранов есть своя саО H8jщiующая и т.д. Тогда обращение к переменным будет выглядеть так:
Смещение Ассемблер Блок-схема 10 10(R5) (R5+10) 2 2(R5) (R5+2)
В таблице 7.2 приведены смещения переменных, их смысл, а также характерные значения для каждого из четырех экранов.
< Таблица 7.2 Экранные карты >
Подробное использование переменных из экранных карт будет дано ниже, вместе с алгоритмом экранного вывода.
Пример 15. Вечные строки.
Войдите в монитор ПП. Перед Вами - служебный экран. Давайте украсим его какими-нибудь приличными, но нестираемыми надписями.
Нажав D, Вы окажетесь в режиме терминала. Очистите экран - <СБРОС>, и сделайте какую-нибудь приличную надпись в верхней строке. Затем выйдите из этого режима - <УПР>+C.
Теперь, чтобы зафиксировать сделанную надпись, изменим некоторые переменные экранной карты:
1) (+2): (22756)=155430 (сместим начальный адрес ВОЗУ "вниз"), 2) (+30):(23004)=5104 ("опустим" адрес верхней видеостроки в таблице строк), 3) (+14):(22770)=312 (уменьшим количество стираемых видео-строк на 11):, 4) (+12):(22766)=23 (уменьшим на 1 количество символьных строк).
Этими действиями мы исключили нашу строку из служебного экрана, хотя на экране она останется. Теперь можно быть уверенным, что лишь инициализация экрана или прямое вторжение в видеопамять сумеет стереть сделанную надпись.
Убрать защиту с первой строки можно, приведя измененные ячейки ЭК в их первоначальное состояние (оно дано в приложении).
Резюме к § 7
• Для создания дружественного интерфейса бывает удобно организовать многоэкранный вывод. Принцип разделения экранов позволяет это сделать.
• Таблица строк может указывать на разные экраны. Экран в УК - это горизонтальная полоса на терминале, состоящая из последовательных видео-строк.
• Чтобы отобразить нужный экран, достаточно "направить" маршрут таблицы строк по нужному руслу. Для этого, как правило, нужно изменить содержимое всего одной ячейки в таблице строк.
• Система поддерживает 4 стандартных экрана: Верхняя служебная строка. Рабочий экран. Служебный экран. Нижняя инфо-строка.
• У каждого экрана - своя область ВОЗУ.
• Служебная и информационная строки всегда отображаются на экране (вверху и внизу). Между ними может быть включен либо рабочий, либо служебный экран. Их переключение делается с помощью ячейки (2476). Рабочему экрану соответствует значение 2500 ,служебному - 4672.
• Вывод в каждый экран полностью независим. Это достигается с помощью экранных карт.
• Экранная карта - таблица переменных для экранного вывода. У каждого экрана она своя, и состоит из 31 слова. Начальный адрес текущей ЭК хранится в ячейке (23150).
• Чтобы организовать вывод в нужный экран, надо в ячейку (23150) записать начальный адрес карты требуемого экрана.
• Начальные адреса четырех экранных карт: 22560 - верхняя служебная строка, 22656 - рабочий экран, 22754 - служебный экран, 23052 - нижняя инфо-строка.
§ 8. Программа экранного вывода
TODO
§ 9. Спецфункции
TODO
§10. EMT 52, 56, 40
TODO