Ресурсы УКНЦ/Глава 1: различия между версиями
Panther (обсуждение | вклад) (Категория:УКНЦ) |
Nzeemin (обсуждение | вклад) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 35: | Строка 35: | ||
==== 1.0 Вывод картинки на экран ==== | ==== 1.0 Вывод картинки на экран ==== | ||
[[ | [[Файл:UkncResources 1 0.png|thumb|222px|Рисунок 1.0 Движение электронного луча по экрану]] | ||
Вы, очевидно, знаете принцип передачи теле-изображения. Электронный луч под управлением сигналов строчной и кадровой разверток обегает весь экран построчно (рисунок 1.0). | Вы, очевидно, знаете принцип передачи теле-изображения. Электронный луч под управлением сигналов строчной и кадровой разверток обегает весь экран построчно (рисунок 1.0). | ||
Строка 143: | Строка 143: | ||
===== Регистровый доступ к ОЗУ ===== | ===== Регистровый доступ к ОЗУ ===== | ||
<p align="right">— Есть ли у вас план, мистер Фикс?<br/>— План, план… Да у меня целых три плана!<br/>''Ж.Верн «80 дней вокруг света»</p> | <p align="right">— Есть ли у вас план, мистер Фикс?<br />— План, план… Да у меня целых три плана!<br />''Ж.Верн «80 дней вокруг света»</p> | ||
96 | 96 Кб — вроде не так уж и мало для микро-ЭВМ. Но экран — вещь, которая требует под себя значительную часть памяти машины. Поэтому в УКНЦ наряду с прямым применяется регистровый доступ к памяти. | ||
В страницах ввода-вывода обоих процессоров есть регистры, с помощью которых можно заглянуть туда, куда с прямым доступом нам путь заказан. Делается это так. | В страницах ввода-вывода обоих процессоров есть регистры, с помощью которых можно заглянуть туда, куда с прямым доступом нам путь заказан. Делается это так. | ||
В регистр адреса (РА), который доступен нам как ячейка в странице ввода-вывода, пишется, как Вы уже догадались, адрес. Моментально в другой | В регистр адреса (РА), который доступен нам как ячейка в странице ввода-вывода, пишется, как Вы уже догадались, адрес. Моментально в другой регистр — данных (РД) аппаратно считывается содержимое ОЗУ, соответствующее записанному адрес. Если теперь записать в РД число, то оно аппаратно же запишется по соответствующему адресу в память. У каждой страницы ввода-вывода эти регистры свои, и каждый процессор может записывать и считывать информацию с помощью своих регистров. | ||
Таким способом мы можем достать, помимо обычного ОЗУ, еще и дополнительное, которое выходит за пределы адресного пространства процессоров при прямом доступе. Такое дополнительное, или верхнее ОЗУ называется планами ОЗУ. | Таким способом мы можем достать, помимо обычного ОЗУ, еще и дополнительное, которое выходит за пределы адресного пространства процессоров при прямом доступе. Такое дополнительное, или верхнее ОЗУ называется планами ОЗУ. | ||
На рис. 1.3 показано адресное пространство при регистровом доступе. Планов всего 3. В каждом содержится по 32 Кб. Их адреса в | На рис. 1.3 показано адресное пространство при регистровом доступе. Планов всего 3. В каждом содержится по 32 Кб. Их адреса в РА — 100000 и выше. При РА, меньшем 100000, идет доступ к обычным ОЗУ. | ||
<p align="center">[[ | <p align="center">[[Файл:UkncResources 1 3.png|344px|Рисунок 1.3 Адресное пространство при регистровом доступе]]<br />'''Рисунок 1.3 Адресное пространство при регистровом доступе'''</p> | ||
В таблице 1.1 приведены адреса РА и РД для каждого процессора. Центральному процессору доступны через РА и РД планы 1 и 2, а также свое собственное ОЗУ. Периферийному процессору доступно все ОЗУ в машине. То есть через РД ПП может читать и записывать сразу 3 байта. Совокупность этих трех байтов в разных планах назовем Т-словом. | В таблице 1.1 приведены адреса РА и РД для каждого процессора. Центральному процессору доступны через РА и РД планы 1 и 2, а также свое собственное ОЗУ. Периферийному процессору доступно все ОЗУ в машине. То есть через РД ПП может читать и записывать сразу 3 байта. Совокупность этих трех байтов в разных планах назовем Т-словом. | ||
{| border="1" cellpadding="5" cellspacing="0" align="center" | {| border="1" cellpadding="5" cellspacing="0" align="center" | ||
|rowspan="2"| | |+ Таблица 1.1 | ||
|rowspan="2"| ||rowspan="2" align="center"| '''Регистр<br />адреса''' | |||
|colspan="3" align="center"| '''Регистры данных''' | |colspan="3" align="center"| '''Регистры данных''' | ||
|- | |- | ||
|align="center"| План 0 ||align="center"| План 1 ||align="center"| План 2 | |align="center"| План 0 ||align="center"| План 1 ||align="center"| План 2 | ||
|- | |- | ||
| '''ЦП''' || 177640 || — | | '''ЦП''' || 177640 || — || 176642 (мл) || 176642 (ст) | ||
|- | |- | ||
| '''ПП''' || 177010 || 177012 || 177014 (мл) || 177014 (ст) | | '''ПП''' || 177010 || 177012 || 177014 (мл) || 177014 (ст) | ||
Строка 532: | Строка 532: | ||
* 4, 5 разряды управляют количеством выводимых на экран точек, то есть масштабированием (таблица 1.2). | * 4, 5 разряды управляют количеством выводимых на экран точек, то есть масштабированием (таблица 1.2). | ||
{| border="1" cellpadding="4" cellspacing="0" align="center" style="float:right; margin-left: 10px;" | |||
{| border="1" cellpadding=" | |+ Таблица 1.2 | ||
|colspan="2" align="center"| '''Содержимое<br/>разрядов''' | |colspan="2" align="center"| '''Содержимое<br/>разрядов''' | ||
|rowspan="2" align="center"| '''Кол-во точек<br/>в строке''' | |rowspan="2" align="center"| '''Кол-во точек<br/>в строке''' | ||
Строка 872: | Строка 872: | ||
==== 3.3 Описание канальных регистров ==== | ==== 3.3 Описание канальных регистров ==== | ||
{| border="1" cellpadding="4" cellspacing="0" align="center" style="text-align:center; float:right; margin-left: 10px;" | |||
|+ Таблица 3.1 | |||
|rowspan=2 align="center"| '''Канал''' | |||
|rowspan=2 align="center"| '''Вид<br/>регистра''' | |||
|colspan=3 align="center"| '''ЦП''' | |||
|colspan=3 align="center"| '''ПП''' | |||
|- | |||
|colspan=2| Адрес || а.в.п. ||colspan=2| Адрес || а.в.п. | |||
|- | |||
|rowspan=4| Канал 0 ||rowspan=2| источник || с || 177564 ||rowspan=2| 64 || с || 177076 ||rowspan=2| 324 | |||
|- | |||
| д || 177566 || д || 177070 | |||
|- | |||
| rowspan=2| приемник || с || 177560 ||rowspan=2| 60 || с || 177066 ||rowspan=2| 320 | |||
|- | |||
| д || 177562 || д || 177060 | |||
|- | |||
|rowspan=4| Канал 1 ||rowspan=2| источник || с || 176664 ||rowspan=2| 464 || с || 177076 ||rowspan=2| 334 | |||
|- | |||
| д || 176666 || д || 177072 | |||
|- | |||
| rowspan=2| приемник || с || 176660 ||rowspan=2| 460 || с || 177066 ||rowspan=2| 330 | |||
|- | |||
| д || 176662 || д || 177062 | |||
|- | |||
|rowspan=4| Канал 2 ||rowspan=2| источник || с || 176674 ||rowspan=2| 474 || с ||colspan=2 rowspan=2 style="text-align:center; background-color:#DDD;"| | |||
|- | |||
| д || 176676 || д | |||
|- | |||
| rowspan=2| приемник || с ||colspan=2 rowspan=2 style="text-align:center; background-color:#DDD;"| || с || 177066 ||rowspan=2| 340 | |||
|- | |||
| д || д || 177064 | |||
|- | |||
|} | |||
'''Сторона ЦП.''' | '''Сторона ЦП.''' | ||
Строка 946: | Строка 981: | ||
| style="text-align:center; background-color:#DDDDDD;" | р0 | | style="text-align:center; background-color:#DDDDDD;" | р0 | ||
|} | |} | ||
* 0 разряд — разрешение прерываний от нулевого канала: | |||
:: 1 — разрешены прерывания по а.в.п. 324 при установленном разряде 3. | |||
:: 0 — запрещены прерывания. | |||
* 1 разряд — разрешение прерываний от первого канала: | |||
:: 1 — разрешены прерывания по а.в.п. 334 при установленном разряде 4. | |||
:: 0 — запрещены прерывания. | |||
* 2 разряд — выключение регистров канала К0 из адресного пространства ЦП. | |||
:: 1 — выключены | |||
:: 0 — включены | |||
* 3 разряд — готовность регистров источника К0 | |||
:: 1 — К0 готов для записи нового байта | |||
:: 0 — не готов (предыдущая посылка не была прочитана). | |||
* 4 разряд — готовность регистра источника К1 | |||
:: 1 — готов | |||
:: 0 — не готов | |||
Формат регистра состояний приемников:<br/> | |||
Адрес 177066 | |||
{| | |||
| style="width:15px; text-align:center;" | 7 | |||
| style="width:15px; text-align:center;" | 6 | |||
| style="width:15px; text-align:center;" | 5 | |||
| style="width:15px; text-align:center;" | 4 | |||
| style="width:15px; text-align:center;" | 3 | |||
| style="width:15px; text-align:center;" | 2 | |||
| style="width:15px; text-align:center;" | 1 | |||
| style="width:15px; text-align:center;" | 0 | |||
|- | |||
| style="text-align:center; background-color:#EEEEEE;" | | |||
| style="text-align:center; background-color:#DDDDDD;" | res | |||
| style="text-align:center; background-color:#DDDDDD;" | г2 | |||
| style="text-align:center; background-color:#DDDDDD;" | г1 | |||
| style="text-align:center; background-color:#DDDDDD;" | г0 | |||
| style="text-align:center; background-color:#DDDDDD;" | р2 | |||
| style="text-align:center; background-color:#DDDDDD;" | р1 | |||
| style="text-align:center; background-color:#DDDDDD;" | р0 | |||
|} | |||
* 0, 1, 2 разряд — разрешение прерываний 0, 1 и 2 каналов соответственно | |||
:: 1 — разрешены | |||
:: 0 — запрещены | |||
* 3, 4, 5 — готовность каналов 0, 1, 2 соответственно к приему данных | |||
:: 1 — готов (есть данные для чтения) | |||
:: 0 — не готов | |||
* 6 разряд — разрешение прерывания по команде "RESET" (код 000005) на магистрали ЦП. | |||
:: 1 — формируется прерывание по а.в.п. 314. | |||
:: 0 — прерывание закрыто. | |||
Формат регистров данных тот же, что и в магистрали ЦП. | |||
Все эти регистры сведены в таблицу 3.1. | |||
==== 3.4 Как работают каналы? ==== | ==== 3.4 Как работают каналы? ==== |
Текущая версия от 00:04, 29 сентября 2016
Глава 1. Аппаратные средства вывода на экран
Решение некоторых сложных проблем иногда полезно начинать с конца. Поскольку вывод на экран — штука отнюдь не простая, мы именно так и сделаем. Причем концом будет у нас сам экран.
§0. Немного об экранах.
Экраном обычно служит телевизор или монитор. Оба они бывают черно-белые, цветные и выключенные. Причем последний тип легко может быть превращен в один из первых двух путем включения последнего. Если Вы уже запутались, кто первый, а кто последний, не страшно. Немного страшнее, если после подключения монитора или телевизора к компьютеру вместо удобоваримой картинки Вы обнаружите беспорядочное мерцание полос и бегание кадров с потрясной скоростью. Если предположить, что и монитор (телевизор), и ЭВМ исправны, то остается лишь разобраться с подключением одного к другому.
Обычно от компьютера к экрану идут следующие сигналы:
- Синхросмесь (смесь строчной и кадровой разверток).
Этот сигнал, грубо говоря, управляет положением электронного луча на экране. - Видеосигнал.
Для черно-белых экранов этот сигнал управляет яркостью точки в текущем положении электронного луча. В него еще подмешано немного синхросмеси (для вкуса). - R, G, B.
Сигналы управления красным (Red), зеленым (Green) и синим (Blue) составляющими цвета точки (для цветных экранов). - Звук.
Тот же сигнал, что подается на пьезодинамик ЭВМ. Как правило, его подключают к телевизору в плату звукового канала. - Общий (земля).
Все эти сигналы выводятся на разъемы «ВМ» на задней панели компьютера. Этих разъемов у УКНЦ два. Поэтому к ней можно подключить целых два монитора. (Любопытно, что у человека тоже целых два глаза. Совпадение?)
Теперь осталось подключить компьютер. К каждой машине прилагается видеошнур. В нем 10 жил. Разводка сигналов по этим жилам такова:
- СС — 10
- GND — 2, 4, 6, 8
- R — 5
- G — 3
- B — 1
- Видео — 9
- Звук — 7
Для передачи черно-белого изображения достаточно всего двух проводов — Видео и Земля. Для цветного требуется минимум 5: R, G, B, СС и земля.
Напряжение на выходе из компьютера в видеоразъеме — порядка 1 В.
§1. Как видеоинформация попадает на экран
1.0 Вывод картинки на экран
Вы, очевидно, знаете принцип передачи теле-изображения. Электронный луч под управлением сигналов строчной и кадровой разверток обегает весь экран построчно (рисунок 1.0).
То есть при движении от левого края к правому луч высвечивает на экране строку с переменной яркостью, а при обратном ходе он гасится и возвращается снова к левому краю экрана, сместившись немного вниз. Далее процесс повторяется до тех пор, пока луч не достигнет нижнего края экрана. Тогда он гасится и перебрасывается снова на начало экрана. Кадр нарисован.
То, что появилось на экране, назовем видеоизображением, или просто картинкой. Картинка перерисовывается на экране 50 раз в секунду. За время, равное 1/50 секунды, часто называемое тиком, глаз не успевает забыть старое изображение, поэтому картинка не мерцает.
1.1 Создание картинки
Будем постепенно продвигаться от конца к началу. Теперь вдоль видеошнура, через разъем «ВМ» влезем в компьютер и разберемся, как формируется видеоизображение.
Среди прочих устройств УКНЦ есть устройство, отвечающее за формирование картинки. Оно называется так: Устройство Управления ВидеоОЗУ (УВОЗУ). Помимо других функций, в задачи его входит считывание видеоинформации на экран.
Видеоинформацией мы будем называть данные, хранящиеся в особо отмеченной области оперативной памяти ЭВМ, а саму эту область — ВидеоОЗУ (ВОЗУ). Чтобы разобраться в строении ВОЗУ, давайте пройдемся по адресному пространству УКНЦ.
1.2 Экскурсия в адресное пространство УКНЦ
Среди всех микро-ЭВМ, выпущенных в нашей стране, УКНЦ — самая нетривиальная. Ни в одном другом компьютере больше не встретишь такого оригинального решения — 2 ОЗУ + 2 процессора. Некоторыми вопросами, связанные с повышенной микропроцессорностью УКНЦ, мы займемся позже, а теперь же перейдем к структуре памяти.
Прямой доступ к памяти
Каждый процессор — центральный (ЦП) и периферийный (ПП) имеет свое ОЗУ. Коль скоро в машине применены процессоры КМ1801ВМ2, адресное пространство которых 64 Кб, то прямым доступом к памяти оба они берут лишь каждый свои 64 Кб.
Взгляните на рисунок 1.2. Здесь показаны карты памяти для обоих процессоров при прямом доступе.
Рисунок 1.2 Адресное пространство при прямом доступе
Адресное пространство обоих процессоров может меняться. То есть будут меняться устройства, к которым могут они обращаться, а сам объем адресных пространств не изменится.
Устройства, «намертво» подключенные в адресное пространство, выделены (*) . К ним относятся:
в ЦП:
- ОЗУ пользователя (56 Кб, адреса 0 ... 157777). Именно здесь располагаются все программы пользователя, будь то Бейсик, RT-11 или Ваши собственные (если Вы случайно не являетесь автором Бейсика или RT-11);
в ПП:
- ОЗУ ПП (32 Кб, адреса 0 ... 77777). Это ОЗУ используется для системных нужд. Для каких — Вы скоро узнаете. Интересно то, что около 22 Кб из этих 32 остаются свободными и также пригодны к использованию пользователем.
- Системное ПЗУ (банки 2-4 в адресах 120000-176777). До него нам тоже пока нет дела. Всему свой черед.
- Страница ввода-вывода ПП. Здесь выведены регистры внешних и внутренних устройств.
Сменные устройства:
ЦП:
- В верхние адреса (160000 и выше), в зависимости от режима работы ЦП (а их два - HALT и USER) подставляются:
- Системное ОЗУ ЦП — 8 Кб (режим HALT), где хранится программа-монитор, драйверы внешних устройств, доступных ЦП через страницу ввода-вывода, программа-эмулятор команд с плавающей точкой и программа тестирования.
- Страница ввода-вывода ЦП (режим USER). Аналогично странице ввода-вывода ПП, сюда подставляются по фиксированным адресам регистры внешних и внутренних устройств.
- Как можно менять эти режимы ЦП из ЦП же, сказано в главе ... .
ПП:
- ПП в своем адресном пространстве имеет так называемое «окно» с адресами 100000-117777, в которое может подключаться:
- Первый банк СПЗУ;
- Один из трех банков ПЗУ на внешней кассете N1;
- Один из трех банков ПЗУ на внешней кассете N2;
- Вообще ничего.
- Всем этим управляет особый регистр в странице ввода-вывода ПП. Его адрес — 177054.
Как видим, каждый процессор глядит напрямую только в свое адресное пространство, а общий объем ОЗУ при прямом доступе составляет:
- 64 + 32 = 96 Кб.
Пример 1. Прогулка по адресному пространству.
Влезьте, пожалуйста, любым известным Вам способом в монитор ЦП. Уже виден значок
@
? Итак, мы на месте. Место это — адресное пространство ЦП.Набрав любое восьмеричное число от 0 до 157776, и, нажав стрелку вправо, Вы увидите содержимое ячеек памяти с набранными адресами, а проделав то же с адресом от 160000 — сможете полюбоваться на грозные надписи «Зависание». На них не стоит обращать внимание, ибо УКНЦ как угодно может оповестить о своем зависании, но только не так. Эта часть адресного пространства ЦП — страница ввода-вывода. Здесь можно отыскать ячейки, не вызывающие при открытии никакого возмущения со стороны машины. Скорее всего, это и есть те самые регистры устройств.
Проделаем такой опыт: запишем в ячейку 177566 число 7. Машина что-то невнятно прогудит. Это значит, что число 7 попало куда следует (а следует ему попасть в канал связи с ПП). ПП обработал наш код, ответив добродушным гудком.
Тем, кому наскучило играться в мониторе ЦП, предлагаю покопаться с монитором ПП. Влезаем в него так:
- нажимаем <УСТ>, при этом должно появиться меню «Установка режимов». Если оно не появилось, проверьте, действительно ли ЭВМ перед Вами — это УКНЦ;
- нажмите <УПР>+@ или <ГРАФ>+<ИСП>.
Теперь мы находимся в «царстве теней» — мониторе ПП. Экран здесь не такой просторный, как в мониторе ЦП. Поэтому совет страдающим клаустрофобией — не задерживайтесь здесь подолгу! Из этого отладчика можно и не выбраться. Иногда случается находить в ОЗУ ПП останки тех, кто так и не смог выйти из лабиринтов монитора ПП. Именно их духи, мне кажется, время от времени и подвешивают машины. Но я отвлекся.
Правила игры с монитором ПП те же — можно с полным правом копаться в содержимом любых ячеек от 0 до 77776 (ОЗУ ПП) и любоваться на ячейки от 100000 до 176776 (ПЗУ). Также можно заглянуть и в страницу ввода-вывода ПП. ЭВМ же, в свою очередь, оставляет за собой право подвиснуть в любое удобное ей время.
Если вы устали, выйдите:
- <УПР>+C,
а дальше, через меню «Установки», куда пожелаете.
Оставшимся предлагаю заглянуть туда, где доселе редко ступала нога человека — в СОЗУ ЦП. Для этого прибегнем к черной магии: наберем в ОЗУ ПП 2 масенькие программки:
40000: 012704 MOV #450, R4 000450 004737 CALL @#162164 16216440020: 012704 MOV #450, R4 000450 004737 CALL @#162204 162204С помощью первой мы включим режим просмотра ОЗУ ЦП из монитора ПП. Смело жмем 40000 <ИСП>. Вверху появляются новые две буквы: ЦМ. Что они означают, не знаю, но вот что изменилось — можно посмотреть. Теперь перед нами до боли знакомое ОЗУ ЦП пользователя (в адресах от 0 до 157776) и совсем незнакомое СОЗУ ЦП (от 160000 и выше). Лазать в ОЗУ ЦП можно по-всякому — и записывать в ячейки, и считывать. Но вот запускать программы в ЦП из монитора ПП невозможно — даже черная магия здесь бессильна.
Прежде чем выбраться из этого заколдованного места, подправим кое-что в СОЗУ ЦП:
- в ячейку 163416 вместо 000021 запишем 012500,
- в ячейку 163450 вместо 000031 — 010045.
Теперь со всех ног бежим в монитор ЦП: <УПР>+C, <ENTER>. Наше последнее хитрое действо дало свои результаты — теперь из монитора ЦП можно без проблем «промониторить» все ОЗУ ЦП — пользователя и системное. Это адресное пространство ЦП в режиме «HALT».
Если Вы все же соскучились по монитору ПП и по ОЗУ ПП, вернитесь в монитор ПП, и запустите вторую программку, что с адреса 40020. Ничего страшного в том, что Вы не увидите эту записанную ранее программку - ведь монитор ПП покажет эти адреса в ОЗУ ЦП. Наберите 40020, крепко зажмурьтесь, и нажмите <ИСП>. Если, открыв глаза, в верхней строке Вы обнаружите слово "ПМ", значит, эксперимент удался.
Человек быстро привыкает ко всему хорошему. Поэтому вот инструкция к тому, чтобы восстановить обычную точку зрения монитора ЦП (работаем в мониторе ЦП):
- в ячейку 163416 обратно запишем 21,
- в ячейку 163450 — 31.
Ну что ж, теперь мы полностью восстановили первоначальный вариант: монитор ЦП видит ОЗУ пользователя + страницу ввода-вывода, а монитор ПП — свое суверенное адресное пространство. С возвращением!
Регистровый доступ к ОЗУ
— Есть ли у вас план, мистер Фикс?
— План, план… Да у меня целых три плана!
Ж.Верн «80 дней вокруг света»
96 Кб — вроде не так уж и мало для микро-ЭВМ. Но экран — вещь, которая требует под себя значительную часть памяти машины. Поэтому в УКНЦ наряду с прямым применяется регистровый доступ к памяти.
В страницах ввода-вывода обоих процессоров есть регистры, с помощью которых можно заглянуть туда, куда с прямым доступом нам путь заказан. Делается это так.
В регистр адреса (РА), который доступен нам как ячейка в странице ввода-вывода, пишется, как Вы уже догадались, адрес. Моментально в другой регистр — данных (РД) аппаратно считывается содержимое ОЗУ, соответствующее записанному адрес. Если теперь записать в РД число, то оно аппаратно же запишется по соответствующему адресу в память. У каждой страницы ввода-вывода эти регистры свои, и каждый процессор может записывать и считывать информацию с помощью своих регистров.
Таким способом мы можем достать, помимо обычного ОЗУ, еще и дополнительное, которое выходит за пределы адресного пространства процессоров при прямом доступе. Такое дополнительное, или верхнее ОЗУ называется планами ОЗУ.
На рис. 1.3 показано адресное пространство при регистровом доступе. Планов всего 3. В каждом содержится по 32 Кб. Их адреса в РА — 100000 и выше. При РА, меньшем 100000, идет доступ к обычным ОЗУ.
Рисунок 1.3 Адресное пространство при регистровом доступе
В таблице 1.1 приведены адреса РА и РД для каждого процессора. Центральному процессору доступны через РА и РД планы 1 и 2, а также свое собственное ОЗУ. Периферийному процессору доступно все ОЗУ в машине. То есть через РД ПП может читать и записывать сразу 3 байта. Совокупность этих трех байтов в разных планах назовем Т-словом.
Регистр адреса |
Регистры данных | |||
План 0 | План 1 | План 2 | ||
ЦП | 177640 | — | 176642 (мл) | 176642 (ст) |
ПП | 177010 | 177012 | 177014 (мл) | 177014 (ст) |
Пример 2. Пример работы с регистрами РА и РД в ЦП.
В прошлом примере для того, чтобы поменять кое-что в СОЗУ ЦП, нам приходилось залезать в монитор ПП. «Подглядывание» за ОЗУ ЦП оттуда осуществлялось, конечно же, с помощью регистрового доступа: ПП через регистры доступно все ОЗУ в машине. Теперь попробуем воспользоваться тем же механизмом, но в ЦП, причем более осознанно.
Предлагаю совершить такую нехитрую манипуляцию (в мониторе ЦП):
(176640)=71607 Записываем с помощью РА и РД по адресам (176642)=12500 163416 и 163450 некоторые числа. Адреса пишем (176640)=71624 в РА несколько обделенными на 2. (176642)=10045После этой кропотливой работы можете убедиться, что перед Вами — ОЗУ ЦП в режиме HALT, и никаких регистров по адресам 176640 и 176642 уже не наблюдается. А так как их нет, то и говорить больше не о чем. В заключение совершенно бесполезный и не относящийся к делу совет — запишите в ячейку 163731 число 77000 (вместо 71400), а в 163735 — 20077. Приятного Вам времяпрепровождения с клавишами ИСП и СТОП в мониторе ЦП!
Теперь вернемся к видеоинформации. Видеоинформация — это не что иное, как данные, хранящиеся в планах ОЗУ и считываемые построчно на экран. В принципе, три плана можно называть и ВидеоОЗУ.
Пример 3. Сохранение части экрана
Используя регистровый доступ к ВОЗУ из ПП, сделаем две подпрограммки. Первая будет сохранять содержимое рабочего экрана в области ВОЗУ, которая обычно используется под меню «Установка» и под монитор ПП, т.е. в служебный экран. Вторая будет восстанавливать содержимое рабочего экрана.
Подпрограмма сохранения:
60000: 012702 MOV #100000,R2 100000 012703 MOV #154540,R3 154540 M1: 005004 CLR R4 M2: * 010237 MOV R2, @#177010 177010 013700 MOV @#177012,R0 177012 013701 MOV @#177014,R1 177014 * 010337 MOV R3, @#177010 177010 010037 MOV R0, @#177012 177012 010137 MOV R1, @#177014 177014 005204 INC R4 005202 INC R2 005203 INC R3 022704 CMP #50, R4 000050 001356 BNE M2 062702 ADD #50, R2 000050 022703 CMP #157700,R3 175700 100350 BPL M1 000207 RETURNПодпрограмма восстановления отличается лишь двумя словами (они отмечены звездочкой). Поэтому легче написать простенькую программу копирования, чем заново набивать нашу тяжеловесную подпрограмму.
Программа копирования:
40040: 012702 MOV #60000, R2 060000 012703 MOV #60100, R3 060100 012701 MOV #37, R1 000037 M: 012223 MOV (R2)+, (R3)+ 077103 SOB M, R1Итак, Вы набиваете п/п, набиваете программу копирования, запускаете ее с начального адреса (40040). После этого в ОЗУ ПП появится копия подпрограммы, но уже с адреса 60100. В ней Вы меняете местами содержимое двух помеченных слов.
А для вызова этих подпрограмм используем местную хитрость — эти подпрограммы сделаем спецфункциями:
13144: 60000 13146: 60100Теперь при посылке в терминал (то есть на экран) кода <001> (соответствует комбинации клавиш <УПР>+A) будет выполняться сохранение, а при посылке кода <002> (<УПР>+B) — восстановление левой верхней четверти рабочего экрана.
Как происходит считывание видеоинформации на экран?
Экран УКНЦ состоит из 288 видео-строк. Каждой строке ставится в соответствие адрес в ВОЗУ, с которого последовательно считывается содержимое трех планов так, что одной точке на экране соответствуют три бита в трех различных планах по одному адресу. Цвет каждой из точек строки (для цветных экранов), либо градация яркости (для черно-белых) зависит от содержимого смежных битов в ВОЗУ.
1.3 Таблица строк
Эти соответствия — номера строки начальному адресу в ВОЗУ, цвета точек содержимому ВОЗУ и кое-что другое указываются в специальной таблице в ОЗУ ПП, называемой ТАБЛИЦЕЙ СТРОК. Она строится следующим образом.
Две ячейки с фиксированными адресами в ОЗУ ПП — 270 и 272 являются первым элементом таблиц строк. Вообще количество элементов в таблице должно бы равняться 288 (количеству строк). Но УВОЗУ сделано так, что первые 20 элементов в таблице строк не указывают на строки, и считывание информации на экран начинается с 21-го.
Элемент таблицы строк всегда содержит указатель на адрес в ВОЗУ, с которого начинается вывод на экран в данной строке. Этот адрес находится в предпоследнем слове элемента (а слово — это 2 байта). Адрес здесь задается так же, как при регистровом доступе. То есть адреса, начиная со 100000, указывают на планы памяти, а меньше 100000 — на ОЗУ ЦП + ОЗУ ПП.
Последнее слово элемента содержит адрес следующего элемента таблицы строк, а также некоторую информацию о нем.
Формат последнего слова элемента:
15 | 3 | 2 | 1 | 0 | |||||||||||
Адрес следующего элемента | у | р | к |
- 0 разряд отвечает за состояние аппаратного курсора (им мы займемся чуть позже).
- 1 разряд определяет размер следующего элемента:
- 1 — 4 слова.
- 0 — 2 слова.
Элементы в таблице строк могут быть либо четырехсловными, либо двухсловными. Первый элемент (270 и 272) всегда двухсловный. Двухсловный элемент состоит из адреса в ВОЗУ (1-е слово) и указателя на следующий элемент (2-е слово).
Четырехсловный элемент в первых своих двух словах несет дополнительную информацию, 3-е и 4-е слова имеют то же назначение, что и в двухсловном элементе. Как УВОЗУ будет интерпретировать первые два слова, зависит от содержимого 2-го разряда последнего слова предыдущего элемента:
- 2 разряд:
- если следующий элемент двухсловный (1-й разряд равен 0), то этот разряд интерпретируется просто как 2-й разряд адреса следующего элемента
- если следующий элемент все-таки четырехсловный (1-й разряд равен 1), то возможны два варианта:
- 0 — из первых двух слов следующего элемента загружается регистр управления отображением (УО);
- 1 — из них загружается регистр управления цветом (УЦ).
- 3-15 разряды определяют адрес следующего элемента в таблице строк.
Пример 4. С ног на голову и наоборот
Ради развлечения и только ради него был задуман этот пример. Наберите в ОЗУ ПП такой фрагмент:
40100: 012700 MOV #2500, R0 002500 A: 162710 SUB #54420, (R0) 054420 005410 NEG (R0) 062700 ADD #4, R0 000004 020027 CMP R0, #4666 004666 100770 BMI A 000207 RETURN 13152: 040100Теперь при приеме терминалом кода <004> (<УПР>+D) рабочий экран перевернется вверх тормашками. Отменяется это безобразие все тем же кодом <004>.
Регистры УО и УЦ не имеют фиксированного адреса. Они могут загружаться из таблицы строк произвольное количество раз.
Регистр управления цветом
Этот регистр имеет очень важное значение. Он ставит в соответствие триаде в планах ВОЗУ (комбинации из трех бит) цвет выводимых точек, то есть является тем самым мостиком между видеоинформацией и картинкой. Младший бит в триаде соответствует содержимому плана 0, старший — плана 2.
Регистр управления цветом состоит из двух слов. В первом слове определяются цвета тех точек, которым соответствуют коды от 0 до 3 в планах ВОЗУ. Второе слово определяет цвета триад с содержимым от 4 до 7.
Формат первого слова регистра УЦ:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Y | R | G | B | Y | R | G | B | Y | R | G | B | Y | R | G | B |
011 | 010 | 001 | 000 |
Формат второго слова регистра УЦ:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Y | R | G | B | Y | R | G | B | Y | R | G | B | Y | R | G | B |
111 | 110 | 101 | 100 |
Нетрудно заметить, что каждому возможному коду в ВОЗУ (а их всего 8) соответствует комбинация из 4 бит. Три из них (R, G, B) отвечают за составляющие цвета в цветных мониторах, а черно-белых — за градацию яркости: 1 — составляющая есть, 0 — составляющей нет. Но есть и четвертый — Y. Этот управляет яркостью сразу всех цветов: 1 — 100% яркости, 0 — 50%. Хотя на протяжении одной видеостроки может быть одновременно максимум 8 цветов, в разных строках на экране их может быть 16.
Для черно-белых экранов сигнал Y не влияет на яркость изображения. Для них этот четвертый бит не имеет никакого значения.
Пример 5. Негатив служебного экрана
Чтобы не перенапрячься в изучении регистров УО и УЦ, приведу такой пример. В мониторе ПП обновим 2 ячейки в ТС: 4700: 042547 4702: 000443
Делать это следует невзирая на все безобразия, которые будут проистекать на экране. Для пущей красочности выйдите в меню «Установка»: <УПР>+C, и полюбуйтесь на результат.
Числа в словах для УЦ служебного экрана подобраны так, чтобы поменять местами триады — они теперь расположены в обратной последовательности, отсюда и инверсия экрана.
Для того, чтобы восстановить прежнее положение, запишите в эти ячейки старые значения: 4700: 135230 4702: 177334, или просто сбросьте машину.
Пример 6. Пылающий экран
Набейте в мониторе ПП такую программку:
40200: 005237 INC @#4700 006750 005237 INC @#4702 006752 012737 MOV #1, @#7130 000001 007130 000207 RETURNВ ячейку (7132) запишите адрес этой подпрограммки — 40200, а в ячейку (7130) — единичку. То, что происходит теперь с цветами служебного экрана, — это следствие того, что УЦ1 и УЦ2 соответствующего участка таблицы строк увеличиваются на 1 с частотой 50 Гц.
Регистр управления отображением и аппаратный курсор
Этот регистр также состоит из двух слов.
1-е слово управляет видом курсора, его горизонтальной позицией на экране, а также цветом.
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Позиция курсора | Поз.гр.к | тк | Y | R | G | B |
- 0-3 разряды — яркость и цвет курсора:
- 1 — есть составляющая,
- 0 — нет составляющей.
- 4 разряд — тип курсора:
- 1 — графический курсор,
- 0 — символьный.
- 5-7 разряды — позиция графического курсора в октете.
- 8-14 разряды — позиция курсора (октета) на экране.
- 15 разряд — не используется.
Курсор на экране формируется следующим образом. Включенный символьный курсор накладывается поверх изображения строки. Он занимает 8 подряд высвеченных точек, то есть один октет. Его позиция определяется 8-14 разрядами первого слова регистра УО. Минимальная позиция — 0, максимальная — 79. Графический курсор отличается от символьного тем, что из восьми точек октета лишь одна остается включенной. Ее положении в октете определяют 5-7 разряды. Цвет включенного курсора зависит от 0-3 разрядов.
- О включении/выключении курсора.
- В последнем слове каждого элемента таблицы строк есть разряд, который отвечает за изменение состояние курсора.
- Это нулевой разряд. Если он установлен, курсор изменяет свое состояние. То есть если в предыдущих строках курсор был включен (зажжен), то начиная с этой строки он выключится, и наоборот. Изначально (по умолчанию) курсор выключен.
- Найдя установленным этот бит, УВОЗУ изменяет состояние курсора и оставляет его таким в последовательных строках до следующего установленного нулевого бита последнего элемента, либо до конца строк.
- Мигание курсора делается программно.
Не забудем и про 2-е слово регистра УО. Оно отвечает за масштабирование изображения по горизонтали, а также за яркость R,G,B сигналов в текущей видеостроке.
Его формат:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
масш | яR | яG | яB |
- 0-2 разряды — управляют яркостью R,G,B сигналов соответственно. Это управление распространяется лишь на текущую строку:
- 1 — 100%,
- 0 — 50%.
- 3 разряд — не используется.
- 4, 5 разряды управляют количеством выводимых на экран точек, то есть масштабированием (таблица 1.2).
Содержимое разрядов |
Кол-во точек в строке |
Кол-во октетов в строке | |
4 | 5 | ||
0 | 0 | 640 | 80 |
0 | 1 | 320 | 40 |
1 | 0 | 160 | 20 |
1 | 1 | 80 | 10 |
В УКНЦ 4 формата экрана. В режиме максимального количества точек в строке на экран отображается видеоинформация из 80 последовательных Т-слов, адрес первого указывается в таблице строк для каждой строки. Режим наименьшего количества точек в строке позволяет выводить 80 точек, то есть всего 10 Т-слов в строке. Общий размер картинки при этом не меняется. Видеоизображение занимает всегда весь экран.
Таблица строк позволяет для каждой строки установить свой формат. По умолчанию установлен формат 640 точек в строке. Загрузкой регистра УО можно изменить формат, тогда в последующих строках также установится новый режим, и так до строки, где вновь загрузится регистр УО (либо до конца таблицы строк).
Пример 7. Апофеоз таблицы строк.
Этот пример следует выполнять лишь в том случае, если дальше Вы не собираетесь использовать УК с какой-либо важной целью, ибо выход из него — только системный сброс.
Войдите в монитор ПП, а в нем — в режим терминала (нажав D). А теперь нажмите комбинацию <УПР>+V и держите ее под треск пьезодинамика, пока не надоест.
То, что Вы увидите на экране, послужит, пожалуй, лучшей иллюстрацией к описанию УО и УЦ, да и всему устройству таблицы строк. Команда <УПР>+V — это комнда прокрутки рулона. Но, поскольку рулон для служебного экрана не предусмотрен, с таблицей строк происходят такие вот забавные превращения, что и отражается на экране.
Резюме к §1
- Изображение на экране УКНЦ состоит из 288 видеострок.
- Видеоинформация на экран построчно считывается Устройством Управления ВидеоОЗУ (УВОЗУ) из видеопамяти.
- Адресное пространство может быть доступно либо прямым доступом процессоров, либо регистровым доступом.
- Через РА и РД (регистры адреса и данных) доступно 192 Кб ОЗУ. Одному адресу соответствует Т-слово: 3 байта из трех смежных областей, называемых планами. ЦП доступны планы 1 и 2, ПП — 0, 1 и 2, т.е. все ОЗУ в УКНЦ.
- Одному Т-слову соответствуют восемь выведенных подряд точек на экране.
- Адреса в РА с 100000 указывают на особую область памяти, прямым доступом не видимую. Объем ее - 96 Кб, по 32 в каждом плане, и используется она в качестве ВОЗУ. Адреса меньше 100000 — это ОЗУ ЦП +ОЗУ ПП.
- Таблица строк — список в ОЗУ ПП, необходимый УВОЗУ для формирования видеоизображения. Начинается с пары ячеек с адресами 270 и 272.
- Таблица строк состоит из отдельных элементов. Каждый элемент, начиная с 21-го, соответствует видеостроке на экране. 21-й элемент соответствует самой верхней строке. Элементы могут быть двухсловными и четырехсловными. Первый элемент (270 и 272) всегда двухсловный.
- Формат двухсловного элемента:
- 1-е слово — адрес в ВОЗУ, с которого начинается вывод видеоинформации в текущую строку.
- 2-е слово — адрес следующего элемента в таблице строк. В трех младших битах слова содержится информация о типе следующего элемента, о переключении курсора в данной строке, а также определяется, какой регистр УВОЗУ загрузится из следующего элемента, если он — четырехсловный.
- Формат четырехсловного элемента:
- 1-е, 2-е слова — интерпретируются УВОЗУ либо как регистр управления отображением, либо как регистр управления цветом.
- 3-е слово — адрес в ВОЗУ.
- 4-е слово — адрес следующего элемента.
- Регистры управления цветом (УЦ) и отображением (УО) состоят из двух 16-битных слов каждый и входят в состав УВОЗУ. Загружаются они лишь из таблицы строк, только из четырехсловных элементов.
- Регистр УЦ определяет соответствие цвета точки содержимому трех битов в планах ВОЗУ. В данной строке может быть одновременно 8 цветов.
- Регистр УО управляет: цветом, типом, горизонтальной позицией аппаратного курсора.
- масштабированием изображения по горизонтали.
- яркостью составляющих R,G,B в текущей строке.
§2. Формирование видеоизображения. Использование аппаратных возможностей.
Каким образом видеоинформация попадает на экран, мы разобрались. Теперь рассмотрим способы формирования информации в ВОЗУ.
Самый, пожалуй, простой способ — это записывать в ВОЗУ видеоинформацию через РА и РД. Однако это не самый эффективный путь работы с экраном на УКНЦ. Один из способов повышения эффективности:
2.0 Размещение видеоинформации в нижней области ОЗУ
Можно настроить таблицу строк таким образом, чтобы она указывала на адреса меньше 100000, т.е. на ОЗУ ЦП и ПП. Тогда менять информацию ВОЗУ можно прямым доступом, а это значительно быстрее.
Однако появляется и проблема. Дело в том, что планы раскиданы по разным ОЗУ, и план 0 теперь смотрится только из ПП.
Выходом из такой ситуации может быть использование не всех планов сразу, т.е. работа только с планами 1 и 2 из ЦП, ибо он несколько быстрее ПП. Но при этом сократится многоцветность выводимой информации. Во многих случаях это не страшно, например, при выводе текста.
Еще можно координировать работу процессоров таким образом, чтобы они писали одновременно в свое ОЗУ свои порции информации. Этот способ, несомненно, интересен, и, быть может, даже красив. Однако сложен.
Но есть в УКНЦ другие возможности, позволяющие повышать эффективность программ за счет перекладывания некоторых забот с плеч программиста на плечи аппаратной части.
2.1 Аппаратный спрайтовый механизм
Эти возможности предоставляет опять-таки УВОЗУ. В его состав входят еще несколько регистров, доступных через страницу ввода-вывода ПП:
- Регистр октета точек (177024).
- Регистр кода цвета фона (177020, 177022).
- Регистр кода цвета точки (177016).
- Регист¬р маски записи в планы (177026).
Первые три регистра удобно рассматривать вместе, так как используются они также вместе.
Давайте представим себе изображение на экране как «картинку» определенного цвета, накладываемую на «фон». Это может быть символ (в виде буквы, например) либо какое-нибудь определенное изображение.
Такое представление удобно, если требуется перемещать объект по экрану, например, в динамической игре. Очень часто нужно, чтобы этот объект, называемый спрайтом, не затирал старое изображение, а двигался «поверх» него.
Чтобы реализовать эту задачу, нужно выполнить последовательность действий:
- Сохранить старое изображение (фон).
- Вывести на экран спрайт таким образом, чтобы изменился цвет только тех точек, где спрайт «присутствует».
- Некоторое время «продержать» эту картинку на экране.
- Воспроизвести старое изображение, затерев спрайт.
Самая трудоемкая задача — в пункте 2. Чтобы ее решить программно, нужно совершить целый ряд побитных логических операций с фоном и спрайтом.
Эта операция реализуется в УКНЦ аппаратно. Пусть наш спрайт по габаритам умещается в 8 последовательных точек (по горизонтали).
Регистр октета точек представляет собой «макет» спрайта в некотором сечении.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Логической единице в байте соответствует цвет спрайта, а 0 — цвет фона.
Цвет спрайта, или точки (наш спрайт пока одноцветный), определяет регистр кода цвета точки (177016). Его формат:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
2 | 1 | 0 |
- 0 разряд — информация плана 0.
- 1 разряд — информация плана 1.
- 2 разряд — информация плана 2.
Фон может быть многоцветным, поэтому регистр кода цвета фона отражает содержимое полного Т-слова в видеопамяти. Этот регистр двухсловный:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
2 | 1 | 0 | 2 | 1 | 0 | 2 | 1 | 0 | 2 | 1 | 0 | ||||
4 | 3 | 2 | 1 |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
2 | 1 | 0 | 2 | 1 | 0 | 2 | 1 | 0 | 2 | 1 | 0 | Содержимое трех планов ВОЗУ для каждой точки | ||||
8 | 7 | 6 | 5 | Порядковые номера точек в октете |
Эти три регистра могут участвовать в следующих процессах (или фазах):
- Чтение.
Вызов:
- Чтение регистра октета точек, например:
TST @#177024
.
Действие:
- Регистр кода цвета фона загружается из ВОЗУ содержимым трех планов в формате, представленном выше, то есть каждой точке соответствует триада битов. Теперь его можно запомнить в две ячейки ОЗУ либо в два регистра. Это фон, т.е. старое изображение. В этом процессе из регистра октета точек считывается 0, т.к. он доступен лишь по записи. Перед этой фазой надо предварительно загрузить РА требуемым адресом.
- Модификация и запись.
Вызов:
- Запись в регистр октета точек байта, соответствующего выбранному сечению спрайта, например:
MOVB (R1)+?, @#177024
.
Действие:
а) Модификация.
- В те триады в регистре кода цвета фона, которым соответствует установленные разряды регистра октета точек, аппаратно записывается значение регистра кода цвета точки. Остальные триады не меняются.
б) Запись.
- Проводится загрузка планов ВОЗУ модифицированным значением регистра кода цвета фона.
- То есть после этого процесса в октете спрайт наложится поверх фона, перекрашивая лишь те точки, где он «присутствует».
Чтобы вывести весь спрайт целиком, нужно повторить несколько раз эти процессы, каждый раз запоминая регистр кода цвета фона после фазы «чтение», и менять содержимое РА и регистра октета точек.
Если спрайт многоцветный, то надо последовательно проводить фазу «модификация-запись», предварительно загружая новые значения в регистр кода цвета точки. Запоминать же фон из регистра кода цвета фона надо лишь один раз — в начале для каждого октета.
2.2 Регистр маски записи в планы
Этот регистр позволяет запретить запись в каждый план памяти. Адрес — 177026. Его формат:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
2 | 1 | 0 |
- 0 разряд: 1 — запрещена запись в план 0.
- 1 разряд: 1 — запрещена запись в план 1.
- 2 разряд: 1 — запрещена запись в план 2.
При запрещении записи в соответствующие планы чтение происходит как обычно, но вот записать в план информацию с помощью регистрового доступа уже невозможно. Где и как это излишество можно использовать, рассказано в Главе 6.
Пример 8. Мираж на экране
Посмотрите на экран. Если он пуст, включите машину. Делайте с ней все что угодно, лишь бы на экране было побольше всего изображено (хотя вполне хватит и надписи «Загрузка из сети»). Теперь войдите в монитор ПП, найдите там ячейку 177026. Запишите в нее любое число от 1 до 6 (рекомендую значение 2).
Выйдите из монитора ПП и продолжайте работать, но так, чтобы изображение поменялось. Например, выполните очистку экрана. На экране останется изображение (правда, не такое яркое, как было), которое остается теперь под защитой регистра маски. Чтобы убрать эти привидения, обнулите этот регистр: (177026)=0, и очистите экран.
Резюме к §2
- Чтобы ускорить работу видеоинформацией (УКНЦ — далеко не самая быстрая ЭВМ), можно в качестве ВОЗУ использовать ОЗУ ЦП + ОЗУ ПП, указывая в таблице строк адреса меньше 100000.
- Повысить эффективность программ, работающих с динамической видеоинформацией, позволяет аппаратный спрайтовый механизм.
- Спрайтом называется картинка, которую нужно накладывать на фон и перемещать таким образом, чтобы она не затирала фон и двигалась как бы поверх него.
- Спрайтовый механизм представлен тремя регистрами:
- октета точек (РО), (177024)
- кода цвета точки (РТ), (177016)
- кода цвета фона (РФ), (177020) и (177022)
- Регистр октета точек можно представить как срез спрайта в некотором горизонтальном сечении. Он состоит из 8 бит. Каждый бит соответствует точке в сечении. Установленный бит указывает, что точка принадлежит спрайту, а сброшенный — фону.
- Регистр кода цвета точки состоит из трех бит, каждый из которых соответствует своему плану ВОЗУ. РТ определяет, какой код будет записываться в ВОЗУ в точках, соответствующих установленным битам РО. Иными словами, в РТ указан цвет спрайта.
- Регистр кода цвета фона содержит 8 триад, каждая из которых содержит код в трех планах ВОЗУ в восьми точках.
- При чтении РО из него всегда считывается 0. При этом РФ аппаратно загружается содержимым Т-слова из ВОЗУ по текущему адресу.
- При записи в РО байта РФ аппаратно изменяется в тех триадах, которым соответствуют установленные биты в РО. Эти триады заменяются содержимым РТ. Затем модифицированное содержимое РФ аппаратно же заносится в ВОЗУ по текущему адресу.
§3. Каналы связи между процессорами.
3.0 Принцип разделения труда между процессорами
За одним зайцем погонишься — двух уже
не поймаешь.
А.Кнышев
Давайте попробуем разобраться, зачем в УКНЦ понадобилось ставить 2 процессора вместо одного, да еще и одинаковых.
В нормальных ЭВМ (а УКНЦ явно выходит из этого ряда), таких, как IBM PC, например, каждому или почти каждому внешнему устройству (давайте к ним отнесем экран и клавиатуру) соответствует нечто вроде своего процессора, который только тем и занимается, что обслуживает свое ВУ. Этим достигается большая выгода в скорости, а заодно и экономится труд (опять-таки время) программистов.
Если реализовать те же функции, что выполняет аппаратура, программно с помощью центрального процессора, который у нормальных машин максимум один, то получится казус: вместо того, чтобы решать в поте лица те задачи, которые уготованы ему программами пользователя, процессору приходится только тем и заниматься, что выводить что-то на экран, принимать что-то с клавиатуры либо, не дай Бог, работать с дисководами.
Какая при этом получается скорость? Посмотрите на пользователей IBM-якобы-совместимой машин «Поиск», в которой все это реализовано программно. Вам бросится в глаза медленная реакция, вялые движения и сонливость этих несчастных.
А взгляните теперь на пользователей УКНЦ! Да в их глазах прямо-таки сияет гордость за родную машину. Ведь как-никак целый процессор отвечает за работу внешних устройств, и целое ОЗУ величиной аж в 32 Кб «брошено» на его нужды.
Центральный процессор может спокойно, не особо напрягаясь, заниматься своим делом, а вся эта грязная работа, вся эта суета с клавиатурой, экраном, дисководом перекладывается на периферийный.
3.1 Общение между процессорами
Присоедините к телефонному аппарату
дверной звонок. Тогда, взглянув в дверной
глазок, вы сможете узнать, кто звонит вам
по телефону.
А.Кнышев
Итак, каждый процессор занимается своим делом, причем одновременно.
Возникает вопрос: как общаются эти ребята, ведь взаимодействие между ними обязательно, и от его эффективности зависит общая эффективность работы машины в целом.
Еще при обсуждении адресного пространства было вскользь замечено, что периферийному процессору доступно все ОЗУ в машине через регистровый механизм доступа. Т.е. он легко может изменять ОЗУ ЦП также, как он меняет ВОЗУ.
Такой подход не решает, конечно, проблемы общения — ведь ЦП не видит через регистровый доступ ПП и его ОЗУ, а он как-никак центральный!
Чтобы не впасть в меланхолию, перейдем скорее к каналам связи между ЦП и ПП. Эти каналы подобны проволочному телеграфу или даже телефону с двумя абонентами. При этом телефонных линий целых 3 — две двунаправленные, т.е. по ним может вестись передача данных в двух направлениях, и третья — однонаправленная.
Передача информации ведется побайтно. Двунаправленные — каналы 0 и 1. Однонаправленный канал — канал 2. Эти каналы — высокоскоростные, и их пропускная способность ограничивается лишь расторопностью процессоров.
3.2 Общая структура каналов
Каждый двунаправленный канал (0 и 1) со стороны центрального процессора в странице ввода-вывода имеет 4 регистра:
- регистр состояния источника;
- регистр состояния приемника;
- регистр данных источника;
- регистр данных приемника.
Однонаправленный канал (2) имеет со стороны ЦП только регистры состояния и данных источника (ЦП по нему может только отправлять информацию).
В странице ввода-вывода ПП схожая картина. Разница в том, что регистры состояния источников объединены в один регистр, то же сделано и с регистрами состояния приемников. Здесь отсутствуют регистры источника для канала 2 (ПП может лишь принимать по нему).
3.3 Описание канальных регистров
Канал | Вид регистра |
ЦП | ПП | ||||
Адрес | а.в.п. | Адрес | а.в.п. | ||||
Канал 0 | источник | с | 177564 | 64 | с | 177076 | 324 |
д | 177566 | д | 177070 | ||||
приемник | с | 177560 | 60 | с | 177066 | 320 | |
д | 177562 | д | 177060 | ||||
Канал 1 | источник | с | 176664 | 464 | с | 177076 | 334 |
д | 176666 | д | 177072 | ||||
приемник | с | 176660 | 460 | с | 177066 | 330 | |
д | 176662 | д | 177062 | ||||
Канал 2 | источник | с | 176674 | 474 | с | ||
д | 176676 | д | |||||
приемник | с | с | 177066 | 340 | |||
д | д | 177064 |
Сторона ЦП.
Формат регистров состояний:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
r | p |
- 0-5 разряды — не используются.
- 6 разряд — разрешение прерывания при установленном разряде 7:
- 1 — прерывание разрешено,
- 0 — прерывание запрещено.
- 7 разряд:
- Для источников: готовность к передаче данных.
- Сбрасывается в лог. 0 при записи в регистр данных со стороны ЦП.
- Устанавливается в лог. 1 по команде RESET и по чтению сответствующего регистра данных со стороны ПП.
- Для приемников: готовность к приему данных.
- сбрасывается в 0 по команде RESET и по чтению со стороны ЦП.
- устанавливается в 1 при записи в соответствующий регистр данных со стороны ПП.
- Для источников: готовность к передаче данных.
Формат регистров данных:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- Для источников: доступны по записи, читаются как 0.
- Для приемников: доступны лишь для чтения.
Сторона ПП.
Формат регистра состояний источников:
Адрес 177076
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
г1 | г0 | в0 | г0 | р0 |
- 0 разряд — разрешение прерываний от нулевого канала:
- 1 — разрешены прерывания по а.в.п. 324 при установленном разряде 3.
- 0 — запрещены прерывания.
- 1 разряд — разрешение прерываний от первого канала:
- 1 — разрешены прерывания по а.в.п. 334 при установленном разряде 4.
- 0 — запрещены прерывания.
- 2 разряд — выключение регистров канала К0 из адресного пространства ЦП.
- 1 — выключены
- 0 — включены
- 3 разряд — готовность регистров источника К0
- 1 — К0 готов для записи нового байта
- 0 — не готов (предыдущая посылка не была прочитана).
- 4 разряд — готовность регистра источника К1
- 1 — готов
- 0 — не готов
Формат регистра состояний приемников:
Адрес 177066
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
res | г2 | г1 | г0 | р2 | р1 | р0 |
- 0, 1, 2 разряд — разрешение прерываний 0, 1 и 2 каналов соответственно
- 1 — разрешены
- 0 — запрещены
- 3, 4, 5 — готовность каналов 0, 1, 2 соответственно к приему данных
- 1 — готов (есть данные для чтения)
- 0 — не готов
- 6 разряд — разрешение прерывания по команде "RESET" (код 000005) на магистрали ЦП.
- 1 — формируется прерывание по а.в.п. 314.
- 0 — прерывание закрыто.
Формат регистров данных тот же, что и в магистрали ЦП.
Все эти регистры сведены в таблицу 3.1.
3.4 Как работают каналы?
Предположим, понадобилось отправить информацию из ЦП в ПП по каналу К0.
Мы проверяем регистр состояния источника (177564), и, если установлен бит 7 (канал готов для записи), записываем в регистр данных источника (177566) байт, который нужно передать.
При этом сбросится бит 7, указывая на то, что канал занят, а по адресу 177060 в странице ввода-вывода ПП (регистр данных приемника ПП) появится наш байт.
Обычно в регистре-приемнике разрешено прерывание (установлен соответствующий разряд), и, так как в регистре состояния приемника установится бит 3 (готовность К0 к приему данных), сработает прерывание, и управление предастся программе обработки прерывания, адрес которой находится в ячейке 320.
Как правило, в ней считывается регистр данных в ОЗУ ПП, при этом сбросится бит готовности приемника в ПП, а также установится бит готовности источника ЦП. Канал возвратился в исходное состояние и готов к новой передаче.
Этот механизм одинаков для всех каналов и вне зависимости от того, какой процессор выступает в роли источника, какой — в роли приемника информации.
Пример 9. Параллельная инверсия экрана
Давайте пустим наперегонки два процессора. Они будут инвертировать видеопамять рабочего экрана слово за словом, каждый со своей стороны и с помощью своих регистров.
Стартовый сигнал от ЦП к ПП передастся как прерывание от 1-го канала. Для этого программу инвертирования ПП мы сделаем в виде программы обработки прерываний от приемника K1 в ПП. Тогда при старте программы в ЦП произойдет синхронный старт точно такой же программы в ПП.
Установка процедуры в ЦП (работаем в мониторе ЦП):
176664: 000100 1000: 012737 MOV #1, @#176666 000001 176666 000137 JMP @#40300 040300 40300: 005737 TST @#0 * 000000 010046 MOV R0, -(SP) 010146 MOV R1, -(SP) 012700 MOV #100000,R0 100000 012701 MOV #154540,R1 154540 A: 010037 MOV R0, @#176640 * 176640 005137 COM @#176642 * 176642 005200 INC R0 020001 CMP R0, R1 001371 BNE A 012601 MOV (SP)+, R1 012600 MOV (SP)+, R0Установка программы в ПП (работаем в мониторе ПП):
330: 040300С адреса 40300, но уже в ОЗУ ПП запишите ту же процедуру, изменив три выделенных звездочкой слова:
- вместо 0 — 177062,
- вместо 176640 — 177010,
- вместо 176642 — 177014.
В конце процедуры припишите код 2 (RTI). Теперь войдите в монитор ЦП и дайте старт:
1000 <ИСП>.Белая полоса, пробежавшая по экрану — это результат отставания ПП от ЦП.
3.5 Использование каналов в УКНЦ
Канал К0 используется системными программами для терминального ввода-вывода, чему, собственно, и посвящена эта книга. Программы центрального процессора посылают информацию, подлежащую выводу на экран, а периферийный, сканируя клавиатуру, выдает ЦП конечные результаты этого сканирования.
Канал К1 отвечает за работу с принтером (параллельным программируемым интерфейсом).
Канал К2 заведует передачей массивов данных между ОЗУ ЦП и внешними устройствами, доступными периферийному процессору.
Использование прерываний в каналах позволяет экономить время в работе каждого процессора. Оба они могут заниматься какими-то делами, и если одному из них «приспичит» послать своему собрату по разуму информацию, ему достаточно записать в канал посылку, и продолжить свои процессорные дела. Второй процессор немедленно отзовется прерыванием на эту посылку и спишет ее в свое ОЗУ. Дальше он сам решит, что с ней делать, а пока он выходит из программы обработки прерываний и возвращается к своей прерванной программе.
Резюме к §3
- В УКНЦ два процессора — центральный и периферийный.
- Работа их разделена по следующему принципу: ЦП исполняет программы пользователя (в ОЗУ ЦП); ПП программно реализует обслуживание внешних устройств.
- Центральный процессор «приказывает» периферийному, какие операции следует сделать на ВУ, а ПП выполняет его приказы с помощью программ, расположенных в своем ОЗУ.
- Приказы отправляются по каналам связи между ЦП и ПП.
- Есть всего 3 канала — К0, К1, К2. Каналы 0 и 1 — двунаправленные, канал 2 — однонаправленный (от ЦП к ПП).
- Каналы представлены в страницах ввода-вывода регистрами источников и приемников. И источники, и приемники имеют свои регистры состояния и данных.
- Регистры данных — это ячейки, младший байт которых доступен для записи из одного процессора, и для чтения из другого. Т.е. РД источника в ПП является и РД приемника в ЦП.
- Регистры состояния указывают на факты чтения и записи в регистры данных со стороны процессоров, а также разрешают прерывания по этим фактам.
- Регистры состояния со стороны ПП позволяют также:
- разрешать прерывания с а.в.п. 314 по команде ЦП RESET.
- выключать регистры К0 из страницы ввода-вывода ЦП.
- Умелое использование прерываний от каналов позволяет «синхронизировать» работу процессоров в нужные моменты времени.