PDP-8 - PDP-8

PDP-8
Цифровой 556-flattened4.svg
PDP-8.jpg
PDP-8 на дисплее в Смитсоновский институт с Национальный музей американской истории в Вашингтон, округ Колумбия.. Этот пример взят из первого поколения PDP-8, построенных на дискретных транзисторах и позже известных как Прямой 8.
РазработчикКорпорация цифрового оборудования
Семейство продуктовПрограммируемый процессор данных
ТипМиникомпьютер
Дата выхода22 марта 1965 г.; 55 лет назад (1965-03-22)
Начальная цена18 500 долларов США, что эквивалентно примерно 150 100 долл. США в 2019 г.
Проданных единиц50,000+
ПлатформаDEC 12 бит
ПредшественникPDP-5
ПреемникPDP-12

В PDP-8 это 12 бит миникомпьютер это было произведено Корпорация цифрового оборудования (DEC). Это был первый коммерчески успешный миникомпьютер, за время эксплуатации которого было продано более 50 000 единиц. Его базовая конструкция соответствует новаторскому LINC но имеет меньший Набор инструкций, который является расширенной версией PDP-5 Набор инструкций.[1] Подобные машины от DEC являются PDP-12 который является модернизированной версией концепций PDP-8 и LINC, а PDP-14 промышленный контроллер система.

Обзор

Открытый PDP-8 / E с логическими модулями за передней панелью и одним сдвоенным TU56 DECtape ехать наверху

Самая ранняя модель PDP-8, неофициально известная как «Straight-8», была представлена ​​22 марта 1965 года по цене 18 500 долларов.[2] (примерно 150 000 долларов США в 2019 г.[3]). Он использовал диодно-транзисторная логика упакован на перевернуть чип карты в машине размером с небольшое домашнее хозяйство холодильник.[нужна цитата ] Это был первый компьютер, который был продан менее чем за 20 000 долларов.[4] что сделало его самым продаваемым компьютером в истории того времени.[5][неудачная проверка ][6][неудачная проверка ] Straight-8 был вытеснен в 1966 году PDP-8 / S, который был доступен в настольных и стоечных моделях. Используя однобитный серийный номер арифметико-логическое устройство (ALU) позволил PDP-8 / S быть меньше и дешевле, хотя и медленнее, чем исходный PDP-8. Базовая модель 8 / S была продана менее чем за 10 000 долларов и стала первой машиной, достигшей этого уровня.[4][7]

Более поздние системы (PDP-8 / I и / L, PDP-8 / E, / F и / M, а также PDP-8 / A) вернулись к более быстрой и полностью параллельной реализации, но используют гораздо менее дорогостоящие транзисторно-транзисторная логика (TTL) MSI логика. Большинство сохранившихся PDP-8 относятся к этой эпохе. PDP-8 / E широко распространен и хорошо известен, потому что многие типы Ввод / вывод для этого были доступны устройства. Последние коммерческие модели PDP-8, представленные в 1979 году, называются «CMOS-8», на основе CMOS микропроцессоры. Их цена была неконкурентоспособной, и предложение провалилось. Интерсил продавал интегральные схемы на коммерческой основе до 1982 г. как Интерсил 6100 семья. Благодаря своей технологии CMOS они имели низкое энергопотребление и использовались в некоторых встроенных военных системах.

Главный инженер, создавший первоначальный вариант ПДП-8, был Эдсон де Кастро, который позже основал Общие данные.[8]

Архитектурное значение

PDP-8 сочетает в себе низкую стоимость,[2] простота, расширяемость и тщательная инженерия для повышения ценности. Наибольшее историческое значение имело то, что низкая стоимость и большой объем PDP-8 сделали компьютер доступным для многих новых клиентов для многих новых применений. Его непреходящее значение - это исторический пример создания ценностей.[9] компьютерный дизайн.

Низкая сложность принесла другие затраты. Это сделало программирование громоздким, как видно из примеров в этой статье и из обсуждения «страниц» и «полей». Большая часть кода выполняет требуемую механику, а не устанавливает алгоритм. Например, вычитание числа включает вычисление его дополнения до двух, а затем его сложение; Запись условного перехода включает в себя запись условного перехода вокруг перехода, при этом пропуск кодирует отрицательное условие на желаемое. Некоторые амбициозные программные проекты не умещались в памяти или имели конструктивные дефекты, которые нельзя было устранить. Например, как отмечено ниже, непреднамеренная рекурсия подпрограммы приводит к дефектам, которые трудно отследить до рассматриваемой подпрограммы.

По мере того, как прогресс в дизайне сокращал затраты на логику и память, время программиста стало относительно более важным.[10] Последующие разработки компьютеров подчеркивали простоту программирования, обычно с использованием более крупных и интуитивно понятных наборов команд.[11]

В конце концов, большая часть машинного кода была сгенерирована компиляторы и генераторы отчетов.[12] В компьютер с сокращенным набором команд вернул полный круг к PDP-8 акцент на простом наборе команд и выполнении нескольких действий за один цикл команд, чтобы максимизировать скорость выполнения, хотя новые компьютеры имеют гораздо более длинные командные слова.

Описание

Регистры PDP-8
11109876543210(битовая позиция)
Основные регистры
ACACкумулятор
Счетчик команд
ПКппрограмма Cвстречный
Флаги состояния
 LLрегистр чернил
Внутренние регистры (недоступно по коду)
MBRРегистр буфера памяти
МАРРегистр адреса памяти

PDP-8 использовал идеи нескольких 12-битных предшественников, в первую очередь LINC разработано В.А. Кларк и К. Э. Мольнар, которые были вдохновлены Сеймур Крей с CDC 160 миникомпьютер.[1][13]

PDP-8 использует 12 бит для своего слово размер и арифметика (для целых чисел без знака от 0 до 4095 или целых чисел со знаком от -2048 до +2047). Однако программное обеспечение может арифметика с высокой точностью. Переводчик был доступен для плавающая точка операции, например, которые использовали 36-битное представление с плавающей запятой с двумя словами (24-битные) значимое и однословная экспонента.[14] С учетом ограничений скорости и памяти PDP-8 может выполнять вычисления, аналогичные более дорогим современным электронным компьютерам, таким как IBM 1130 и различные модели IBM System / 360, при этом проще взаимодействовать с внешними устройствами.

