Найти в Дзене
Старый Регенератор

"Ручная трансляция"

Пока идет монтаж УНЧ из предыдущих заметок (оказалось не так-то просто совместить плотный монтаж элементов на плате с конструктивом приемника "Урал-авто"), расскажу немного о программировании — но без программ для программирования.

На эту мысль натолкнула заметка, так и названная ее автором: "Как первые программисты написали программы для программирования без программ для программирования". К сожалению, именно о способе написания программ в заметке практически ничего нет. Попробую заполнить этот пробел, тем более, что этим мне приходилось заниматься около 40 лет назад. Называется это "ручная трансляция" и кратко описана, например, во 2-м томе известной книжки Хоровица и Холла "Искусство схемотехники" (изд. 1984 г.).

Конечно, в настоящее время ручное создание кода никакого практического значения не имеет. Возможно (возможно), созданием программ именно в кодах сейчас могут заниматься разработчики микропрограммного обеспечения процессоров, да и у них наверняка имеется программный инструмент, облегчающий это занятие, так что ручная правка маловероятна.

Итак, потребовалось нам на заводе, году так в 1985-м, сделать контроллер на 580-й серии для выполнения некоторой задачи. Из инструментов был самопаянный "Микро-80" с приставкой для программирования ПЗУ типа 556РТ4/5 и монитором (имеется в виду не устройство отображения, а встроенная программа), позволяющим заносить в память HEX-коды с помощью клавиатуры и затем копировать их в ПЗУ.

Также был в наличии список команд микропроцессора с мнемоникой команд, кодами операций, размерами команд, устанавливаемыми после выполнения команды флагами и проч. информацией. Мнемоника некоторых команд процессора 8085 (улучшенный аналог 8080, с одним питанием 5 В, встроенным тактовым генератором и т. п.) из вышеупомянутой книги приведена на рис. 1.

Рис. 1. Мнемоника команд микропроцессора 8085. Скан из книги "Искусство схемотехники", 1985 г.
Рис. 1. Мнемоника команд микропроцессора 8085. Скан из книги "Искусство схемотехники", 1985 г.

Разработка программы велась следующим образом. Сначала на листе бумаги писался текст программы. Простейший пример приведен на рис. 2.

Рис. 2. Пример текста программы.
Рис. 2. Пример текста программы.

Затем производилась кодировка команд и расстановка адресов меток (рис. 3).

Рис. 3. Код программы с адресами меток после "первого прохода".
Рис. 3. Код программы с адресами меток после "первого прохода".

Дело в том, что адреса переходов нельзя определить сразу (поэтому на рис. 3 вместо адресов перехода стоит "ХХ"). В данном примере это, конечно, сделать можно, т. к. в этой программе переходы только "назад". В реальной программе переходы могут быть и "вперед", т. е. адрес перехода при первом проходе еще неизвестен (а могут быть еще и подпрограммы), и определяется уже при втором проходе (рис. 4).

Рис. 4. Код программы с расставленными адресами переходов.
Рис. 4. Код программы с расставленными адресами переходов.

В общем, все ассемблеры работают примерно по такому "двухпроходному" принципу, только делают это автоматически.

Рис. 5. Текст программы.
Рис. 5. Текст программы.

Ну и в качестве подтверждения всего вышеизложенного два скана страничек моей рабочей тетрадки тех лет. На рис. 5 приведен текст программы.

Рис. 6. Код программы.
Рис. 6. Код программы.

А на рис. 6 показан уже не только текст программы, но и собственно код с адресами. И вот этот код уже можно записывать в ПЗУ, на перфоленту или на диск любым имеющимся в распоряжении автора программы способом. В "Искусстве схемотехники" авторы пишут:

"Все необходимые программы можно было бы, вообще говоря, транслировать вручную. Однако это очень утомительно; кроме того, любое изменение программы может привести к изменению большого числа адресов при ее повторной трансляции, что фактически означает необходимость выполнять заново существенную часть работы."

Поэтому немного об ассемблерах, облегчающих жизнь разработчика аппаратуры.

Ассемблер совсем необязательно создавать на сложных языках. Каждый может попробовать сделать его сам. Например, в одном из номеров журнала "Микропроцессорные средства и системы" 80-х годов был приведен пример ассемблера для процессора 8080 на языке Basic. Правда, перед его использованием пришлось привести имевшуюся у нас PDP11/05 с телетайпом в пригодное для работы состояние. Т. е. отремонтировать процессор (был неисправен триггер в слове состояния), добавить памяти (я изготовил память 8К слов на статических ЗУ 537РУ10 и заодно ПЗУ со штатными загрузчиками PDP), добавить к токовой петле 232 интерфейс для подключения терминала и сделать интерфейс LPT для подключения принтера.

После этого, несколько доработав приведенную в журнале программу и исправив прокравшиеся в нее ошибки, можно было уже получать непосредственно HEX-файл, который было значительно удобнее вводить в программатор, а впоследствии и программировать ПЗУ можно было уже автоматически.

Ну и не надо забывать об "РК-86", который уже имел в комплекте ассемблер, а затем и "Орион-128" с электронным диском и некоторым подобием элементарной операционной системы. Последний уже имел в своем составе и средства разработки: нормальную программу для программатора ПЗУ 573-й серии, и программу разводки печатных плат (для такого простейшего комплекса — вполне достойную).

Так что к концу 80-х у нас исчезла практическая необходимость в ручной трансляции программ. Хотя для тренировки и понимания процесса программирования и вообще работы процессора — это наверное полезно.