История вычислительной техники за рубежом

PDP-8: машина и её история

Содержание:

  1. Введение
  2. Семейство PDP-8
  3. Архитектура и система команд
  4. Мифы и легенды
  5. История моделей PDP-8
  6. Литература

 

1. Введение

Машина PDP-8 (Programmable Data Processor – 8) корпорации Digital Equipment (DEC) по общему признанию была предвестником будущих персональных компьютеров. Сейчас она стала заслуженным музейным экспонатом. Учитывая, что в СССР и нынешней России PDP-8 была малоизвестна, хотя и выпускался её аналог “Электроника-100И”, я решил дать в этом обзоре как описание PDP-8, так и историю самой машины. Ещё одна причина, укрепившая меня в этом намерении, – множество недостоверных, изобилующих ошибками публикаций, которые я встретил в Рунете, занявшись изучением данной темы.

2. Семейство PDP-8

Для начала нужно отметить, что PDP-8 – это не одна машина, а целое семейство серийно выпускавшихся миникомпьютеров. Первая модель миникомпьютера PDP-8 была анонсирована 22 марта 1965 г ., уже к 1972-му было выпущено более 16 тыс. этих машин [1]. А всё началось с того, что в 1957 г . только что родившаяся, основанная выпускниками Массачусетского технологического института (МТИ) Кеннетом Олсеном (Kenneth Olsen) и Харланом Андерсоном (Harlan Anderson) компания выпустила свой первый компьютер – PDP-1. Он стоил всего 120 000 долл. ($85 тыс. в минимальной комплектации) Нужно сказать, что оба учредителя знаменитой впоследствии корпорации не были новичками в вычислительной технике. До этого они выполнили б O льшую часть проектов при разработке машин AN/FSQ- 7, TX-0 и TX-2 в лаборатории Lincoln Labs . Экспериментальная машина TX-0 оказала большое влияние на дальнейшее развитие компьютерных архитектур. Капитал компании при её создании составлял 100 тыс. долл., а её владельцем на 70% была инвестиционная компания American Research and Development.

Относительно следующих PDP уместно привести цитату из статьи Леонида Черняка: “Следующая за PDP-1 машина – PDP-4 – имела много общего со своей предшественницей, но между ними программной совместимости не было, представление об обязательности в преемственности программного обеспечения пришло позже. В каждой последующей модернизации PDP повышалась производительность, расширялась номенклатура периферийных устройств. PDP-15 стала первой моделью, построенной на микросхемах; до этого использовался навесной монтаж дискретных элементов. Машина PDP-7 вошла в историю благодаря тому, что на ней Дэннис Ритчи и Кен Томпсон начинали разработку операционной системы, которая позже была перенесена на PDP-11" [2].

Компания росла, набиралась опыта и утверждалась, найдя свою нишу на рынке недорогих машин, которые впоследствии образовали отдельный класс, названный миникомпьютерами . Отметим, что в это время в мире господствовали большие ЭВМ, мэйнфреймы , стоившие более миллиона долларов. (В СССР этому направлению, появившемуся в 1952 г ., соответствовали машины И. С. Брука, а затем серии машин “Наири” и “Мир”.) В 1963-м DEC выпустила миникомпьютер PDP-5, предшественник PDP-8 – первой машины семейства PDP-8, появившейся в 1965 г . Данные по машинам семейства PDP приведены в табл. 1.

Таблица 1. Основные данные по ЭВМ семейства PDP

Модель Дата выпуска Разрядность Число машин Цена, тыс. долл.* Примечания
PDP-1 1960 18 50 120 Разработчик Ben Gurley
PDP-2 – ** 24 Только прототип
PDP-3 36 Одна машина была построена заказчиком, предположительно ЦРУ
PDP-4 1962 18 45 60 Предшествовала PDP-7. Разработчик C . Gordon Bell
PDP-5 11.08.1963 12 1000 27 Прародитель PDP-8. Разработчик C. Gordon Bell, Edson DeCastro
PDP-6 1964 36 23 300 Большая ЭВМ, выпускалась по заказу МТИ. Разработчик C. Gordon Bell
PDP-7 1965 18 120 72 Применялась в системах реального времени
PDP-8 22.03.1965 12 ? 50000 18,5 Самая дешёвая модель PDP
PDP-9 1966 18 445 35 Апгрейд PDP-7
PDP-10 1967 36 ? 700 110 Развитие PDP-6 для систем разделения времени. Выпускалась под названием DECSYSTEM-20
PDP-11 1970 16 >600000 10,8  
PDP-12 1969 12 725 27,9 Родственник PDP-8
PDP-13         Такой машины не было из-за распространённого в США предрассудка
PDP-14       Программируемый контроллер
PDP-15 1970 18 790 16,5 TTL-апгрейд PDP-9
PDP-16 1972 8/16 3 Специализированная модульная система

* Цены указаны за минимальную конфигурацию на первый год выпуска компьютера.
** Нет данных.
Источник: сайт www.faqs.org/faqs/dec-faq/pdp8/

pdp 8