Адресное пространство памяти также составляет 12 бит, поэтому в базовой конфигурации PDP-8 имеется основная память из 4096 (212) двенадцатибитные слова. Дополнительный блок расширения памяти может переключать банки воспоминаний с помощью инструкции IOT. Память магнитная память с время цикла 1,5 микросекунды (0.667 МГц ), так что типичная двухтактная инструкция обращения к памяти (Fetch, Execute) выполняется со скоростью 0,333 MIPS. Карманная справочная карта 1974 года для PDP-8 / E дает базовое время выполнения команд 1,2 микросекунды или 2,6 микросекунды для команд, которые обращаются к памяти.

PDP-8 был частично разработан для работы с современными телекоммуникациями и текстовыми сообщениями. Шестибитные коды символов были широко распространены в то время, и двенадцатибитовые слова PDP-8 могут эффективно хранить два таких символа. Кроме того, шестибитный код телетайпа, названный телетайп или код TTS широко использовался новостными агентствами, и в одном из первых приложений для PDP-8 был типографский набор с использованием этого кода.[15] Позже, 7-битный ASCII и 8-битный UTF-8 коды символов были разработаны частично в ответ на ограничения пять- и шестибитные коды символов.

Инструкции PDP-8 имеют 3-битный код операции, поэтому их всего восемь. Ассемблер предоставляет программисту больше мнемоники инструкций, переводя инструкции ввода-вывода и режима работы в комбинации кодов операций и полей инструкций. Он также имеет только три видимых программисту регистры: 12-битный аккумулятор (AC), а счетчик команд (ПК) и нести флаг называется «регистр ссылок» (L).

Для ввода и вывода PDP-8 имеет одно прерывание, используемое всеми устройствами, шину ввода-вывода, доступную для команд ввода-вывода, и прямой доступ к памяти (DMA) канал. Запрограммированная шина ввода-вывода обычно работает с периферийными устройствами с низкой и средней скоростью, такими как принтеры, телетайпы, бумажная лента пробойники и ридеры, в то время как DMA используется для электронно-лучевая трубка экраны с световое перо, аналого-цифровые преобразователи, цифро-аналоговые преобразователи, ленточные накопители, и Дисковый привод.

Чтобы сэкономить деньги, в конструкции использовалась недорогая основная память для многих целей, которые обслуживаются более дорогими резкий поворот регистры в других компьютерах,[16] такие как вспомогательные счетчики и связь подпрограмм.

Базовые модели используют программное обеспечение для умножения и деления. Для более быстрой математики расширенный арифметический элемент (EAE) предоставляет инструкции умножения и деления с дополнительным регистром, регистром умножителя / частного (MQ). EAE был опцией оригинальной PDP-8,[17] 8 / I,[18] и 8 / E, но он является неотъемлемой частью Интерсил 6100 микропроцессор.

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

Электроника базового процессора PDP-8 имеет всего четыре 12-битных регистра: аккумулятор, счетчик программ, регистр буфера памяти, и регистр адреса памяти. Для экономии денег они служили нескольким целям на разных этапах рабочего цикла. Например, буферный регистр памяти предоставляет арифметические операнды, является частью регистра команд и хранит данные для перезаписи основная память. (Это восстанавливает основные данные, уничтоженные чтением.)

Из-за своей простоты ранние модели PDP-8 были дешевле, чем большинство других имеющихся в продаже компьютеров. Однако они использовали дорогостоящие методы производства, которые часто использовались для создания прототипов. Они использовали тысячи очень маленьких стандартизированных логических модулей с золотыми разъемами, интегрированных дорогостоящим и сложным проволочный объединительная плата в большом шкафу.

В более поздней модели 8 / S два разных логических напряжения увеличивали разветвление недорогих диодно-транзисторная логика.[19] 8 / S также сократил количество логических вентилей за счет использования последовательного однобитового тракта данных для выполнения арифметических операций. ЦП PDP-8 / S имеет всего около 519 логические ворота. Для сравнения, маленькие микроконтроллеры (по состоянию на 2008 год) обычно имеют 15 000 и более. Уменьшение количества электроники позволило сделать корпус гораздо меньшего размера, размером с хлебный ящик.

Еще более поздний PDP-8 / E - это более крупный и более мощный компьютер, но он был подвергнут дальнейшей переработке для повышения стоимости. Работает быстрее транзисторно-транзисторная логика, в интегральных схемах. Основная память была переработана. Это позволяет расширение с меньшими затратами, поскольку в более ранних моделях используется OMNIBUS вместо объединительной платы с обмоткой проводов. (Личный отчет о разработке PDP-8 / E можно прочитать на вики-сайте Engineering and Technology History.[20])

Версии PDP-8

Передняя панель PDP-8 / S
Передняя панель PDP-8 / L
Передняя панель PDP-8 / I
Передняя панель PDP-8 / E
Передняя панель PDP-8 / F
Передняя панель PDP-8 / A 400

Общий объем продаж семейства PDP-8 оценивается в более чем 300 000 машин. Были изготовлены следующие модели:

