Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

PDP-8 представляет собой 12-битный миникомпьютер , который был произведен Digital Equipment Corporation (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 . Их цена была неконкурентоспособной, и предложение провалилось. Intersil продавала интегральные схемы на коммерческой основе до 1982 года как Intersil 6100.семья. Благодаря своей технологии CMOS они имели низкое энергопотребление и использовались в некоторых встроенных военных системах.

Главным инженером, разработавшим первоначальную версию PDP-8, был Эдсон де Кастро , который позже основал Data General . [8]

Архитектурное значение [ править ]

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

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

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

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

Описание [ править ]

PDP-8 использовал идеи из нескольких 12-битных предшественников, прежде всего ЛИНК разработан WA Clark и CE Молнар , которые были вдохновлены Seymour Cray «s CDC 160 миникомпьютер. [1] [13]

PDP-8 / e в Музее живых компьютеров .

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

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

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

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

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

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

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

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

Электроника основного PDP-8 CPU имеет только четыре 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 Wiki. [20] )

Версии PDP-8 [ править ]

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

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

Реализации последних дней [ править ]

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 и регистров подсчета слов на процессор. В трех последовательных циклах памяти процессор обновляет счетчик слов, обновляет адрес передачи и сохраняет или извлекает фактическое слово данных ввода / вывода.

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

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

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

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

К концу эры PDP-8 операционные системы, такие как OS / 8 и COS-310, позволяли использовать традиционный редактор в строчном режиме и систему разработки компилятора командной строки с использованием таких языков, как язык ассемблера PAL-III, FORTRAN, BASIC и DIBOL. .

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

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

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

Набор инструкций [ править ]

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

Страницы памяти

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

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

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

Основные инструкции [ править ]

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

Инструкции IOT (ввод-вывод) [ править ]

