stringtranslate.com

ПДП-8

PDP -8 — это семейство 12-разрядных мини-компьютеров , выпускаемых компанией Digital Equipment Corporation (DEC) . Это был первый коммерчески успешный мини-компьютер, за время существования модели было продано более 50 000 единиц. [1] Его базовая конструкция соответствует новаторскому LINC , но имеет меньший набор инструкций , который является расширенной версией набора инструкций PDP-5 . [2] Аналогичные машины от DEC — PDP-12 , представляющий собой модернизированную версию концепций PDP-8 и LINC, а также промышленная система контроллера PDP-14 .

Обзор

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

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

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

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

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

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

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

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

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

Описание

PDP-8 использовал идеи нескольких 12-битных предшественников, таких как LINC, разработанный У. А. Кларком и CE Молнаром , которые были вдохновлены мини-компьютером CDC 160 Сеймура Крея . [2] [14]

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

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

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

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

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

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

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

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

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

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

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

Даже более поздний PDP-8/E — это более крупный, более производительный компьютер, но дополнительно переработанный для лучшей стоимости. Он использует более быструю транзисторно-транзисторную логику в интегральных схемах. Основная память была переработана. Она допускает расширение с меньшими затратами, поскольку использует OMNIBUS вместо задней панели с обмоткой проводами, как в более ранних моделях. (Персональный отчет о разработке PDP-8/E можно прочитать на Engineering and Technology History Wiki. [22] )

Модели

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

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

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

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

Одна из первых коммерческих версий виртуальной машины PDP-8/S работала на Kaypro 386 (компьютер на базе 80386) и была написана на языке программирования C (до того, как был окончательно утвержден стандарт ANSI-C) и ассемблере Дэвидом Бичером из Денвера, штат Колорадо. Она заменила вышедший из строя компьютер PDP-8/S, который управлял машиной для обработки топлива на реакторе № 85, электростанции Platteville, Colorado Nuclear Fuel powered Electric Generating Station, Ft. St. Vrain. Она была рассмотрена Rockwell International и безупречно работала в течение 2,5 лет во время работы машины для обработки топлива, пока она использовалась для извлечения топлива из активной зоны реактора и вывода станции из эксплуатации. Она включала в себя имитацию загрузчика бумажной ленты и переднюю панель.

Ввод/вывод

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

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

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

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

Возможности программирования

Ранние системы PDP-8 поставлялись без предустановленного программного обеспечения; каждый раз при включении PDP-8 пользователь вручную вводил инструкции с помощью группы из 12 тумблеров. Обычно эти инструкции представляли собой загрузчик для чтения программы с устройства чтения перфоленты. Затем можно было продолжить разработку программы, используя ввод и вывод перфоленты.

Стали доступны бумажные версии ряда языков программирования, включая интерпретатор FOCAL компании DEC [35], а также компилятор и среду выполнения 4K FORTRAN .

К концу эпохи 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), и часто поставлялось с полными списками исходных текстов и документацией.

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

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

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

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

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

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

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

000 – И – И операнд памяти с AC.
001 – TAD – Дополнение до двух. Сложение операнда памяти с <L,AC> ( 12-битное знаковое значение (AC) с переносом в L).
010 – ISZ – Увеличить операнд памяти и пропустить следующую инструкцию, если результат равен нулю.
011 – DCA – Поместить AC в операнд памяти и очистить AC.
100 – JMS – Переход к подпрограмме (сохранение адреса возврата в первом слове подпрограммы!).
101 – JMP – JMP.
110 – IOT – передача ввода/вывода (см. ниже).
111 – OPR – микрокодированные OPeRations (см. ниже).

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

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

Устройство

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

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

Функция

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

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

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

OPR (OPeRate)

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

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

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

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

Одно действие (и соответствующий бит), которое одинаково во всех группах, это бит 4, CLA. Если установлено, аккумулятор очищается.

Группа 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) приводит к очистке аккумулятора, увеличению его на 1, а затем его повороту влево, оставляя его установленным на 2. Таким образом, небольшие целочисленные константы помещались в аккумулятор с помощью одной инструкции.

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

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

Группа 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 – Стоп

Три бита (CLA, OSR, HLT) выполняют действия, если установлены. Еще три бита (SMA, SZA, SNL) кодируют условия пропуска; пропуск выполняется, если любое из указанных условий истинно. Например, "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 инвертируется; пропуск не выполняется, если любое из условий группы или истинно. По законам Де Моргана это означает, что пропуск выполняется , если все указанные инвертированные условия истинны. Например, "SPA SNA", код операции 7550, пропускает, если AC > 0. Если ни один из битов 5–7 не установлен, то пропуск безусловный.

Действия (CLA, OSR, HLT) не зависят от бита 8.

Группа 3

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

 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 – LSR – Логический сдвиг вправо

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