Обзор моделей PDP-8[21]
МодельОписаниеГодЦенаКоличество произведенныхМасса
PDP-8Полудискретные компоненты. Были «ИС» примитивного вида. DTL.1965$18,0001450250 фунтов (113 кг)[22]
ЛИНК-8Может работать либо LINC или код PDP-81966$38,500142
PDP-8 / SУдешевленная серийная версия ПДП-81966$10,000102484 фунта (38 кг)[23]
PDP-8 / IПервая ПДП-8 нестандартная TTL ИС1968$12,8003698250 фунтов (110 кг)[24]
PDP-8 / LБолее дешевый аналог PDP-8 / I1968$8,500390280 фунтов (36 кг)[25]
PDP-12PDP-8 / I с поддержкой инструкций LINC (заменил LINC-8)1969$27,900755
PDP-8 / EМеньше досок большего размера для повышения цены и эффективности1970$6,50090 фунтов (41 кг) (номинал)[26]
PDP-8 / FБолее дешевый аналог PDP-8 / E197257 фунтов (26 кг) (номинал)[27]
ПДП-8 / МOEM PDP-8 / F с измененной передней панелью1972$5,000[28]57 фунтов (26 кг) (номинал)[29]
PDP-8 / AЛогика LSI позволила ЦП поместиться на одной плате1974$1,835
Интерсил 6100Однокристальный PDP-8-совместимый микропроцессор (используется в VT78 )1975[30][31]
Харрис 6120КМОП однокристальный микропроцессор, совместимый с PDP-8 (используется в DECmate текстовые процессоры)1976[31]

Реализации последних дней

PDP-8 легко подражал, поскольку его набор команд намного проще, чем в современных архитектурах. Энтузиасты создали целые PDP-8, используя одну FPGA устройств.

В Интернете доступно несколько программных симуляторов PDP-8, а также оборудование с открытым исходным кодом повторные реализации.[32][33] Лучшие из них правильно работают с операционными системами и диагностическим программным обеспечением DEC. Программные симуляции часто моделируют PDP-8 последней модели со всеми возможными периферийными устройствами. Даже они используют лишь крошечную часть мощности современного персонального компьютера.

Одна из первых коммерческих версий виртуальной машины PDP-8 / S работала на Kaypro 386 (компьютер на базе 80386) и была написана на компьютерном языке C (до того, как был завершен стандарт ANSI-C) и ассемблером Дэвидом Бичером. Денвера, Колорадо. Он заменил вышедший из строя компьютер PDP-8 / S, который управлял машиной для обработки топлива на реакторе № 85, Платтевилл, Колорадо, Электрогенерирующая станция, работающая на ядерном топливе, Ft. Санкт-Врайн. Она была проверена Rockwell International и безупречно работала в течение 2,5 лет во время работы машины для обработки топлива, когда она использовалась для удаления топлива из активной зоны реактора и вывода станции из эксплуатации. Он включал в себя загрузчик бумажной ленты и переднюю панель.

Ввод, вывод

Системы ввода-вывода претерпели огромные изменения в эпоху PDP-8. Ранние модели PDP-8 использовали Передняя панель интерфейс, бумажная лента читатель и телетайп принтер с дополнительным перфоратором для бумажной ленты. Со временем такие системы ввода-вывода, как магнитная лента, RS-232 и токовая петля немые терминалы, перфокарта читатели и диски с фиксированной головкой были добавлены. К концу эпохи PDP-8 дискеты и движущаяся голова патрон Дисковый привод были популярными устройствами ввода-вывода. Современные энтузиасты создали стандарт ПК стиль IDE адаптеры жестких дисков для реальных и смоделированных компьютеров PDP-8.

Поддерживаются несколько типов ввода-вывода:

  • В-объединительная плата выделенные слоты для контроллеров ввода / вывода
  • «Отрицательная» шина ввода / вывода (с использованием сигнализации отрицательного напряжения)
  • «Положительная» шина ввода / вывода (та же архитектура с использованием сигналов TTL)
  • Омнибус (объединительная плата не предназначенных для системная шина слоты), представленные в PDP-8 / E. (Подробности описаны в указанной ниже статье IEEE.)

Упрощенная недорогая форма DMA поддерживается так называемый «трехцикловый разрыв данных»; для этого требуется помощь процессора. Метод «прерывания данных» перемещает часть общей логики, необходимой для реализации ввода-вывода DMA с каждого устройства ввода-вывода, в одну общую копию логики в процессоре. «Разрыв данных» возлагает ответственность за поддержание адреса DMA и регистров подсчета слов на процессор. В трех последовательных циклах памяти процессор обновляет счетчик слов, обновляет адрес передачи и сохраняет или извлекает фактическое слово данных ввода-вывода.

Однократный разрыв данных эффективно утроил скорость передачи DMA, потому что только целевые данные должны быть переданы в и из основной памяти. Однако устройствам ввода-вывода требуется больше электронной логики для управления собственным счетчиком слов и адресными регистрами передачи. К тому времени, когда был представлен PDP-8 / E, электронная логика стала дешевле, и «однопериодный разрыв данных» стал более популярным.

Средства программирования

Ранние системы PDP-8 не имели операционной системы, только Передняя панель с переключателями хода и остановки. Системы разработки программного обеспечения для серии PDP-8 начинались с самого простого ввода на передней панели raw двоичный Машинный код (загрузка Вход).

В средние века были разработаны различные «операционные системы» с бумажной лентой. Многие служебные программы стали доступны на бумажной ленте. PAL-8 язык ассемблера исходный код часто хранились на бумажной ленте, считывались в память и сохранялись на бумажной ленте. PAL собранный с бумажной ленты в память. Были доступны бумажные ленточные версии ряда языков программирования, включая DEC. ФОКУСНЫЙ устный переводчик[34] и 4K FORTRAN компилятор и среда выполнения.

К концу эры PDP-8 такие операционные системы, как OS / 8 и COS-310 позволил традиционное линейный режим редактор и командная строка компилятор система разработки с использованием таких языков, как ассемблер PAL-III, FORTRAN, БАЗОВЫЙ, и ДИБОЛ.

Довольно современный и продвинутый операционная система реального времени (RTOS) и вытесняющая многозадачность были доступны многопользовательские системы: была доступна система реального времени (RTS-8), а также многопользовательские коммерческие системы (COS-300 и COS-310) и специализированная однопользовательская система обработки текстов (WPS-8).

А совместное времяпровождение система, ТСС-8, также был доступен. TSS-8 позволяет нескольким пользователям входить в систему через терминалы со скоростью 110 бод, а также редактировать, компилировать и отлаживать программы. Языки включают специальную версию BASIC, подмножество FORTRAN, аналогичное FORTRAN-1 (без написанных пользователем подпрограмм или функций), АЛГОЛ подмножество, FOCAL, и ассемблер под названием PAL-D.