Ещё несколько цитат из статей, посвященных PDP-8: “Машина PDP-8 была создана по заказу канадской энергетической компании для управления ядерным реактором. В своих воспоминаниях Олсен пишет, что, получив этот заказ, он решил отказаться от традиционного подхода, предполагавшего создание специализированной машины, и спроектировать универсальную, для которой задача данного заказчика была бы одной из возможных. Первые версии PDP-8 всё ещё собирались из дискретных компонентов, но в производстве компьютера использовались передовые технические решения, например автоматический монтаж задней панели. В результате снижалась себестоимость и открывалась возможность для массового серийного производства, чего раньше не было – каждая машина изготавливалась вручную, кустарно. В апреле 1965 года началось производство PDP-8, и эта машина стала первым в мире массовым компьютером. С четырьмя килословами памяти (слово 12 разрядов) и телетайпом она стоила всего 18 тыс. долл. (в базовой комплектации. — Прим. Э. П.), со временем цена ещё упала, и машина стала доступной практически для любого предприятия. Модель PDP-8/S выпускалась как экономичный вариант, с августа 1968-го начали производить PDP-8/I на интегральных микросхемах. В 1976 году появилась машина WPS-8, использовавшаяся в качестве специализированного текстового процессора" [2].

“…мини-компьютеры начались с машины PDP-8, выпущенной в 1964 году под руководством Алана Котока и Эдсона Декастро. При её проектировании были продолжены традиции открытой архитектуры и детального документирования, заложенные в PDP-1. Машина весила “всего” 80 кг (на самом деле 45! – Прим. Э. П. ), могла устанавливаться на столе, к ней…. подключался телетайп. Открытость архитектуры позволила многим фирмам включиться в производство самой разнообразной периферии. Поддержка функционирования в режиме реального времени открыла возможность для широкомасштабного использования PDP-8 в автоматизированных системах управления технологическими процессами" [3] .

“PDP-8 была большей частью совместима снизу вверх с PDP-5, машиной, которая была объявлена 11 августа 1963 и влияние на которую оказали две более ранние машины: LINC и CDC 160. Обе эти машины были 12-разрядными, с ОЗУ в 4K слов и простым, но мощным набором команд. Хотя некоторые люди считают первым мини-компьютером CDC 160, но PDP-8 окончательно утвердил мини-компьютеры как класс. В конце 1973-го машины семейства PDP-8 были самыми продаваемыми на рынке [5]”.

Семейство мини-компьютеров PDP-8 было создано корпорацией Digital Equipment Corporation (DEC) между 1965-м и 1990 годами. В конце 1973 г . оно было одним из наиболее успешно продаваемых в мире (уступив затем это звание Apple II). PDP-8 применялась для управления производственными процессами и экспериментами, для обработки текстов и ведения бизнеса, а также многих других областях.

Под это семейство было разработано более 60 периферийных устройств и более тысячи программ. Из периферийных устройств важно отметить наличие магнитных дисков и лент, разработанных самой DEC, так и многими сторонними организациями. Кроме того, имелась возможность подключения накопителя на магнитной ленте (НМЛ) IBM, 17 типов телетайпов, а также редких тогда графических дисплеев и, разумеется, устройств чтения перфоленты и вывода на перфоленту. Важно, что для PDP-8 были разработаны платы ввода и вывода аналоговых сигналов, что позволило применять её в составе лабораторного оборудования. Версия PDP-8/M является OEM-версией машины PDP-8/E, поэтому мы на ней останавливаться далее не будем. Выпуском машины занималось несколько заводов корпорации в США и Канаде (известно минимум четыре). При этом стоит отметить высокое качество производства, например, обеспечивался 100-процентный входной контроль всех комплектующих, введена система управления качеством, 100-часовое испытание в термокамере. (Вероятно, это потом позволило DEC стать одним из основных поставщиков ВТ в МО США.).

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

Сейчас трудно поверить, но PDP-8 был 12-разрядным компьютером. Это означало, что его процессор мог адресовать (не самым простым способом) только довольно крохотную по нынешним меркам память в 32768 12-разрядных слов (48 Кб; см. табл. 2). Время обращения к памяти 1,2 мкс (сравните с нынешней 50—70 нс памятью).

Таблица 2. Спецификация PDP-8/E

Размер слова, разрядов 12
Максимальный объём ОЗУ, слов 32К (8 банков по 4К слов)
Минимальное время исполнения команды, мкс 1,2
Условия эксплуатации  
температура, ? С От 0 до 55
влажность, % От 10 до 90
Потребляемая мощность ⇐ 450 Вт (может отличаться в зависимости от состава дополнительных модулей)
Габариты, дюйм (В ? Ш ? Г) 10,5 × 19 × 24
Масса, фунты 100 (из них 45 — блок питания)
Цена, долл.  
в минимальной конфигурации 4490 за инсталляцию и 53 в месяц (в 1974-м) DEC за эксплуатационное обслуживание
за расширенную конфигурацию 14 835 и 134 в месяц (в 1974-м) DEC за эксплуатационное обслуживание

Производительность – 385 тыс. сложений в секунду. Операция вычитания занимает почти вдвое больше времени – 5 мкс, а умножение двух 12-разрядных чисел со знаком, дающее 24-разрядный результат, – 256,5 мкс. Совсем низкая производительность на делении – 342,4 мкс. Однако, естественно, для машины была разработана опциональная плата арифметического ускорителя (Extended Arithmetic Element), которая повышала скорость операций деления и умножения до 40 мкс.

В данном обзоре рассмотрение будет базироваться на описании PDP-8/E, поскольку версия PDP-8/M является OEM-версией этой машины и в целом мало отличается от PDP-8/E.

