Ресурсы УКНЦ/Глава 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 Экранные карты >
Подробное использование переменных из экранных карт будет дано ниже, вместе с алгоритмом экранного вывода.
TODO