Изрядное количество подаренного пользователями программного обеспечения для PDP-8 можно было получить на ДЕКУС, Сообщество пользователей Digital Equipment Corporation, и часто поставлялись с полными списками источников и документацией.

Набор инструкций

Три высокопоставленных биты 12-битного инструкция Слово (помеченные битами от 0 до 2) - это код операции. Для шести операций, относящихся к памяти, биты с 5 по 11 обеспечивают 7-битный адрес. Бит 4, если он установлен, говорит о завершении адреса с использованием 5 старших битов счетчик команд (PC) регистр, что означает, что адресуемое место находится в тех же 128 словах, что и инструкция. Если бит 4 сброшен, используются нули, поэтому адресуемая ячейка находится в пределах первых 128 слов памяти. Бит 3 указывает косвенное обращение; если установлен, адрес, полученный, как описано выше, указывает на 12-битное значение в памяти, которое дает фактический эффективный адрес для инструкции; это позволяет операндам находиться где угодно в памяти за счет дополнительного слова. В JMP Инструкция не работает со словом памяти, за исключением случаев, когда указана косвенная адресация, но имеет те же битовые поля.

0234511
ОперацияяZКомпенсировать
Страницы памяти

Это использование командного слова делит память из 4096 слов на 128 слов. страницы; бит 4 инструкции выбирает либо текущую страницу, либо страницу 0 (адреса 0000–0177 в восьмеричный ). Память на странице 0 имеет большое значение, поскольку размещенные здесь переменные могут быть адресованы непосредственно с любой страницы. (Более того, с адреса 0000 должна начинаться любая подпрограмма обслуживания прерывания, а адреса 0010–0017 имеют специальное свойство автоинкремента перед любой косвенной ссылкой через них.)

Стандартный ассемблер помещает постоянные значения для арифметики на текущую страницу. Точно так же переходы между страницами и вызовы подпрограмм используют косвенный адрес на текущей странице.

Было важно написать процедуры так, чтобы они помещались на страницах из 128 слов, или упорядочить процедуры, чтобы минимизировать переходы между страницами, поскольку ссылки и переходы за пределы текущей страницы требуют дополнительного слова. Следовательно, много времени было потрачено на умное сохранение одного или нескольких слов. Программисты намеренно помещали код в конец страницы, чтобы обеспечить свободный переход к следующей странице по мере увеличения ПК.

Основные инструкции

000 - И - И операнд памяти с AC.
001 - ТАД - Два дополнения Добавить операнд памяти для (a 12 бит знаковое значение (AC) w. нести в L).
010 - ISZ - увеличить операнд памяти и пропустить следующую инструкцию, если результат равен нулю.
011 - DCA - занести переменный ток в операнд памяти и очистить переменный ток.
100 - JMS - JuMp to Subroutine (сохранение обратный адрес в первом слове подпрограммы!).
101 - JMP - ЮМП.
110 - IOT - Передача ввода / вывода (см. Ниже).
111 - OPR - ОПЕРАЦИИ с микрокодированием (см. Ниже).

Инструкции IOT (ввод-вывод)

Процессор PDP-8 определил несколько инструкций IOT, но просто обеспечил основу. Большинство инструкций IOT определялись отдельными устройствами ввода-вывода.

0238911
6 = IOTУстройствоФункция
Устройство

Биты с 3 по 8 инструкции IOT выбирают устройство ввода-вывода. Некоторые из этих адресов устройств стандартизированы по соглашению:

  • 00 обрабатывается процессором и не отправляется ни на какое устройство ввода-вывода (см. Ниже).
  • 01 - обычно высокоскоростной считыватель бумажной ленты.
  • 02 - высокоскоростной перфоратор для бумажной ленты.
  • 03 - это клавиатура консоли (и любой связанный с ней низкоскоростной считыватель бумажной ленты).
  • 04 - это консольный принтер (и любой связанный с ним низкоскоростной перфоратор для бумажной ленты).

Инструкции для устройства 0 влияют на процессор в целом. Например, ION (6001) включает обработку прерываний, а IOFF (6002) отключает ее.

Функция

Биты с 9 по 11 инструкции IOT выбирают функцию (ы), которые выполняет устройство. Простые устройства (такие как устройство чтения и перфорации бумажной ленты, клавиатура консоли и принтер) используют биты стандартными способами:

  • Бит 11 заставляет процессор пропускать следующую инструкцию, если устройство ввода-вывода готово.
  • Бит 10 очищает AC.
  • Бит 9 перемещает слово между AC и устройством, инициирует другую передачу ввода-вывода и сбрасывает флаг готовности устройства.

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

Более сложные устройства, такие как дисководы, используют эти 3 бита в зависимости от устройства. Обычно устройство декодирует 3 бита, чтобы получить 8 возможных кодов функций.

OPR (OPeRate)

Многие операции выполняются с использованием OPR, включая большинство условных операторов. OPR не обращается к ячейке памяти; условное выполнение достигается путем условного пропуска одной инструкции, которая обычно является JMP.

Считается, что инструкция OPR «микрокодирована». Это не означало то, что слово означает сегодня (что программа нижнего уровня извлекает и интерпретирует инструкцию OPR), но означало, что каждый бит командного слова определяет определенное действие, и программист может выполнить несколько действий за один цикл команд. установив несколько бит. При использовании программист может написать несколько мнемоник инструкций рядом друг с другом, и ассемблер объединит их с ИЛИ ЖЕ придумать собственно командное слово. Многие устройства ввода-вывода поддерживают "микрокодированные" инструкции IOT.

Действия, закодированные в микрокоде, выполняются в четко определенной последовательности, призванной максимизировать полезность многих комбинаций.

Инструкции OPR входят в группы. Биты 3, 8 и 11 идентифицируют группу инструкции OPR, поэтому невозможно объединить микрокодированные действия из разных групп.