Из архитектурных новшеств PDP-8 отмечу появление в ней общей шины, названной OMNIBUS (одно из значений этого слова “охватывающий всех, общедоступный”) . Контроллер этой шины позволял подключать к ней до 20 устройств. Популярна версия, что сокращенное название этой шины и стало общеизвестным термином bus (шина).

PDP-8 мы обязаны и появлению термина миникомпьютер . Его впервые употребил в своём отчёте руководитель по продажам отделения DEC в Англии Джон Ленг (John Leng). Словечко моментально стало сначала использоваться во внутрифирменном жаргоне, а затем и вне компании, хотя в маркетинговых целях этот термин был впервые использован компанией Interdata в 1968 г . [5].

Первые машины DEC имели открытую архитектуру и потому совместимые с PDP-8 машины выпускались не только как ОЕМ внутри США, но и другими странами. Список совместимых и полусовместимых моделей дан в табл. 3.

Таблица 3. Компьютеры, совместимые с PDP-8 [5; таблица приведена с большими сокращениями]

Модель Год выпуска Производитель Примечание
TPA1001 1969 Венгрия, KFKI На транзисторах
TPA1001/i 1971 Венгрия, KFKI Версия TPA1001на интегральных схемах
TPA/i 1971 Венгрия, KFKI Переименованная TPA1001/i
TPA/l 197 7? Венгрия, KFKI Усиленная TPA / i
TPAl/128H 1977? Венгрия, KFKI TPA/l с ОЗУ 128K слов
TPA/s 1977? Венгрия, KFKI на На базе кристалла ЦП фирмы Intersil
TPA Quadro 1978? Венгрия, KFKI совместимый Совместимый с DECmate
Электроника-100 ? СССР На транзисторах
Электроника-100И ? СССР Возможно клон PDP-8/I
Electrotechnica-100I ? Югославия Возможно, как и “Электроника-100И”
Саратов-2 ? СССР Как PDP-8/M, но в больших габаритах
DCC-112 1970 Digital Computer Controls Клон PDP-8/L
DCC-112H 1971 Digital Computer Controls  
MPS-1 1974 Fabritek Клон PDP -8/ L

3. Архитектура и система команд

PDP 8 – одноадресный компьютер общего назначения. Работает в арифметике, использующей двоичное дополнение. Имеет пять 12-разрядных регистров.
AC – аккумулятор – выполняет все логические и арифметические команды, команды сдвигов и управления. Через него же идёт и весь ввод-вывод.
MQ – регистр расширения аккумулятора для команд умножения и деления.
L – Link – одноразрядный регистр, служащий для переноса разряда при исполнениии арифметических команд (переполнение) и команд сдвигов; может быть программно проверен, очищен, инвертирован и сдвинут как часть AC.
CPMA – регистр, содержащий текущий адрес памяти для чтения или записи.
PC – программный счётчик.
MB – буфер памяти.
SR – 12-разрядный регистр переключателей панели управления. Если переключатель на панели поднят вверх, это соответствует 1 в его разряде SR, вниз – 0.

Базовая оперативная память – 4096 12-разрядных слов, разбитых на страницы по 128 слов в каждой. При этом особую роль играет нулевая страница, поскольку она активно используется для адресации ОЗУ (см. п. 3.2.1). При помощи контроллера оперативной памяти ОЗУ можно было нарастить до 32К слов (8 банков по 4К слов).

Следует отметить, что система команд в PDP 8/E по сравнению с более ранними машинами PDP 8/I и PDP 8/L была изменена: 11 новых команд были не просто добавлены, а переопределены значения соответствующих старых команд. На практике это означает несовместимость этих машин на уровне двоичного кода.

Читатель скорее всего забыл, что означает дополнение до единицы и двоичное дополнение числа, поскольку это использовалось только на машинах 1—2-го поколений. Итак, дополнение двоичного числа до единицы получается заменой всех 1 в числе на 0, а всех 0-й на 1. Двоичное дополнение – это дополнение до единицы плюс 1. Оно необходимо для представления в машине отрицательных чисел, чтобы заменить операцию вычитания сложением.

3.1. Ввод программы с пульта