Стек основной памяти 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, ​​Change Data Field) устанавливает поле данных в X. Аналогично 62X2 (CIF) устанавливает поле инструкции, а 62X3 устанавливает оба. Существующие ранее программы никогда не выполняли CIF или CDF; регистры DF и IF оба указывали бы на одно и то же поле, единственное поле, которым были ограничены эти программы. Эффект инструкции CIF был отложен, чтобы совпасть со следующей инструкцией JMP или JMS, так что выполнение CIF не вызывало бы перехода.

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

Расширенная схема памяти позволяла существующим программам обрабатывать увеличенную память с минимальными изменениями. Например, 4K FOCAL обычно имел около 3K кода, и только 1K оставался для пользовательской программы и данных. С несколькими исправлениями 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 / Дополнить, затем увеличить 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 / Установить текущую исходную точку сборки в область текста программы ПРИВЕТ, CLA CLL / Очистите AC и снова подключитесь (необходимо, когда мы возвращаемся из tls) TAD IZ STPTR / Получить следующий символ, косвенно через PRE-автоинкрементный адрес с нулевой страницы SNA / Пропустить, если не ноль (не конец строки) HLT / Иначе остановка на нуле (конец строки) TLS / Вывод символа в AC на телетайп TSF / Пропустить, если телетайп готов к символу JMP .-1 / Иначе вернитесь назад и попробуйте снова JMP HELLO / Перейти назад для следующего символа СТРНГ, 310 / Ч 345 / е 354 / л 354 / л 357 / о 254 /, 240 / (пробел) 367 / ж 357 / о 362 / р 354 / л 344 / д 241 / ! 0 / Конец строки $HELLO /ТЕРМИНАТОР ПО УМОЛЧАНИЮ

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