Группа 1

        00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | 1 | 1 | 1 | 0 | | | | | | | | | | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | | CLA CMA RAR BSW CLL CML RAL IAC Порядок исполнения 1 1 2 2 4 4 4 3
7200 - CLA - Очистить аккумулятор
7100 - CLL - очистить бит L
7040 - CMA - Единичный дополнительный аккумулятор
7020 - CML - Бит дополнения L
7001 - IAC - Приращение
7010 - RAR - повернуть вправо
7004 - RAL - Повернуть влево
7012 - RTR - повернуть вправо дважды
7006 - RTL - дважды повернуть влево
7002 - BSW - Обмен байтами 6-битных «байтов» (PDP 8 / e и выше)

В большинстве случаев операции упорядочены так, чтобы их можно было комбинировать наиболее удобными способами. Например, объединение CLA (CLear Accumulator), CLL (CLear Link) и IAC (Increment ACcumulator) сначала очищает AC и Link, затем увеличивает аккумулятор, оставляя его равным 1. Добавление RAL к миксу (так что CLA CLL IAC RAL) вызывает очистку аккумулятора, увеличение на единицу, затем поворот влево, оставляя его равным 2. Таким образом, небольшие целочисленные константы помещались в аккумулятор с помощью одной инструкции.

Комбинация CMA IAC, которую ассемблер позволяет вам сокращать до CIA, дает арифметическое обратное AC: отрицание с дополнением до двух. Поскольку нет инструкции вычитания, только сложение с дополнением до двух (TAD), вычисляющее разность двух операндов, требует сначала отрицания вычитания.

Команда OPR группы 1, для которой не установлен ни один из микропрограммированных битов, не выполняет никаких действий. Программист может написать NOP (Нет операции) собрать такую ​​инструкцию.

Группа 2 или Группа

         00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | 1 | 1 | 1 | 1 | | | | | 0 | | | 0 | | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | | CLA SZA OSR SMA SNL HLT 2 1 1 1 3 3
7600 - CLA - Прозрачный AC
7500 - SMA - переход на AC <0 (или группу)
7440 - SZA - Пропустить AC = 0 (или группу)
7420 - SNL - Пропустить L ≠ 0 (или группу)
7404 - ЛАРН - логически 'или' переключатели на передней панели с AC
7402 - HLT - Остановка

Когда бит 8 сброшен, выполняется пропуск, если выполняется любое из указанных условий. Например, «SMA SZA», код операции 7540, пропускается, если AC ≤ 0.

Команда OPR группы 2, в которой не установлен ни один из микропрограммированных битов, является другой командой No-Op.

Группа 2 и Группа

         00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | 1 | 1 | 1 | 1 | | | | | 1 | | | 0 | | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | | CLA SNA OSR SPA SZL HLT 2 1 1 1 3 2
7410 - SKP - Пропустить безоговорочно
7610 - CLA - Прозрачный AC
7510 - SPA - Пропустить AC ≥ 0 (и группу)
7450 - SNA - Пропустить AC ≠ 0 (и группу)
7430 - SZL - Пропустить L = 0 (и группу)

Когда бит 8 установлен, условие группы 2 или пропуска инвертируется через Законы де Моргана: пропуск нет выполняется, если выполняется какое-либо из условий группы 2 или 2, то есть все из указанных условий пропуска должны выполняться. Например, «SPA SNA», код операции 7550, пропускается, если AC> 0. Если ни один из битов 5–7 не установлен, пропуск является безусловным.

Группа 3

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

        00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | 1 | 1 | 1 | 1 | | | | | | | | 1 | | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | __ | | CLA SCA  _ _ / | КОД MQA MQL 1 * 2 2 2 3
7601 - CLA - Прозрачный AC
7501 - MQA - Коэффициент множителя с AC (логический или MQ в AC)
7441 - SCA - Нагрузка счетчика шагов в переменный ток
7421 - MQL - Multiplier Quotient Load (перенести AC в MQ, очистить AC)
7621 - CAM - CLA + MQL очищает и AC, и MQ.

Обычно CLA и MQA объединяли для перевода MQ в AC. Другая полезная комбинация - это MQA и MQL для обмена двумя регистрами.

Три бита задали команду умножения / деления, которую нужно выполнить:

7401 - Нет работы
7403 - SCL - нагрузка счетчика шагов (сразу следует слово, PDP-8 / I и выше)
7405 - MUY - Умножить
7407 - DVI - Разделить
7411 - NMI - Нормализовать
7413 - SHL - Сдвиг влево (следует сразу же слово)
7415 - ASR - Арифметический сдвиг вправо
7417 - ЛСР - Логический сдвиг вправо

Контроль памяти

Стек основной памяти PDP-8 / I
Один из трех взаимосвязанных модулей, составляющих плоскость основной памяти PDP-8.
Один из трех взаимосвязанных модулей, составляющих плоскость основной памяти PDP-8. Это середина из трех и содержит массив настоящих ферритовых сердечников.
Один из трех взаимосвязанных модулей, составляющих плоскость основной памяти PDP-8.

12-битное слово может иметь 4096 различных значений, и это максимальное количество слов, которое исходный PDP-8 может адресовать косвенно через указатель слова. 4096 12-битных слов представляют 6144 байта в современной терминологии, или 6 кБ. По мере того, как программы становились более сложными, а стоимость памяти падала, этот предел желательно расширить.

Чтобы поддерживать совместимость с уже существующими программами, новое оборудование вне оригинальной конструкции добавляло старшие биты к эффективным адресам, генерируемым программой. Контроллер расширения памяти расширяет адресуемую память в 8 раз до 32 768 слов. Это расширение считалось достаточным, потому что при стоимости основной памяти около 50 центов за слово, полные 32 КБ памяти были равны стоимости ЦП.

