stringtranslate.com

ПДП-8

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 вверху.
«Straight-8» работает в Штутгартском компьютерном музее.

Самая ранняя модель PDP-8, неофициально известная как «Straight-8», была представлена ​​22 марта 1965 года по цене 18 500 долларов США [2] (что эквивалентно примерно 171 800 долларов США в 2022 году [3] ). Он использует диодно-транзисторную логику , упакованную на флип-чип -картах в машине размером с небольшой бытовой холодильник . Это был первый компьютер, проданный менее чем за 20 000 долларов, [4] что сделало его самым продаваемым компьютером в истории того времени. [5] [ не удалось проверить ] [6] [ не удалось проверить ] В 1966 году Straight-8 был вытеснен PDP-8/S, который был доступен в настольных и стоечных моделях. Использование однобитного последовательного арифметико-логического устройства (АЛУ) позволило сделать 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 . Благодаря технологии КМОП они имели низкое энергопотребление и использовались в некоторых встроенных военных системах.

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

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

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

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

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

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

Описание

В PDP-8 использовались идеи нескольких 12-битных предшественников, таких как LINC , разработанный У.А. Кларком и К.Э. Молнаром , вдохновленными миникомпьютером 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 ) двенадцатибитных слов, или 6 КБ в современных терминах. Дополнительный блок расширения памяти может переключать банки памяти с помощью инструкций 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]

Инструкции PDP-8 имеют трехбитный код операции, поэтому инструкций всего восемь. Ассемблер предоставляет программисту больше мнемоники команд, преобразуя инструкции ввода-вывода и режима работы в комбинации кодов операций и полей инструкций. Он также имеет только три видимых программисту регистра : 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 имеет только четыре 12-битных регистра: аккумулятор, счетчик программ, регистр буфера памяти и регистр адреса памяти . Чтобы сэкономить деньги, они служили нескольким целям на разных этапах операционного цикла. Например, регистр буфера памяти предоставляет арифметические операнды, является частью регистра команд и хранит данные для перезаписи основной памяти . (Это восстанавливает основные данные, уничтоженные при чтении.)

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

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

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

Модели

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

Современные реализации

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

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

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

Ввод, вывод

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

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

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

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

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

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

Стали доступны бумажные версии ряда языков программирования, включая интерпретатор FOCAL от DEC [33] , а также компилятор и среду выполнения 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 Corporation, и часто сопровождалось полными списками исходных кодов и документацией.

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

Три старших бита 12-битного командного слова (обозначенные битами от 0 до 2) представляют собой код операции. Для шести операций, относящихся к памяти, биты с 5 по 11 предоставляют семибитный адрес. Бит 4, если он установлен, указывает на необходимость завершения адреса с использованием пяти старших бит регистра счетчика программ (PC), что означает, что адресуемая ячейка находится в пределах тех же 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 – внесение AC в операнд памяти и очистка AC.
100 – JMS – JuMp to Subroutine (сохранение адреса возврата в первом слове подпрограммы!).
101 – ЮМП – ЮМП.
110 – IOT – Передача ввода/вывода (см. ниже).
111 – OPR – микрокодированные операции (см. ниже).

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

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

Устройство

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

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

Функция

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

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

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

ОПР (OPeRate)

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

Говорят, что инструкция OPR «микрокодирована». Это не означало то, что означает это слово сегодня (что программа более низкого уровня извлекала и интерпретировала инструкцию OPR), а означало, что каждый бит командного слова определяет определенное действие, и программист мог выполнить несколько действий за один цикл инструкции. установив несколько битов. При использовании программист может написать несколько мнемоник инструкций рядом друг с другом, а ассемблер объединяет их с помощью OR для создания фактического командного слова. Многие устройства ввода-вывода поддерживают «микрокодированные» инструкции 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 СЗА ОСР СМА СНЛ ХЛТ 2 1 1 1 3 3
7600 — CLA — Прозрачный AC
7500 – SMA – Пропустить AC < 0 (или группу)
7440 — СЗА — Пропустить АС = 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 СНА ЛАРН СПА СЗЛ ХЛТ 2 1 1 1 3 2
7410 — СКП — Пропустить безусловно
7610 — CLA — Прозрачный AC
7510 – SPA – Пропустить AC ≥ 0 (и группу)
7450 – SNA – Пропустить AC ≠ 0 (и группу)
7430 — SZL — Пропустить L = 0 (и группу)

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