Процессор PDP-8 определил несколько инструкций IOT, но просто обеспечил основу. Большинство инструкций 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 - Приращение <L, AC>
7010 - RAR - повернуть <L, AC> вправо
7004 - RAL - Повернуть <L, AC> влево
7012 - RTR - повернуть <L, AC> вправо дважды
7006 - RTL - дважды повернуть <L, AC> влево
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 - OSR - логически 'или' переключатели на передней панели с переменным током
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 СПА 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 (множитель / коэффициент). Команды регистра MQ и расширенного арифметического элемента (EAE) являются необязательными и существуют только при покупке опции EAE. [35]

 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 - Коэффициент загрузки множителя (перенести 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 выводит "Hello, world!" к телетайпу.

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

Подпрограммы [ править ]

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

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

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

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

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

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

Программный стек [ править ]

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

 НАЖАТЬ, 0 ДАННЫЕ DCA CLA CMA / -1 ТАД ИП DCA SP ДАННЫЕ TAD DCA I SP JMP I PUSH / Возврат ПОП, 0 CLA CLL ТАД И СП ISZ SP JMP I POP ДАННЫЕ, 0 СП, 0

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

 * 200 MAIN, CLA CLL / Установить указатель сообщения TAD (MESSG / В начало сообщения (букв.) DCA SP ЦИКЛ, JMS POP SNA / Остановить выполнение, если ноль HLT JMS OUT / В противном случае вывести символ JMP LOOP MESSG, "H" ", " "! 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 ТЕМП, 0

Прерывания [ править ]

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

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

Книги [ править ]

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

Нелицензионные клоны [ править ]

СССР производил миникомпьютеры Саратов-1 и Саратов-2, соответственно, PDP-8 и PDP-8 / Е .

Ссылки [ править ]

  1. ^ a b «Обзор моделей и опций PDP-8» . Раздел - Что такое PDP-5.
  2. ^ a b Дуглас У. Джонс . "The Digital Equipment Corporation PDP-8 - Часто задаваемые вопросы" .
  3. ^ Федеральный резервный банк Миннеаполиса. «Индекс потребительских цен (оценка) 1800–» . Проверено 1 января 2020 года .
  4. ^ a b Шейн, Эдгар Х. (2004). DEC мертв, да здравствует DEC: непреходящее наследие Digital Equipment Corporation . Сан-Франциско, Калифорния: издательство Berrett-Koehler. п. 271. ISBN. 1576753050.
  5. ^ Дуглас В. Джонс. "Корпорация цифрового оборудования PDP-8" .
  6. ^ "PDP-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. ^ Small Computer Handbook, NEW PDP 8 / I edition (Вперед) . Корпорация цифрового оборудования . 1968 г.
  10. ^ «Сравнительный анализ языков» . Журнал ПК . Vol. 4 шт. 22. 29 октября 1985 г. с. 112. Лучшее использование самого ценного компьютерного ресурса сегодня: время программиста ...
  11. ^ фраза, использованная в разделе 1.1 «Введение в центральный процессор (ЦП)» документа 2007 года о микрокомпьютере Texas Instruments. «ЦП TMS320C28x и набор команд (Rev. F)» (PDF) .
  12. ^ Торбена Эгидий Могенсен (20 августа 2010). Основы проектирования компиляторов (PDF) . п. 1. Еще одно преимущество использования языка высокого уровня состоит в том, что одну и ту же программу можно скомпилировать для множества различных машинных языков и, следовательно, запустить на многих разных машинах.
  13. ^ К. Гордон Белл ; JC Mudge; Дж. Э. Макнамара (1978). Компьютерная инженерия: взгляд DEC на проектирование аппаратных систем (PDF) . Цифровая пресса . п. 175 . ISBN  0-932376-00-2.
  14. ^ Справочное руководство для программистов системы с плавающей запятой PDP-8 (PDF) . Корпорация цифрового оборудования. Сентябрь 1969. DEC-08-YQYB-D.
  15. ^ "Система набора PDP-8" (PDF) . Корпорация цифрового оборудования. 1965 г.
  16. ^ C. Гордон Белл и др .; Компьютерные структуры, принципы и организация, 1982, глава PDP-8
  17. ^ «Глава 8: Тип 182 расширенных арифметических элементов» . Руководство пользователя PDP-8 . Корпорация цифрового оборудования. 1966. с. 41.
  18. ^ «Глава 4: Описание и работа системы». Введение в программирование (PDF) . Корпорация цифрового оборудования. 1969. С. 4–22.
  19. ^ PDP-8 / S Руководство по техническому обслуживанию . Корпорация цифрового оборудования. 1971 г.
  20. ^ Remo J. Vogelsang (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. ^ "Музей компьютера источника системы: PDP-8M" .
  29. ^ "Спецификации семейства PDP-8". Брошюра по продаже PDP-8 / e / f / m (PDF) . п. 17.
  30. ^ «Взрыв 1975-1976» AntiqueTech » . AntiqueTech.com. 2009-04-21. Архивировано из оригинала на 2017-07-03 . Проверено 19 июня 2017 .
  31. ^ a b Белл, Гордон (1980), Семейное древо компьютеров Digital , (плакат), Digital Equipment Corporation , извлечено 19 июня 2017 г.
  32. ^ "SBC6120" . 2011-12-05 . Проверено 14 мая 2016 .
  33. ^ «Устаревание гарантировано» . Проверено 14 мая 2016 .
  34. ^ Руководство по программированию FOCAL для PDP-8, PDP-8 / S, PDP-8 / I, LAB-8, LINC-8 (PDF) . Корпорация цифрового оборудования. 1968. DEC-08-AJAB-D.
  35. ^ Справочник по маленькому компьютеру 1967-1968 . Корпорация цифрового оборудования. 1968. С. 130–136.
  36. ^ Марк Смотерман. "Подпрограммы DEC PDP-8" . 2002 г.
  • К. Гордон Белл и Аллен Ньюэлл , 1971, Компьютерные структуры: материалы и примеры , McGraw-Hill Book Company, Нью-Йорк. Глава 5 DEC PDP-8 , страницы 120–136. С достаточной детализацией, чтобы инженер-электрик мог его построить (если сможет найти детали).

Внешние ссылки [ править ]

  • pdp-8 Documentation: The Small Computer Handbook (издание 1966 года), разделы 1 и 2 и другие доступны в Университете Саймона Фрейзера.
  • «Часто задаваемые вопросы по PDP-8» . www.faqs.org . Одна страница . 27 марта 2014 . Проверено 16 декабря 2018 .CS1 maint: others (link)
  • http://homepage.cs.uiowa.edu/~jones/pdp8/
  • «Обзор моделей и опций PDP-8» . www.faqs.org . Одна страница . 27 марта 2014 . Проверено 16 декабря 2018 .CS1 maint: others (link)
  • На pdp8online.com есть работающий PDP8, которым любой может управлять с помощью Java-апплета, а также веб-камера для отображения результатов.
  • dpa , портативный кросс-ассемблер PDP-8
  • Компьютер, совместимый с SBC6120 PDP-8 Spare Time Gizmos, с дополнительной передней панелью
  • Все еще работающие Classic 8, PDP 8e и 8i в немецком компьютерном музее
  • Изящный симулятор Бернхарда Бэра PDP-8 / E для Macintosh
  • Симулятор Виллема ван дер Марка PDP-8 / E на Java
  • http://simh.trailing-edge.com очень портативный симулятор для PDP-8, который работает практически на любой современной ОС.
  • Реплика PDP-8 с открытым исходным кодом PiDP-8 с использованием Raspberry Pi с SIMH, подключенной к реплике передней панели PDP-8.
  • The Digital Equipment Corporation PDP-8, 1965  - Коллекция истории компьютеров из Смитсоновского института
  • Историческое применение PDP8 в Германии для всех центров Deutsche Bank и других финансовых институтов: Olympia Multiplex 80 (Olympia Business Systems)
  • Руководство по сохранению и восстановлению компьютеров PDP-8
  • PDP-8 от Digital Equipment Corporation. Объяснение Стива Гибсона о том, как работает PDP-8 и как ее программировать.
  • На YouTube есть серия видеороликов, демонстрирующих PDP-8.
  • «Указатель документов PDP-8» . Сайт BitSavers.Org . Проверено 29 мая 2011 года .