Каждый 4 КБ памяти называется полем. Контроллер расширения памяти содержит два трехбитовых регистра: DF (поле данных) и IF (поле инструкций). Эти регистры определяют поле для каждой ссылки на память ЦП, что позволяет иметь в общей сложности 15 бит адреса. Регистр IF определяет поле для выборки инструкций и прямых ссылок на память; регистр DF определяет поле для косвенного доступа к данным. Программа, работающая в одном поле, может ссылаться на данные в том же поле путем прямой адресации и ссылаться на данные в другом поле путем косвенной адресации.

Набор инструкций ввода-вывода в диапазоне от 6200 до 6277 обрабатывается контроллером расширения памяти и предоставляет доступ к регистрам DF и IF. Инструкция 62X1 (CDF, ​​Изменить поле данных) устанавливает поле данных в X. Аналогично 62X2 (CIF) устанавливает поле инструкции, а 62X3 устанавливает оба. Существующие ранее программы никогда не будут выполнять CIF или CDF; регистры DF и IF будут указывать на одно и то же поле, одно поле, которым эти программы были ограничены. Действие инструкции CIF было отложено до совпадения со следующей инструкцией JMP или JMS, чтобы выполнение CIF не приводило к переходу.

Многополевым программам было сложнее иметь дело с границами полей и регистрами DF и IF, чем было бы, если бы они могли просто генерировать 15-битные адреса, но дизайн обеспечивал обратную совместимость и соответствовал 12-битной архитектуре. используется в PDP-8. Сравните позже Intel 8086, чей 16 бит адреса памяти расширяются до 20 бит путем объединения их с содержимым указанного или подразумеваемого сегментный регистр.

Схема расширенной памяти позволяет существующим программам обрабатывать увеличенную память с минимальными изменениями. Например, 4K FOCAL обычно содержал около 3 КБ кода и только 1 КБ оставалось для пользовательской программы и данных. С помощью нескольких патчей FOCAL может использовать второе поле 4K для пользовательской программы и данных. Более того, дополнительные поля 4K могут быть выделены отдельным пользователям, что превратит 4K FOCAL в многопользовательскую систему разделения времени.

Виртуализация

На PDP-8 / E и более поздних моделях контроллер расширения памяти был расширен для обеспечения виртуализации машины. Программа, написанная для использования всех ресурсов PDP-8, может сосуществовать с другими такими программами на том же PDP-8 под управлением администратора виртуальных машин. Менеджер может заставить все инструкции ввода-вывода (включая те, которые работают с контроллером расширения памяти) вызывать прерывание (прерывание, обрабатываемое менеджером). Таким образом, менеджер может отображать ссылки на память, отображать поля данных или инструкций и перенаправлять ввод-вывод на разные устройства. Каждая исходная программа имеет полный доступ к «виртуальной машине», предоставляемой менеджером.

Новые инструкции ввода-вывода для контроллера расширения памяти извлекают текущее значение полей данных и инструкций, позволяя программному обеспечению сохранять и восстанавливать большую часть состояния машины через прерывание. Однако программа не может определить, находится ли ЦП в процессе отсрочки действия инструкции CIF (выполнила ли она CIF, но еще не выполнила соответствующую инструкцию перехода). Менеджер должен включать полный эмулятор PDP-8 (не сложно для машины с 8 командами). Всякий раз, когда команда CIF перехватывает диспетчер, он должен эмулировать инструкции до следующего перехода. К счастью, поскольку переход обычно является следующей инструкцией после CIF, эта эмуляция не сильно замедляет программы, но это большой обходной путь к, казалось бы, небольшому недостатку дизайна.[нужна цитата ]

К моменту появления PDP-8 / A цены на память упали настолько, что объем памяти превышал 32 КБ. В 8 / A добавлен новый набор инструкций для обработки более восьми полей памяти. Номер поля теперь можно было поместить в AC, а не жестко закодировать в инструкции. Однако к этому времени PDP-8 находился в упадке, поэтому для использования этих новых функций было изменено очень мало стандартного программного обеспечения.

Примеры

В следующих примерах показан код в PDP-8. язык ассемблера как можно было бы написать для ассемблера PAL-III.

Сравнение двух чисел

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

    / Сравнить числа в памяти в OPD1 и OPD2 CLA CLL / Должен начинаться с 0 в AC и связать TAD OPD1 / Загрузить первый операнд в AC (добавив его к 0); ссылка все еще свободна CIA / Complement, затем увеличивает AC, отрицая это TAD OPD2 / AC теперь имеет OPD2-OPD1; если OPD2≥OPD1, сумма переполнений и ссылка установлена ​​SZL / Пропустить, если ссылка свободна JMP OP2GT / Перейти куда-нибудь в случае, если OPD2≥OPD1; / В противном случае перейдите к приведенному ниже коду.

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

Вывод строки

Эта полная программа на языке ассемблера PDP-8 выводит "Привет, мир!" к телетайпу.

    * 10 / Установить текущую исходную точку сборки на адрес 10, STPTR, STRNG-1 / Регистр автоинкремента (один из восьми в 10-17) * 200 / Установить текущую исходную точку сборки в текстовую область программы HELLO, CLA CLL / Очистить AC и Снова связать (необходимо, когда мы возвращаемся из tls) TAD IZ STPTR / Получить следующий символ, косвенно через адрес PRE-автоинкремента с нулевой страницы SNA / Пропустить, если ненулевое значение (не конец строки) HLT / Else останавливается на нуле (конец строки) TLS / Вывести символ из AC в TSF телетайпа / Пропустить, если телетайп готов к символу JMP.-1 / В противном случае вернитесь назад и попробуйте снова JMP HELLO / Перейти назад для следующего символа STRNG, 310 / H 345 / e 354 / l 354 / l 357 / o 254 /, 240 / ( пробел) 367 / w 357 / o 362 / r 354 / l 344 / d 241 /! 0 / Конец строки $ HELLO / ТЕРМИНАТОР ПО УМОЛЧАНИЮ

Подпрограммы