Группа 3

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

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

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

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

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

 *10 / Установить исходную точку текущей сборки по адресу 10, STPTR, STRNG-1 / Регистр автоинкремента (один из восьми по номерам 10–17) *200 / Установить начало сборки (адрес загрузки) LOOP, TAD I STPTR / Предварительное увеличение ячейки памяти 10, косвенная выборка, чтобы получить следующий символ нашего сообщения SNA / Пропустить ненулевой переменный ток HLT / Иначе остановка в конце сообщения JMS OUT1 / Записать один символ JMP LOOP / И вернуться назад, чтобы узнать больше OUT1, 0 / Будет заменен обновленным ПК звонящего TSF / Пропустить, если принтер готов JMP .-1 / Ожидание флага TLS/Отправить персонажа в AC CLA CLL / Очистить AC и Link для следующего прохода JMP I OUT1 / Возврат к вызывающему абоненту STRNG, "H/Известное сообщение "э / "л/ПРИМЕЧАНИЕ: "л/ "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 не имеет аппаратного стека , стеки можно реализовать программно. [35] Вот примеры подпрограмм PUSH и POP, упрощенные для исключения таких проблем, как проверка на переполнение и опустошение стека:

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

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

 *200 MAIN, CLA CLL /Установить указатель сообщения TAD (MESSG /В начало сообщения (буквальное) ДКА СП ПЕТЛЯ, JMS ПОП SNA/Остановить выполнение, если ноль HLT JMS OUT /Иначе вывести символ ПЕТЛЯ ДЖМП МЕССГ, "Ч ", " "! 015 012 0 OUT, 0 / Будет заменен обновленным ПК звонящего TSF / Пропустить, если принтер готов JMP .-1 / Ожидание флага TLS/Отправить персонажа в AC CLA CLL / Очистить AC и Link для следующего прохода 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 соответственно.

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

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

  1. ^ ab «Краткий обзор моделей и опций PDP-8». Раздел - Что такое PDP-5.
  2. ^ аб Дуглас В. Джонс . «Корпорация цифрового оборудования PDP-8 — часто задаваемые вопросы».
  3. ^ 1634–1699: Маккаскер, Джей-Джей (1997). Сколько это в реальных деньгах? Исторический индекс цен для использования в качестве дефлятора денежных ценностей в экономике Соединенных Штатов: Addenda et Corrigenda (PDF) . Американское антикварное общество .1700–1799: Маккаскер, Джей-Джей (1992). Сколько это в реальных деньгах? Исторический индекс цен для использования в качестве дефлятора денежных ценностей в экономике Соединенных Штатов (PDF) . Американское антикварное общество .1800 – настоящее время: Федеральный резервный банк Миннеаполиса. «Индекс потребительских цен (оценка) 1800–» . Проверено 28 мая 2023 г.
  4. ^ Аб Шейн, Эдгар Х. (2004). DEC умерла, да здравствует DEC: вечное наследие Digital Equipment Corporation. Сан-Франциско, Калифорния: Издательство Berrett-Koehler. п. 271. ИСБН 1576753050.
  5. ^ Дуглас В. Джонс. «Корпорация цифрового оборудования PDP-8».
  6. ^ "ПРП-8 1965". История Wired . Смитсоновский институт . 16 марта 2012 г. Архивировано из оригинала 17 февраля 2015 г. Проверено 17 февраля 2015 г.
  7. ^ ab "PDP-8/S #1". Компьютерный музей Род-Айленда . 18 августа 2020 г. Архивировано из оригинала 26 февраля 2021 г. Проверено 7 мая 2021 г.
  8. ^ Гленн Рифкин; Джордж Харрар (1988). Настоящий предприниматель: история Кена Олсена и корпорации Digital Equipment. Современные книги. ISBN 978-1-55958-022-9.
  9. ^ Справочник по малому компьютеру, НОВОЕ издание PDP 8/I (Вперед) . Корпорация цифрового оборудования . 1968.
  10. ^ «Сравнительный анализ языков». Журнал ПК . Том. 4, нет. 22. 29 октября 1985. с. 112. Как лучше всего использовать самый ценный компьютерный ресурс современности: время программиста...
  11. ^ фраза, использованная в разделе 1.1 «Введение в центральный процессор (ЦП)» документа 2007 года о микрокомпьютере Texas Instruments. «ЦП TMS320C28x и набор инструкций (версия F)» (PDF) .
  12. Торбен Эгидиус Могенсен (20 августа 2010 г.). Основы проектирования компиляторов (PDF) . п. 1. Еще одним преимуществом использования языка высокого уровня является то, что одну и ту же программу можно скомпилировать на многих разных машинных языках и, следовательно, запустить на многих разных машинах.
  13. ^ К. Гордон Белл ; Джей Си Мадж; Дж. Э. Макнамара (1978). Компьютерная инженерия: взгляд DEC на проектирование аппаратных систем (PDF) . Цифровая пресса . п. 175. ИСБН 0-932376-00-2.
  14. ^ Справочное руководство для системных программистов с плавающей запятой PDP-8 (PDF) . Корпорация цифрового оборудования. Сентябрь 1969 г. DEC-08-YQYB-D.
  15. ^ «Система набора текста PDP-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. ^ "ПРП-8/С" . Технология PDP-8 до наступления тысячелетия . Архивировано из оригинала 23 октября 2000 г. Проверено 13 мая 2021 г.
  21. ^ Ремо Дж. Фогельсанг (2013). «Из первых рук: Поездка на ОМНИБУСЕ PDP-8/E».
  22. ^ «Краткое описание моделей и опций PDP-8 (опубликуется раз в два месяца)» . www.faqs.org .
  23. ^ «PDP-8 — высокоскоростной цифровой компьютер» (PDF) . 1965. с. 18.
  24. ^ Руководство по техническому обслуживанию PDP-8/S (PDF) (5-е изд.). Октябрь 1970 г. с. 1-2.
  25. ^ «Таблица 11. Установочные данные» . Справочник по малому компьютеру (PDF) (изд. 1967–68 гг.). 1968. с. 290 (300).
  26. ^ «Таблица 13-1 Установочные данные» . Справочник по малому компьютеру (PDF) (изд. 1970 г.). 1970. с. 277 (291).
  27. ^ «Технические характеристики семейства PDP-8» . Брошюра по продажам PDP-8/e/f/m (PDF) . п. 17.
  28. ^ «Технические характеристики семейства PDP-8» . Брошюра по продажам PDP-8/e/f/m (PDF) . п. 17.
  29. ^ "Музей компьютеров System Source: PDP-8M" .
  30. ^ «Технические характеристики семейства PDP-8» . Брошюра по продажам PDP-8/e/f/m (PDF) . п. 17.
  31. ^ «Взрыв 1975-1976» AntiqueTech». AntiqueTech.com. 21 апреля 2009 г. Архивировано из оригинала 3 июля 2017 г. Проверено 19 июня 2017 г.
  32. ^ Аб Белл, Гордон (1980), Генеалогическое древо компьютеров Digital, (Плакат), Digital Equipment Corporation , получено 19 июня 2017 г.
  33. ^ Руководство по программированию FOCAL для PDP-8, PDP-8/S, PDP-8/I, LAB-8, LINC-8 (PDF) . Корпорация цифрового оборудования. 1968. ДЕКАБРЬ-08-АДЖАБ-Д.
  34. ^ Справочник по малому компьютеру 1967-1968 гг . Корпорация цифрового оборудования. 1968. стр. 130–136.
  35. ^ Марк Смотерман. «Подпрограммы DEC PDP-8». 2002.

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