Программист мог ввести программу в ОЗУ вручную с помощью клавиш специального регистра переключателей (SR), размещенного на консоли оператора (Programmer's Console), или с помощью более удобного процесса ввода с телетайпа ASR 33. Этот замечательный очень надёжный телетайп (в начале 1980-х годов я получил несколько таких устройств для своего сектора в ИПУ АН) имел кроме клавиатуры компактные устройства ввода-вывода на 8-дорожечную перфоленту.

3.2. Базовая система команд PDP 8/E

Машинные команды в PDP 8 делятся на три группы: команды, работающие с операндами в ОЗУ (memory reference instruction, коды команд с 0 по 4), вспомогательные команды (augmented instruction, коды команд 6 и 7) и обслуживающие команды (housekeeping instruction, код команды 5). Все команды содержат в разрядах с 0 по 2 код операции. Таким образом, формально машина имеет всего восемь команд, однако это не так, поскольку для команд второй группы есть расширение кода команды в других разрядах командного слова. Я насчитал всего 46 элементарных команд. Дело в том, что некоторые из них можно комбинировать в одном командном слове и тогда общее число команд резко возрастает. Это не слишком приятная ситуация для тех кто писал или захочет написать интерпретатор системы команд PDP 8. (Похожая ситуация, но доведённая до крайности, была в системе команд мини-ЭВМ НР 2100 компании Hewlett-Packard, система команд которой с небольшими изменениями была воплощена в СССР в северодонецких машинах М-6000, М-7000, позднее ставшими СМ-1, СМ-2. Там подобные комбинации давали 4096 вариантов команд сдвигов, и мне пришлось для них писать интерпретатор в интерпретаторе. :) Конечно, такое плотное кодирование команд пришлось делать не от хорошей жизни – все команды были одинаковой длины (что потом, возможно, вспомнилось разработчикам RISC-процессоров), и очень небольшой объём главной памяти.

3.2.1. Команды, работающие с операндами в ОЗУ

Формат команды
Биты

0—2 – код операции.
3—4 – способ адресации: бит 3 – содержит признак косвенной адресации, бит 4 – текущая или нулевая страница памяти. Подробнее их сочетания даны в табл. 4.
5—11 – адрес или данные.

Таблица 4. Способ адресации

Бит 3 Бит 4 Описание
0 0 Операнд находится на странице 0 по адресу, заданному битами 5—11 команды
0 1 Операнд находится на текущей странице по адресу, заданному битами 5—11 команды
1 0 Абсолютный 12-битовый адрес операнда берётся со страницы 0 по адресу, заданному битами 5—11 команды
1 1 Абсолютный 12-битовый адрес операнда берётся с текущей страницы по адресу, заданному битами 5—11 команды

В описаниях команд будем, следуя DEC, обозначать через Y адрес операнда, а через (Y) содержимое ОЗУ по этому адресу (см. табл. 5).

Таблица 5. Основная группа команд

Команда Мнемоника Код операции Описание
Логическое И AND Y 0 Выполняет операцию поразрядного логического умножения между (Y) и AC. Результат → в AC
Целочисленное сложение в 2-м дополнении TAD Y 1 (Y) + (AC) → в AC
Увеличение на 1 и
пропуск следующей команды, если 0
ISZ Y 2 (Y) +1 → (Y);
if (Y)=0 then PC+2
else PC+1. Используется для организации циклов
Сохранение и очистка AC DCA Y 3 (AC) → Y; 0 → AC
Переход на подпрограмму JMS Y 4 (PC)+1 → Y; Y+1 → PC
Безусловный переход JMP Y 5 Y → PC

* – Время исполнения при прямой адресации у всех команд, кроме JMP, – 2,6 мс, оно увеличивается на 1,2 мс при косвенной адресации и ещё на 0,4 мс при автоиндексировании. У команды JMP времена исполнения соответственно 1,2; 2,4; 2,6 мс.

Обратите внимание на команду “Переход на подпрограмму”. Поскольку в машине нет поддержки стековых операций, то перед началом подпрограммы просто резервируется слово для сохранения адреса возврата.

3.2.2. Вспомогательные команды

Вспомогательные команды делятся на две категории: команды ввода-вывода (IOT, код операции 6) и функциональные команды, обозначенные в руководстве как OPERATE (код операции 7). Биты с 3 по 11 в этих командах являются расширением кода операции.

Функциональные команды, время исполнения которых 1,2 мс, в свою очередь делятся на три группы.

А. Первая группа (сдвиги, инкремент, очистка) опознаётся по 0 в бите 3 командного слова.
Б. Вторая группа (проверка содержимого аккумулятора) опознаётся по 1 в 3-м бите и 0 в 11 бите.
В. Третья группа (пересылки данных между AC и регистром MQ) 1 в 3-м и 11-м битах командного слова.

А. Команды первой группы работают с аккумулятором и одноразрядным регистром переноса L. Эта группа команд микропрограммируема, что означает возможность задать в одном командном слове сразу несколько операций.

Сначала рассмотрим элементарные операции этой группы, а затем — как из них формируется сложная команда (см. табл. 6).

Таблица 6. Вспомогательные команды первой группы

Команда Мнемоника Код операции, octal Описание
Нет операции NOP 7000 Вызывает задержку на один машинный цикл (1,5 мс) перед исполнением следующей команды. Применяется там, где нужно подобрать время синхронизации, чтобы временно удалить команду, но оставить для неё место в ОЗУ и т. д.
Инкремент аккумулятора IAC 7001 AC+1 → AC (в арифметике с двоичным дополнением)
Сдвиг влево RAL 7004 Содержимое битов AC 1—11 сдвигается на один двоичный разряд влево, AC0 → L, (L) → AC11.
Сдвиг на два разряда влево RTL 7006 Команда логически эквивалентна двукратному исполнению команды RAL
Сдвиг вправо RAR 7010 Содержимое битов AC 0—10 сдвигается на один двоичный разряд вправо, AC11 → L, (L) → AC0.
Сдвиг на два разряда вправо RTR 7012 Команда логически эквивалентна двукратному исполнению команды RAR
Обмен местами половинок AC BSW 7002 AC0—6 → AC7—11
AC7—11 → AC0—6
т.е. содержимое половинок аккумулятора меняется в нём местами
Дополнение регистра сдвига CML 7020 Выполняется двоичное дополнение содержимого L (равносильно инвертированию)
Дополнение аккумулятора CMA 7040 (AC) поразрядно дополняется до 1
Дополнение и инкремент аккумулятора CIA 7041 Содержимое AC преобразуется в его двоичное дополнение и увеличивается на 1.
Очистка L СLL 7100 0 → L
Установка L в 1 STL 7120 1 → L (равносильно последовательному исполнению команд CLL и CML)
Очистка аккумулятора CLA 7200 0 → AC (очищается каждый бит AC)
Установка AC STA 7240 Каждый бит AC устанавливается в 1

Примечание. Недопустимы следующие сочетания кодов: RAL RAR (восьмеричный код 7014), RTL RTL (код 7016), а также составные команды с этими сочетаниями кодов. Эти коды зарезервированы для возможных расширений системы команд.

Формат составной команды:

Единица в соответствующем разряде командного слова кодирует указанную для этого разряда команду. Исполнение некоторых последовательностей команд логически противоречиво, поэтому в руководстве даются соответствующие предупреждения, например команды IAC не следует применять вместе с командами сдвигов.

Б. Команды второй группы устроены также как первой. В табл. 7 приведены элементарные команды, из которых можно составить сложное командное слово.

Таблица 7. Вспомогательные команды второй группы

Команда Мнемоника Код операции, octal Описание
Останов HLT 7402 Выполняет останов программы, загорается индикатор на панели управления, запуск программы кнопкой на панели. Если команда присутствует в составной команде, то она исполняется последней
Безусловный пропуск команды SKP 7410 (PC)+1 → PC
Пропуск следующей команды, если L не равно 0 SNL 7420 if (L)=1 then (PC)+1 → PC
Пропуск следующей команды, если L равно 0 SZL 7430 if (L)=0 then (PC)+1 → PC
Пропуск, если аккумулятор 0 SZA 7440 if (AC)=0 then (PC)+1 → PC
Пропуск, если аккумулятор не 0 SNA 7450 if (AC)<>0 then (PC)+1 → PC
Логическое И с регистром SR OSR 7404 (AC) логически складывается с (SR) – регистром переключателей на панели управления, a Если перед этим выполнена команда CLA, то эта команда соответствует просто чтению регистра SR
Пропуск, если минус SMA 7500 if (AC0) =1 then (PC)+1 → PC
Пропуск, если плюс SPA 7510 if (AC0) =0 then (PC)+1 → PC
Очистка аккумулятора CLA 7600 0 a AC (аналогичная команда есть и в первой группе. Здесь она введена, для того, чтобы использовать в составных командах)

Формат составной команды для второй группы:


 Глядя на команды второй группы, мы видим, что система команд несколько несбалансированна – в объектном коде получилось избыточное количество команд переходов, поскольку каждый пропуск обходит команду безусловного перехода.

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

Таблица 8. Команды третьей группы

Команда Мнемоника Код операции, octal Описание
Очистка AC и MQ CAM 7621 0 → AC; 0 → MQ
Пересылка MQ в AC MQA 7501 (MQ) логически складывается с (AC) и результат → AC
Загрузка MQ MQL 7421 (AC) → MQ; 0 → AC
Обмен содержимым MQ и AC SWP 7521 (AC) ← → (MQ); если установлен бит CLA, то 0 → MQ

3.3.3. Команды ввода-вывода (IOT)

Внешние устройства в PDP-8 делятся на внутренние, подключенные непосредственно к шине OMNIBUS, и внешние, подключенные через специальный интерфейсный модуль. Специфика общей шины OMNIBUS (144 линии, из которых 96 сигнальные) такова, что последние три бита команды определяют операцию, выполняемую устройством. Хотя формально команда IOT с кодом операции 6 одна, но она в ассемблере PDP-8 рассматривается как множество отдельных команд в зависимости от значений других битов командного слова.

Формат команд:

Прежде чем описывать сами команды, нужно сказать несколько слов о прерываниях.

Прерывания

Прерывания рассматриваются аналогично переходу на подпрограмму с адресом 0. В слове 0 сохраняется адрес возврата, а переход на саму подпрограмму обработки прерывания находится по адресу 1 (табл. 9). Выход из прерывания JMP I 0. На время обработки прерывания другие прерывания запрещены, но могут быть программно разрешены с помощью команды ION, которая будет описана ниже.

Таблица 9. Команды ввода-вывода

Команда Мнемоника Код операции, octal Описание
Разрешение прерываний ION 6001 Разрешает процессору обрабатывать запросы на прерывание
Пропуск, если прерывания разрешены SKON 6000 Проверяется состояние флага разрешения прерываний. Если он установлен (прерывания разрешены), следующая команда пропускается. Одновременно с проверкой этот флаг сбрасывается
Запрет прерываний IOF 6002 Сброс флага разрешения прерываний
Пропуск, если есть запрос на прерывание SRQ 6003 Проверяется состояние внутренней шины запроса на прерывание. Если на ней низкий уровень, означающий, что одно или несколько устройств запрашивают прерывание, следующая команда пропускается
Загрузить флаги процессора в AC GTF 6004 Флаги → AC. Схема флагов приведена на рис.
Восстановить флаги RTF 6005 AC → Флаги . Команда обратная GTF
Пропуск, если больше чем SGT 6006 Если флаг GT установлен, то пропуск следующей команды. Эта команда работает только если установлен модуль расширенной арифметики KA8-E
Очистка всех флагов CAF 6007 Эта команда логически эквивалентна нажатию клавиши CLEAR (очистка) на панели управления. Она генерирует сигнал INITIALIZE на шине OMNIBUS и внешнем интерфейсе в/в. Команда не может быть дана пока устройство активно, должно пройти не менее 100 мс после команды TLS

Если вы решили, что это всё, этим система команд исчерпывается и можно расслабиться, то вы, как и я, ошиблись. Дело в том, что машина имеет опциональный модуль расширенной арифметики, у которого есть своя дополнительная система команд. Поскольку все системные программы написаны в приведённом выше наборе команд, то позволю себе прервать данное мазохистское занятие и продолжить его, если у читателей будет конкретный интерес к командам расширенной арифметики.

3.3. Программное обеспечение

3.3.1. Состав ПО

Набор инструментальных средств, доступных программисту на PDP-8 необычайно обширен. В состав программного обеспечения входили такие процедурные языки программирования (ЯВУ) высокого уровня, как Фортран (в двух версиях), FOCAL (Formula Calculator Language), DIBOL (Digital Equipment Corporation Business Oriented Language) и разнообразные макроассемблеры, Бейсики, утилиты, отладчики и однозадачная ОС. Причём появлялись они в разных реализациях от простейших урезанных версий до весьма развитых на тот момент.

3.3.2. Макроассемблер Macro 8.

Описание макроассемблера датируется 1965 годом [4]. Там же говорится, что он был перенесён с PDP-5. Судя по цене на обложке, всего 2 долл., документация в ту пору стоила существенно меньше, чем сейчас. :)