Процессор PDP-8 не поддерживает куча для хранения регистров или других контекст когда подпрограмма называется или прерывать происходит. (Стек может быть реализован программно, как показано в следующем разделе.) Вместо этого инструкция JMS просто сохраняет обновленный компьютер (указывающий мимо JMS на адрес возврата) по эффективному адресу и переходит к эффективному адресу плюс один. Подпрограмма вернулась к вызывающему с помощью косвенной инструкции JMP, которая обращается к первому слову подпрограммы.

Например, вот "Hello, World!" переписан для использования подпрограммы. Когда инструкция JMS переходит к подпрограмме, она изменяет 0, закодированный в местоположении OUT1:

    * 10 / Установить текущее происхождение сборки по адресу 10, STPTR, STRNG-1 / Регистр автоинкремента (один из восьми в 10-17) * 200 / Установить источник сборки (адрес загрузки) LOOP, TAD I STPTR / Предварительное приращение место в памяти 10, выборка косвенная, чтобы получить следующий символ нашего сообщения SNA / Пропустить при ненулевом AC HLT / Иначе остановка в конце сообщения JMS OUT1 / Записать один символ JMP LOOP / И вернуться назад для получения дополнительных OUT1, 0 / Будет заменить на обновленные TSF ПК вызывающего абонента / Пропустить, если принтер готов JMP.-1 / Дождаться флага TLS / Отправить символ в AC CLA CLL / Очистить AC и ссылку для следующего прохода JMP I OUT1 / Возврат к вызывающему STRNG, "H / Известное сообщение "e /" l / ПРИМЕЧАНИЕ: "l / "o / Строки в PAL-8 и PAL-III были" шестибитными "", / Чтобы использовать ASCII, мы пишем его по буквам "/" w / "o /" r / "l /" d / " ! / 015/012/0 / Отметьте конец нашей строки с нулевым символом в конце (.ASCIZ еще не был изобретен!)

Тот факт, что инструкция JMS использует слово непосредственно перед кодом подпрограммы для внесения обратный адрес предотвращает возврат и рекурсия без дополнительной работы программистом. Это также затрудняет использование ПЗУ с PDP-8, потому что хранилище адресов возврата для чтения и записи смешано с хранилищем кода только для чтения в адресном пространстве. Программы, предназначенные для размещения в ПЗУ, решают эту проблему несколькими способами:

  • Они копируют себя в память для чтения и записи перед выполнением, или
  • Они помещаются в специальные карты ПЗУ, которые обеспечивают несколько слов памяти для чтения / записи, доступ к которым осуществляется косвенно с помощью тринадцатого бита флага в каждом слове ПЗУ.
  • Они избегают использования подпрограмм; или используйте следующий код вместо инструкции JMS, чтобы поместить адрес возврата в память для чтения и записи:
    JUMPL, DCA TEMP / Поместите аккумулятор в какое-то временное место TAD JUMPL + 3 / Загрузите адрес возврата в аккумулятор: жестко запрограммированный JMP SUBRO / Перейти к подпрограмме и обработать возврат (к JUMPL + 3)

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

Программный стек

Хотя у PDP-8 нет аппаратного куча, стеки могут быть реализованы программно.[35]Вот примеры подпрограмм PUSH и POP, упрощенные для исключения таких проблем, как тестирование переполнения и потери стека:

    PUSH, 0 ДАННЫЕ DCA CLA CMA / -1 TAD SP DCA SP TAD DATA DCA I SP JMP I PUSH / Return POP, 0 CLA CLL TAD I SP ISZ SP JMP I POP DATA, 0 SP, 0

