Ресурсы УКНЦ/Глава 3

Материал из Emuverse

Глава 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