3.3.3. PDP-8 4K Fortran

PDP-8 4K Fortran – однопроходный компилятор, однократно читающий перфоленту с программой и выдающий перфоленту с объектным кодом. Впрочем, полной ясности здесь нет.

Отличительная особенность его в том, что после метки оператора и знака комментария (символ С в первой колонке) ставится точка с запятой (;), метки – положительные целые числа от 1 до 2047, поскольку машина 12-разрядная. Из-за малого объёма памяти, операторов с метками в программе не должно быть более 40. Значимая длина идентификатора – 4 знака, т. е. переменные XSUM1 и XSUM2 будут для компилятора идентичны. Поскольку символ пробела не играет никакой роли (игнорируется компилятором, кроме как в холлеритовских константах), то запись ЕX IT, EXI T и EXIT обозначает одну и ту же переменную. Знаком продолжения строки является одиночная кавычка (') в качестве последнего символа на предыдущей строке. Пример записи программы:

Пример записи программы

Встроенные функции. В данной версии поддерживаются следующие встроенные функции:

SQTF (x) – корень квадратный из x;
SINF (x) – синус;
COSF (x) – косинус;
ATNF (x) – арктангенс;
EXPF (x) – возведение в степень;
LOGF (x) – логарифм.

Представление чисел: целые числа со знаком могут быть в диапазоне от 2047 до +2047, т. е. 2**11 – 1. Если они выходят за эти границы, то берутся по модулю 2048. Число с плавающей запятой представлено в трёх 12-разрядных словах:

При этом мантисса числа всегда нормализована, это означает, что самый левый (старший) бит у неё всегда значащий (не ноль). И экспонента, и мантисса хранятся в форме двоичного дополнения. Тип переменной определяется по умолчанию по первой букве её имени: имена, начинающиеся с I, J, K, L, M и N означают целочисленные переменные, с остальных букв латинского алфавита – действительные.

Массивы в PDP-8 4K Fortran имеют целочисленные индексы, при этом массивы только одномерные. Работа с матрицами реализуется через индексную арифметику одномерных массивов.

Символы представлены на перфоленте в 8-битовом коде ASCII, при этом символ занимает одно 12-разрядное слово и выровнен в нём вправо.

Операторы управления программой

Оператор STOP прекращает исполнение программы и печатает на телетайпе восклицательный знак “!”. После этого программу можно запустить на повторный счёт.
Оператор PAUSE останавливает исполнение программы. Оно может быть продолжено нажатием клавиши Continue на пульте управления PDP-8.
Оператор END указывает компилятору окончание текста программы, поэтому каждая программа должна заканчиваться этим оператором.
Реализованы операторы GOTO, вычисляемый GOTO, IF, а также оператор цикла DO. Допускается вложенность циклов. В документации, правда, не указана глубина вложенности.

В наборе операторов ввода вывода есть некоторое отступление от FORTRAN II.

Два оператора ACCEPT и TYPE позволяют соответственно читать с клавиатуры телетайпа и печатать на нём, а операторы READ и WRITE соответственно считывать и выводить на перфоленту. Структура операторов ACCEPT и TYPE совпадает с фортрановской, т. е. после ключевого слова идёт номер предложения FORMAT, а затем список переменных. Операторы READ и WRITE имеют существенно более сложную нестандартную структуру, обусловленную перфоленточным устройством DECtape:

WRITE UNIT, BLOCK, номер _FORMAT, список _ переменных

где UNIT задаёт номер устройства вывода на перфоленту, а BLOCK — номер блока на перфоленте. Двоичные данные выводятся на неё блоками по 128 12-разрядных слов. Символы представлены на перфоленте в 8-битовом коде ASCII, при этом символ занимает одно 12-разрядное слово и выровнен в нём вправо.

Ключей в операторе FORMAT немного: I, E, " (холлеритовские, или строковые, константы) и / (CR, LF).

Для работы фортрановской программы в ОЗУ PDP-8 загружается исполнительная система, именуемая FORTRAN Operating Systems.

3.3.4. OS/8 Industrial BASIC

Этот Бейсик состоит из пяти отдельных частей:

  • редактора;
  • компилятора в псевдокод;
  • загрузчика;
  • системы поддержки времени исполнения;
  • оверлеев системы поддержки времени исполнения.

Посмотрим на набор операторов языка OS/8 Industrial BASIC.

LET x = expression присваивание значения переменной.

PRINT expression вывод на печать.

READ xl, x2,...,xn инициализация переменных из списка значений.

DATA xl , x2,...,xn список начальных значений

GOTO n изменение порядка выполнения программы

IF v l <relation> v2 GOTO X условное изменение порядка выполнения программы

IF v l < relation > v 2 THEN X условное изменение порядка выполнения программы

FOR v=xl TO x2 STEP x3 TO заголовок цикла

NEXT v окончание цикла

GOSUB n вызов подпрограммы

RETURN возврат из подпрограммы

INPUT xl , x2,...,xn ввод начальных значений с терминала

REM строка с комментарием программы

RESTORE восстановить список данных

DEF определить функцию

STOP остановить выполнение программы

END конец программы

DIM list объявление массивов

UDEF объявление функций, закодированных пользователем (стыковка с ассемблером?)

TIMER ассоциирование подпрограммы обработки прерывания с внешним событием

CONTACT

COUNTER

DISMISS возврат из подпрограммы обработки прерывания

 

Команды редактирования и управления OS/8 INDUSTRIAL BASIC

LIST – вывести листинг текущей программы.

RUN – запустить текущую программу.

SCRATCH – удалить текущую программу.

SAVE – сохранить текущую программу.

OLD – записать на место существующей программы.

NEW – новая программа.

NAME – переименовать текущую программу .

BYE – выход из Бейсика.

OS/8 INDUSTRIAL BASIC имел также полный набор стандартных встроенных арифметических и строковых функций и достаточно широкий набор вспомогательных функций, в том числе довольно забавных, таких как PNT (X) для вывода на печать управляющих символов [например, PNT (13)], TRC (X) – отладочная функция для трассировки – включает печать номеров исполняющихся операторов.

Операции управления поддержаны следующими функциями, которых я не видел в других Бейсиках:

ANI – аналоговый ввод (с АЦП).

AN0 – аналоговый вывод (на АЦП).

RDI – числовой ввод.

RDO – числовой вывод.

SDO – послать цифровой вывод.

CN1 – установить счётчик.

CN0 – читать счётчик.

CLK – установить или читать таймер.

CNT, LNE, STA управление асинхронными операциями.

Конечно, операторы READ, DATA и RESTORE – наследие раннего Фортрана :).