А вот "Hello World" с реализованным "стеком" и подпрограмма "OUT":

    * 200 MAIN, CLA CLL / Установить указатель сообщения TAD (MESSG / В начало сообщения (литерал) DCA SP LOOP, JMS POP SNA / Остановить выполнение, если ноль HLT JMS OUT / В противном случае вывести символ JMP LOOP MESSG, " H "e" l "l" o "," "w" o "r" l "d"! 015 012 0 OUT, 0 / Будет заменено на обновленные TSF ПК вызывающего абонента / Пропустить, если принтер готов JMP.-1 / Подождите для флага TLS / отправить символ в AC CLA CLL / очистить AC и ссылку для следующего прохода JMP I OUT / вернуться к вызывающему

Связанный список

Другой возможной подпрограммой для PDP-8 является связанный список.

     GETN, 0 / Получает указанное число и перемещает указатель CLA CLL / Очистить аккумулятор TAD I PTR / Получает число, указанное на DCA TEMP / Сохранить текущее значение ISZ PTR / Указатель увеличения TAD I PTR / Получить следующий адрес DCA PTR / Вставить указатель JMP I GETN / возврат PTR, 0 TEMP, 0

Прерывания

Есть сингл прерывать линия на шине ввода / вывода PDP-8. Процессор обрабатывает любое прерывание, блокируя дальнейшие прерывания и выполняя JMS в ячейку 0000. Поскольку трудно писать реентерабельные подпрограммы, трудно вкладывать прерывания, и это обычно не делается; каждое прерывание выполняется до завершения и повторно разрешает прерывания непосредственно перед выполнением JMP I 0 инструкция, которая возвращается из прерывания.

Поскольку на шине ввода-вывода имеется только одна линия прерывания, возникновение прерывания не сообщает процессору об источнике прерывания. Вместо этого процедура обслуживания прерывания должна последовательно опрашивать каждое активное устройство ввода-вывода, чтобы определить, является ли оно источником. Код, который это делает, называется пропустить цепочку потому что он состоит из серии инструкций ввода-вывода PDP-8 "тест и пропуск, если установлен флаг". (Нередко цепочка пропуска доходила до конца, не находя любой устройство, нуждающееся в обслуживании.) Относительный приоритет прерывания устройств ввода-вывода определяется их положением в цепочке пропуска: если несколько устройств прерывают работу, то устройство, испытанное ранее в цепочке пропуска, обслуживается первым.

Книги

Учебник инженерного дела, популярный в 1980-х, Искусство цифрового дизайна Дэвида Винкеля и Франклина Проссера, содержит пример задачи, охватывающий несколько глав, в которых авторы демонстрируют процесс проектирования компьютера, совместимого с PDP-8 / I. Объясняется функция каждого компонента. Хотя это не серийный дизайн, так как в нем используются более современные SSI и MSI компонентов, упражнение дает подробное описание работы компьютера.

Рекомендации

  1. ^ а б «Обзор моделей и опций PDP-8». Раздел - Что такое PDP-5.
  2. ^ а б Дуглас В. Джонс. "The Digital Equipment Corporation PDP-8 - Часто задаваемые вопросы".
  3. ^ Федеральный резервный банк Миннеаполиса. «Индекс потребительских цен (оценка) 1800–». Получено 1 января, 2020.
  4. ^ а б Шейн, Эдгар Х. (2004). DEC мертв, да здравствует DEC: прочное наследие Digital Equipment Corporation. Сан-Франциско, Калифорния: издательство Berrett-Koehler Publishers. п. 271. ISBN  1576753050.
  5. ^ Дуглас В. Джонс. "Корпорация цифрового оборудования PDP-8".
  6. ^ «ПДП-8 1965 года». История Wired. Смитсоновский институт. Архивировано из оригинал на 2015-02-17. Получено 17 февраля, 2015.
  7. ^ Компьютерный музей Род-Айленда. «Цифровое оборудование PDP-8 / S, S / N 517».
  8. ^ Гленн Рифкин; Джордж Харрар (1988). Конечный предприниматель: история Кена Олсена и Digital Equipment Corporation. ISBN  978-1-55958-022-9.
  9. ^ Справочник по малым компьютерам, НОВАЯ версия PDP 8 / I (вперед). Корпорация цифрового оборудования. 1968.
  10. ^ «Сравнительный анализ языков». Журнал ПК. Vol. 4 шт. 22. 29 октября 1985 г. с. 112. наилучшее использование самого ценного компьютерного ресурса сегодняшнего дня: времени программиста ...
  11. ^ фраза, использованная в разделе 1.1 «Введение в центральный процессор (ЦП)» документа 2007 года о микрокомпьютере Texas Instruments.«ЦП TMS320C28x и набор команд (Rev. F)» (PDF).
  12. ^ Торбен Эгидиус Могенсен (20 августа 2010 г.). Основы проектирования компилятора (PDF). п. 1. Еще одно преимущество использования языка высокого уровня состоит в том, что одну и ту же программу можно скомпилировать для множества разных машинных языков и, следовательно, запустить на многих разных машинах.
  13. ^ К. Гордон Белл; Дж. К. Мадж; Дж. Э. Макнамара (1978). Компьютерная инженерия: взгляд DEC на проектирование аппаратных систем (PDF). Цифровая пресса. п.175. ISBN  0-932376-00-2.
  14. ^ Справочное руководство для программистов системы с плавающей запятой PDP-8 (PDF). Корпорация цифрового оборудования. Сентябрь 1969 г. DEC-08-YQYB-D.
  15. ^ «Наборная система ПДП-8» (PDF). Корпорация цифрового оборудования. 1965 г.
  16. ^ С. Гордон Белл и др .; Компьютерные структуры, принципы и организация, 1982, глава PDP-8
  17. ^ «Глава 8: Расширенный арифметический элемент типа 182». Руководство пользователя PDP-8. Корпорация цифрового оборудования. 1966. с. 41.
  18. ^ «Глава 4: Описание и работа системы». Введение в программирование (PDF). Корпорация цифрового оборудования. 1969. С. 4–22.
  19. ^ PDP-8 / S Руководство по техническому обслуживанию. Корпорация цифрового оборудования. 1971 г.
  20. ^ Ремо Дж. Фогельсанг (2013). «Из первых рук: PDP-8 / E OMNIBUS Ride».
  21. ^ «Обзор моделей и опций PDP-8 (публикуется раз в два месяца)». www.faqs.org.
  22. ^ «PDP-8 - высокоскоростной цифровой компьютер» (PDF). 1965. с. 18.
  23. ^ PDP-8 / S Руководство по техническому обслуживанию (PDF) (5-е изд.). Октябрь 1970 г. с. 1-2.
  24. ^ «Таблица 11. Установочные данные». Справочник по маленькому компьютеру (PDF) (1967-68 изд.). 1968. с. 290 (300).
  25. ^ «Таблица 13-1 Установочные данные». Справочник по маленькому компьютеру (PDF) (Изд. 1970 г.). 1970. стр. 277 (291).
  26. ^ «Характеристики семейства PDP-8». Брошюра о продаже PDP-8 / e / f / m (PDF). п. 17.
  27. ^ «Характеристики семейства PDP-8». Брошюра по продаже PDP-8 / e / f / m (PDF). п. 17.
  28. ^ "Музей компьютерных систем-источников: ПДП-8М".
  29. ^ «Характеристики семейства PDP-8». Брошюра о продаже PDP-8 / e / f / m (PDF). п. 17.
  30. ^ «Взрыв 1975-1976» AntiqueTech ». AntiqueTech.com. 2009-04-21. Архивировано из оригинал на 2017-07-03. Получено 2017-06-19.
  31. ^ а б Белл, Гордон (1980), Семейное древо цифровых компьютеров, (Плакат), Digital Equipment Corporation, получено 2017-06-19
  32. ^ «SBC6120». 2011-12-05. Получено 2016-05-14.
  33. ^ «Устаревание гарантировано». Получено 2016-05-14.
  34. ^ Руководство по программированию FOCAL для PDP-8, PDP-8 / S, PDP-8 / I, LAB-8, LINC-8 (PDF). Корпорация цифрового оборудования. 1968. DEC-08-AJAB-D.
  35. ^ Марк Смотерман."Подпрограммы DEC PDP-8".2002.
  • С. Гордон Белл и Аллен Ньюэлл, 1971, Компьютерные структуры: литература и примеры, McGraw-Hill Book Company, Нью-Йорк. Глава 5 DEC PDP-8, страницы 120–136. С достаточной детализацией, чтобы инженер-электрик мог его построить (если сможет найти детали).

внешняя ссылка