Процессор PDP-8 не реализует стек , на котором можно хранить регистры или другой контекст при вызове подпрограммы или возникновении прерывания . (Стек может быть реализован программно, как показано в следующем разделе.) Вместо этого инструкция JMS просто сохраняет обновленный PC (указывающий мимо 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 / Известное сообщение "е / "l / ПРИМЕЧАНИЕ: "л / "o / Строки в PAL-8 и PAL-III были "шестибитными" ", / Чтобы использовать ASCII, мы пишем его по буквам, символ за символом " / "с / "о / "г / "л / "д / "! / 015 / 012 / 0 / Отметить конец нашей строки с нулевым символом в конце (.ASCIZ еще не был изобретен!)

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

 JUMPL, DCA TEMP / Поместите аккумулятор во временное место TAD JUMPL+3 / Загрузка адреса возврата в аккумулятор: жестко запрограммировано JMP SUBRO / Перейти к подпрограмме и сделать так, чтобы она обработала переход назад (к JUMPL+3)

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

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

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

 *100 /сделать процедуры доступными для следующего примера НАЖМИТЕ, 0 ДАННЫЕ DCA CLA CMA / -1 ТАД СП DCA СП ДАННЫЕ ТАД DCA I SP JMP I PUSH /Возврат ПОП, 0 CLA CLL ТАД I СП ИСЗ СП JMP I POP ДАННЫЕ, 0 СП, 0

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

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

Прерывания

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

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

Книги

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

Нелицензионные клоны

В СССР выпускались мини-ЭВМ «Саратов-1» и «Саратов-2», являвшиеся клонами PDP-8 и PDP-8/E соответственно.

В 70-х и 80-х годах в Болгарии выпускался мини-компьютер ИЗОТ-0310, который был клоном PDP-8L.

Ссылки

  1. ^ "Ранние вычисления в NIH - Офис истории NIH и Музей Штеттена". history.nih.gov . Получено 2024-07-17 .
  2. ^ ab "Обзор моделей и опций PDP-8". Раздел - Что такое PDP-5.
  3. ^ ab Дуглас У. Джонс . «The Digital Equipment Corporation PDP-8 — Часто задаваемые вопросы».
  4. ^ 1634–1699: McCusker, JJ (1997). Сколько это в реальных деньгах? Исторический индекс цен для использования в качестве дефлятора денежных ценностей в экономике Соединенных Штатов: Дополнения и исправления (PDF) . Американское антикварное общество .1700–1799: Маккаскер, Дж. Дж. (1992). Сколько это в реальных деньгах? Исторический индекс цен для использования в качестве дефлятора стоимости денег в экономике Соединенных Штатов (PDF) . Американское антикварное общество .1800–настоящее время: Федеральный резервный банк Миннеаполиса. "Индекс потребительских цен (оценка) 1800–" . Получено 29 февраля 2024 г.
  5. ^ ab Schein, Edgar H. (2004). DEC мертва, да здравствует DEC: вечное наследие Digital Equipment Corporation. Сан-Франциско, Калифорния: Berrett-Koehler Publishers. стр. 271. ISBN 1576753050.
  6. ^ Дуглас У. Джонс. «Корпорация цифрового оборудования PDP-8».
  7. ^ "PDP-8 1965". History Wired . Smithsonian Institution . 16 марта 2012 г. Архивировано из оригинала 2015-02-17 . Получено 17 февраля 2015 г.
  8. ^ ab "PDP-8/S #1". Музей компьютеров Род-Айленда . 18 августа 2020 г. Архивировано из оригинала 2021-02-26 . Получено 7 мая 2021 г.
  9. ^ Гленн Рифкин; Джордж Харрар (1988). Лучший предприниматель: история Кена Олсена и Digital Equipment Corporation. Contemporary Books. ISBN 978-1-55958-022-9.
  10. ^ Small Computer Handbook, НОВОЕ издание PDP 8/I (вперед) . Digital Equipment Corporation . 1968.
  11. ^ "Benchmarking the Languages". PC Magazine . Vol. 4, no. 22. 29 октября 1985 г. стр. 112. наилучшее использование самого ценного сегодня компьютерного ресурса: времени программиста ...
  12. ^ фраза, используемая в разделе 1.1 «Введение в центральный процессор (ЦП)» документа 2007 года о микрокомпьютере Texas Instruments. «ЦП и набор инструкций TMS320C28x (Rev. F)» (PDF) .
  13. ^ Торбен Эгидиус Могенсен (20 августа 2010 г.). Основы проектирования компиляторов (PDF) . стр. 1. Еще одним преимуществом использования языка высокого уровня является то, что одну и ту же программу можно скомпилировать во множество различных машинных языков и, следовательно, запустить на множестве различных машин.
  14. ^ C. Gordon Bell ; JC Mudge; JE McNamara (1978). Компьютерная инженерия: взгляд DEC на проектирование аппаратных систем (PDF) . Digital Press . стр. 175. ISBN 0-932376-00-2.
  15. ^ Справочное руководство программиста систем с плавающей точкой PDP-8 (PDF) . Digital Equipment Corporation. Сентябрь 1969 г. DEC-08-YQYB-D.
  16. ^ "Система набора PDP-8" (PDF) . Digital Equipment Corporation. 1965.
  17. ^ C. Gordon Bell и др.; Компьютерные структуры, принципы и организация, 1982, глава PDP-8
  18. ^ "Глава 8: Расширенный арифметический элемент типа 182". PDP-8 User's Handbook . Digital Equipment Corporation. 1966. стр. 41.
  19. ^ "Глава 4: Описание и эксплуатация системы". Введение в программирование (PDF) . Digital Equipment Corporation. 1969. С. 4–22.
  20. ^ Руководство по техническому обслуживанию PDP-8/S . Digital Equipment Corporation. 1971.
  21. ^ "PDP -8/S". Технология PDP-8 до наступления тысячелетия . Архивировано из оригинала 2000-10-23 . Получено 2021-05-13 .
  22. ^ Ремо Дж. Фогельсанг (2013). «Из первых рук: Поездка на ОМНИБУСЕ PDP-8/E».
  23. ^ "Часто задаваемые вопросы о DEC PDP-8 Дуга Джонса". homepage.cs.uiowa.edu . Получено 24.03.2024 .
  24. ^ «Обзор моделей и опций PDP-8 (публикуется раз в два месяца)». www.faqs.org .
  25. ^ "PDP-8 - Высокоскоростной цифровой компьютер" (PDF) . 1965. стр. 18.
  26. Руководство по техническому обслуживанию PDP-8/S (PDF) (5-е изд.). Октябрь 1970 г. стр. 1-2.
  27. ^ "Таблица 11. Данные по установке". Small Computer Handbook (PDF) (1967-68 ред.). 1968. стр. 290 (300).
  28. ^ "Таблица 13-1 Данные по установке". Small Computer Handbook (PDF) (ред. 1970 г.). 1970. стр. 277 (291).
  29. ^ "Характеристики семейства PDP-8". Брошюра по продажам PDP-8/e/f/m (PDF) . стр. 17.
  30. ^ "Характеристики семейства PDP-8". Брошюра по продажам PDP-8/e/f/m (PDF) . стр. 17.
  31. ^ "Музей системных компьютеров: PDP-8M".
  32. ^ "Характеристики семейства PDP-8". Брошюра по продажам PDP-8/e/f/m (PDF) . стр. 17.
  33. ^ "Взрыв 1975-1976 » AntiqueTech". AntiqueTech.com. 2009-04-21. Архивировано из оригинала 2017-07-03 . Получено 2017-06-19 .
  34. ^ ab Bell, Gordon (1980), Генеалогическое древо компьютеров Digital, (Плакат), Digital Equipment Corporation , получено 19 июня 2017 г.
  35. ^ Руководство по программированию FOCAL для PDP-8, PDP-8/S, PDP-8/I, LAB-8, LINC-8 (PDF) . Digital Equipment Corporation. 1968. DEC-08-AJAB-D.
  36. ^ Small Computer Handbook 1967–1968 . Digital Equipment Corporation. 1968. С. 130–136.
  37. ^ Марк Смотерман. «Подпрограммы DEC PDP-8». 2002.

Внешние ссылки