Как видно из приведенного списка, набор операторов совершенно стандартный для Бейсиков тех времён, кроме специальных функций и возможности программе на Бейсике производить обработку прерываний по внешним событиям, что и обусловило название этого языка, INDUSTRIAL BASIC, поскольку позволяло применять его для управления производственными процессами и экспериментами.

4. Легенды и мифы

Миф первый. PDP-8 – 8-разрядный компьютер. Очевидно, что путаница здесь из-за цифры 8 в названии модели, которая по аналогии с названиями Intel 8008 или Z-8 воспринимается как указание на разрядность. Так уж совпало, что в 1965 г . никто не думал о 8-разрядных процессорах и 8 здесь к разрядности отношения не имеет.

Миф второй. Архитектура PDP-8 оказала влияние на архитектуру Intel 4004 , и она чуть ли не заимствовала её.

Судя по найденным мною кускам описания МП 4004, поклёп на Intel, что она якобы воспроизвела в нём черты PDP-8, совершенно не соответствуют действительности.

  1. 4004-й работает с ниблами (4 бита) данных, а не с 12-разрядными словами, т. е. процессор реально 4-разрядный, а не 12-ти, как PDP-8;
  2. В 4004-м исходно реализована Гарвардская архитектура, т. е. данные отделены от команд, что, правда, увеличило число шин, поэтому, наверное, в последующих МП Intel от неё отказалась. У PDP-8 — Пристонская архитектура (фон-неймановская, по старому);
  3. Система команд, действительно, не совпадает с PDP-8 как по форматам (в PDP-8 все команды 12-разрядные, а в 4004-м большинство команд 8-разрядные и есть пять 16-разрядных), так и по набору операций;
  4. Регистровые файлы у обоих процессоров кардинально разные, поскольку у 4004-го 16 регистров, а в PDP-8 — 5, но некоторые из них внутренние.

Так что утверждение о заимствовании можно тихо похоронить.

Часто утверждается (например, в http://en.wikipedia.org/wiki/PDP-8 ), что влияние архитектуры PDP-8 сказалось в том, что у этих процессоров всего один аккумулятор. Это утверждение лишено какого бы то ни было разумного основания, поскольку наличие одного аккумулятора диктовалось ограничением объема оборудования, обеспечивающего работу ЦП. Как только это перестало лимитировать разработчиков, число аккумуляторов в ЦП стало неуклонно возрастать.

Миф третий. Точные объёмы выпуска PDP-8 у разных авторов расходятся кардинально – называют и 100, и 300 тыс. Стоит подчеркнуть, что при этом мы говорим именно о машинах, а не о микропроцессорах с архитектурой PDP -8 – те сосчитать сейчас крайне сложно. То, что сама корпорация DEC указала в 1972 г . 16 000 машин, говорит, что 300 тыс. их никак не могло быть выпущено. На сайте www.faqs.org/faqs/dec-faq/pdp8/ называется более реальная цифра – около 50 тыс. и, наверное, стоит остановиться на этом скромном по нынешним меркам, но громадном по тогдашним, объёме выпуска PDP-8. Отмечу, что появившаяся в 1970 г . PDP-11 обладала более интересной архитектурой, поддерживала больший объём ОЗУ и обладала лучшей производительностью. Неудивительно, что именно она стала флагманской машиной Digital.

Легенда первая. PDP-8 – первый компьютер, который украли частные лица. Насколько я помню эту историю, кража PDP-8 произошла из лаборатории одного из американских университетов. Однако вместо того, чтобы вызвать полицию, отдел маркетинга корпорации DEC организовал PR-компанию вокруг этого события под лозунгом: “Наши компьютеры настолько хороши, что их даже воруют”.

5. История моделей PDP-8

До PDP-8 на рынке появились 12-разрядные мини-компьютеры LINC и CDC 160, также имевшие блоки ОЗУ по 4К слов. Поэтому неудивительно, что один из разработчиков PDP- 8 C . Gordon Bell заявил, что основная идея машины принадлежит не ему, а Сеймуру Крею (Seymour Cray) и была реализована в машине CDC 160, продававшейся как отдельно, так и служившей в качестве процессоров ввода-вывода первого суперкомпьютера Крея CDC 6600. Однако машина CDC 160 в отличие от PDP-8 имела шесть режимов адресации и команды переменной длины, команды ввода-вывода блокировали ЦП до завершения операции, были и другие существенные отличия ( www.faqs.org/faqs/dec-faq/pdp8).

Первая модель PDP-8 была представлена 22 марта 1965 г . на выставке WESCON. У нее было всего три регистра: счётчик команд (PC), аккумулятор (AC) и одноразрядный регистр переноса (L), память была на магнитных сердечниках, среднее быстродействие — 0,333 MIPS. Остальные регистры появились в более поздних моделях. Ниже собрана информация обо всех DEC'овских моделях PDP-8.


  • PDP-8 – Разработчики: Gordon Bell (общая конструкция), Alan Kotok, Edson DeCastro. Выпускалась с 1965 по 1969 гг. Продано – 1450 шт. Цена – $18 500.
  • LINC-8 – Разработчик : Wesley Clark.
  • PDP-8/S – Разработчик : Edson DeCastro. Выпускалась с 1966 по 1970 гг. Продано 1024 шт. Цена – $10 000. Медленная машина на транзисторах.
  • PDP-8/I – Разработчик : Edson DeCastro. Выпускалась с 1968 по 1971 гг. Продано 3698 шт. Цена –$12800, технология TTL.
  • PDP-8/L – Разработчик : Edson DeCastro. Выпускалась с 1968 по 1971 гг. Продано 3902 шт. Цена –$8500, технология TTL.
  • PDP-12 – Выпускалась с 1969 по примерно 1973 гг. Продано около 3500 шт. Цена – $27 900.
  • PDP-8/E – 8/E имела линейный блок питания, в корпус устанавливалось до 20 модулей (печатных плат), включая процессорную, цена машины – 6500 долл. Выпускалась с 1970 по 1978 гг.
  • PDP-8/F – Полностью аналогична PDP-8/E, но с корзиной на 10 печатных плат и с импульсным источником питания для снижения стоимости. Выпускалась с 1972 по 1978 гг.
  • PDP-8/M – выпускалась как OEM-версия PDP 8/F с 1972 по 1978 гг.
  • PDP-8/A выпускалась с 1975 г . до ориентировочно 1984 г . Цена – $1317, объём выпуска – более 10 тыс. шт. (точно не известен).
  • Совместимый с PDP-8 однокристальный микропроцессор Intersil 6100 для терминала VT78 (с 1978 по 1980 гг.).
  • Совместимый с PDP-8 однокристальный микропроцессор Harris 6120. Применялся в станции DECmate (с 1980 по 1990 гг.)

Вместо заключения

О PDP-8 можно писать многие годы, открывая всё новые и новые интересные моменты в истории этого семейства машин. Данная работа носит только предварительный характер и должна быть продолжена и существенно дополнена, в первую очередь материалами по советским машинам “Электроника- 100” и “Электроника-100И”.

Благодарности

Автор благодарит Виктора Бегтина за бережно сохранённые и предоставленные им материалы по PDP-8, без которых написание этого обзора было бы невозможно.

Литература и источники

  1. PDP-8/E & PDP-8/M small computer handbook. Digital Equipment Corporation. 1972. 500 p р .
  2. Черняк Л . Памяти Digital Equipment Corporation (1957—1998). Открытые системы, 2002, № 3; www.osp.ru/os/2002/03/181284/_p2.html.
  3. www.pdp8.net
  4. PDP-8 Programming Manual. Macro 8. DEC 08-CMAA-D. 1969. 76 p. (Первое издание октябрь 1965 г.)
  5. www.faqs.org/faqs/dec-faq/pdp8/
  6. OS-8 Industrial BASIC. DEC- S8-OSIBA-A-D, 1974. 170 p.

Статья помещена в музей 23 октября 2007 года