Общие данные Нова
Эта статья нуждается в дополнительных цитатах для проверки . ( сентябрь 2016 г. ) |
Производитель | Общие данные |
---|---|
Семейство продуктов | Новый |
Операционная система | РДОС |
Data General Nova — серия 16-битных миникомпьютеров, выпущенная американской компанией Data General . Семейство Nova было очень популярно в 1970-х годах, и в конечном итоге было продано десятки тысяч единиц.
Первая модель, известная просто как «Нова», была выпущена в 1969 году. [ 1 ] Nova была упакована в один 3U стоечный корпус высотой и имела достаточную вычислительную мощность для решения большинства простых задач. Нова стала популярной в научных лабораториях по всему миру. В следующем году за ним последовал SuperNOVA , который работал примерно в четыре раза быстрее.
Представленная в период быстрого прогресса в разработке интегральных схем (или «микрочипов»), линейка претерпела несколько обновлений в течение следующих пяти лет, представив 800 и 1200, Nova 2, Nova 3 и, наконец, Nova 4. Однокристальная реализация была также представлена как microNOVA в 1977 году, но не получила широкого распространения, поскольку рынок перешел на новые конструкции микропроцессоров. В 1977 году компания Fairchild Semiconductor также представила микропроцессорную версию Nova — Fairchild 9440 , но она также нашла ограниченное применение на рынке.
На смену линии Nova пришла Data General Eclipse , которая во многом была похожа, но добавляла поддержку виртуальной памяти и другие функции, необходимые современным операционным системам . Результатом 32-битного обновления Eclipse стала серия Eclipse MV 1980-х годов.
История
[ редактировать ]Эдсон де Кастро и PDP-X
[ редактировать ]Эдсон де Кастро был менеджером по продукции новаторской корпорации Digital Equipment Corporation (DEC) PDP-8 , 12-битного компьютера, широко известного как первый настоящий миникомпьютер. [ 2 ] Он также руководил разработкой модернизированного PDP-8/I, в котором использовались ранние интегральные схемы . вместо отдельных транзисторов [ 3 ]
Во время процесса разработки PDP-8/I де Кастро посещал производителей печатных плат , которые быстро увеличивали сложность плат, которые они могли собирать. де Кастро пришел к выводу, что 8/I можно производить с использованием полностью автоматизированной сборки на больших платах, что было невозможно всего годом ранее. Другие сотрудники DEC привыкли к платам меньшего размера, которые использовались в более ранних машинах, и были обеспокоены отслеживанием проблем, когда на одной плате было много компонентов. [ а ] Для 8/I было принято решение оставить небольшие платы, используя новую упаковку « перевернутый чип » для небольшого улучшения плотности. [ 3 ]
В период разработки PDP-8 введение ASCII и его основное обновление в 1967 году привело к появлению нового поколения конструкций с длиной слова, кратной 8 битам, а не кратным 6 битам, как в большинстве предыдущих разработок. Это привело к тому, что конструкции среднего класса работали с длиной слова 16 бит вместо нынешних 12- и 18-битных линеек DEC. де Кастро был убежден, что можно улучшить PDP-8, построив 16-разрядный процессор мини-компьютера на одной 15-дюймовой квадратной плате. [ 4 ] [ 5 ]
В 1967 году де Кастро начал новую разработку, известную как «PDP-X», которая включала несколько расширенных функций. Среди них была единая базовая конструкция, которую можно было использовать для создания 8-, 16- и 32-битных платформ. [ 6 ] Это дошло до создания нескольких подробных документов по архитектуре. Кен Олсен не поддержал этот проект, считая, что он не дает достаточных преимуществ перед 12-битным PDP-8 и 18-битным PDP-9 . В конечном итоге он был отменен весной 1968 года. [ 4 ]
Дизайн Новы
[ редактировать ]Отмена PDP-X побудила де Кастро подумать о том, чтобы покинуть DEC и построить систему самостоятельно. Он был не один; в конце 1967 года сформировалась группа инженеров-единомышленников для рассмотрения такой машины. В группу входили Пэт Грин, менеджер подразделения; Ричард Согге, еще один инженер по аппаратному обеспечению; и Генри Буркхардт III, инженер-программист. [ 7 ] В отличие от PDP-X, новые усилия были сосредоточены на одной машине, которую можно было бы быстро вывести на рынок, поскольку де Кастро считал, что концепция PDP-X слишком амбициозна для небольшой начинающей компании . [ 8 ]
Обсудив это с другими сотрудниками DEC, первоначальная концепция привела к созданию 8-битной машины, реализация которой будет менее затратной. [ 9 ] Группа начала разговор с Гербертом Ричманом, продавцом Fairchild Semiconductor , который знал остальных благодаря своим контактам с DEC. В то время Fairchild боролась с Texas Instruments и Signetics на быстрорастущем рынке TTL и представляла новые производства , позволяющие создавать более сложные конструкции. Последняя серия 9300 от Fairchild позволяла использовать до 96 вентилей на кристалл, и они использовали это для реализации ряда 4-битных чипов, таких как двоичные счетчики и регистры сдвига . [ 10 ]
Использование этих микросхем уменьшило общее количество микросхем, необходимое для реализации полного арифметико-логического устройства (АЛУ), основного математического компонента ЦП, что позволило расширить 8-битную конструкцию до 16-битной. Это действительно потребовало расширения ЦП с одной печатной платы размером 15 на 15 дюймов (38 см × 38 см) до двух, но такая конструкция все равно будет значительно дешевле в производстве, чем 8/I, но при этом будет более мощной и удобной. На основе ASCII. Третья плата содержала схемы ввода-вывода , а полная система обычно включала еще одну плату с 4 КБ оперативной памяти . Полная система из четырех карт помещается в одном шасси, монтируемом в стойку. [ 5 ]
Платы были спроектированы таким образом, чтобы их можно было соединить вместе с помощью объединительной платы с печатной платой с минимальным количеством проводов вручную, что позволило собрать все платы автоматизированным способом. Это значительно снизило затраты по сравнению с платой 8/I, которая состояла из множества меньших плат, которые нужно было соединить вместе на объединительной плате, которая сама была соединена вместе с помощью проволочной обмотки . Конструкция платы большего размера также сделала Nova более надежной, что сделало ее особенно привлекательной для промышленных или лабораторных условий. [ 5 ]
В новом дизайне использовалась простая архитектура загрузки и хранения. [ 4 ] который вновь появится в проектах RISC в 1980-х годах. Поскольку сложность триггеров быстро уменьшалась по мере их реализации в микросхемах, конструкция компенсировала отсутствие режимов адресации схемы загрузки-сохранения путем добавления четырех аккумуляторов общего назначения вместо единственного регистра, который можно было бы найти. в аналогичных недорогих предложениях, таких как серия PDP. [ 4 ]
Нова введение
[ редактировать ]В конце 1967 года Ричман представил группу нью-йоркскому юристу Фреду Адлеру, который начал искать различные источники финансирования для стартового капитала. К 1968 году Адлер заключил крупную сделку по финансированию с консорциумом венчурных фондов из Бостона, который согласился предоставить первоначальные инвестиции в размере 400 000 долларов США , а вторые 400 000 долларов США были доступны для наращивания производства. де Кастро, Буркхарт и Согге покинули DEC и основали Data General (DG) 15 апреля 1968 года. Грин не присоединился к ним, посчитав предприятие слишком рискованным, а Ричман не присоединился до тех пор, пока продукт не был запущен в эксплуатацию позже в том же году. [ 5 ]
Работа над первой системой заняла около девяти месяцев, а первые продажи начались в ноябре того же года. Им немного повезло, потому что осенняя совместная компьютерная конференция была отложена до декабря того же года, поэтому они смогли привезти работающее устройство в Центр Москоне , где они запустили версию Spacewar! . [ 11 ] DG официально выпустила Nova в 1969 году по базовой цене 3995 долларов США (что эквивалентно 33 193 долларам в 2023 году), рекламируя его как «лучший маленький компьютер в мире». [ 12 ] Базовая модель была не очень полезна из коробки, а добавление оперативной памяти емкостью 8 кВт ( 16 КБ ) в виде основной памяти обычно приводило к увеличению цены до 7995 долларов США . [ 13 ] Напротив, 8/I мощностью 4 кВт ( 6 КБ ) стоил 12 800 долларов США . [ 14 ]
Первая продажа была осуществлена университету в Техасе, где команда вручную собрала образец, который был отправлен в феврале. Однако это произошло в разгар забастовки в авиационной отрасли, и машина так и не прибыла. Они прислали второй экземпляр, который прибыл сразу же, поскольку к этому моменту забастовка уже закончилась, а в мае, наконец, был доставлен и первоначальный экземпляр. [ 15 ]
Система имела успех с самого начала: через шесть месяцев была продана сотая версия. [ 16 ] и 500-й через 15 месяцев. [ 13 ] Продажи увеличились по мере появления новых версий, и к 1975 году годовой объем продаж компании составил 100 миллионов долларов США . [ 17 ]
СуперНОВА
[ редактировать ]Кен Олсен публично предсказал, что DG потерпит неудачу, но с выпуском Nova стало ясно, что этого не произойдет. К этому времени ряд других компаний также заговорили о внедрении 16-битных проектов. Олсен решил, что это представляет угрозу как для их 18-битной, так и для 12-битной линейки, и начал разработку новой 16-битной версии. [ 18 ] Он появился в 1970 году как PDP-11 , гораздо более сложная конструкция, которая отличалась от PDP-X так же, как и Nova. Эти два дизайна активно конкурировали на рынке. [ 4 ]
Слухи о новой системе от DEC дошли до DG вскоре после начала поставок Nova. Весной 1970 года они наняли нового дизайнера Ларри Селигмана, чтобы тот обогнал любую возможную машину, находящуюся в стадии разработки. С момента разработки Nova произошли два основных изменения; Во-первых, Signetics представила 8260, 4-битную микросхему, сочетающую в себе сумматор, XNOR и AND, а это означало, что количество микросхем, необходимых для реализации базовой логики, было уменьшено примерно в три раза. Другая причина заключалась в том, что Intel агрессивно продвигала полупроводниковую память, обещая 1024 бита на одном кристалле и работающую на гораздо более высоких скоростях, чем базовая память. [ 18 ]
В новом дизайне Селигмана были использованы оба этих улучшения. Начнем с того, что новые микросхемы позволили расширить АЛУ до полной 16-битной ширины на тех же двух картах, что позволило ему выполнять математические и логические операции за один цикл и тем самым сделать новую конструкцию в четыре раза быстрее исходной. . Кроме того, была использована новая базовая память меньшего размера, которая улучшила время цикла с исходных 1200 нс до 800 нс, что дало дополнительные преимущества. 1/3 улучшение . Производительность можно было бы еще улучшить, заменив ядро постоянной памятью ; из-за отсутствия цикла чтения-записи ядра, к нему можно получить доступ за 300 нс для значительного повышения производительности. [ 16 ]
Получившаяся в результате машина, известная как SuperNOVA , была выпущена в 1970 году. Хотя первоначальные модели все еще использовали ядро, вся конструкция основывалась на предположении, что станут доступны более быстрые полупроводниковые запоминающие устройства, и платформа сможет в полной мере использовать их. Он был представлен позже в том же году, что и SuperNOVA SC с полупроводниковой (SC) памятью. Память с гораздо более высокой производительностью позволила ЦП, который был синхронен с памятью, еще больше увеличить скорость до работы с временем цикла 300 нс (3,3 МГц). Это сделало его самым быстрым из доступных мини-компьютеров за многие годы. [ 19 ] Первоначально новая память была очень дорогой и сильно нагревалась, поэтому широкого распространения не получила. [ 20 ]
1200 и 800
[ редактировать ]В качестве демонстрации мощи своей технологии вентильной матрицы Micromatrix в 1968 году Fairchild разработала прототип 4711, однокристального 4-битного АЛУ. [ 10 ] [ 21 ] Конструкция никогда не предназначалась для массового производства и была довольно дорогой в производстве. Появление Signetics 8260 в 1969 году вынудило их сделать это; И Texas Instruments, и Fairchild представили в 1970 году собственные 4-битные ALU: 74181 и 9341 соответственно. В отличие от 8260, новые конструкции предлагали все общие логические функции и дополнительно сокращали количество микросхем. [ 10 ]
Это побудило генерального директора рассмотреть возможность разработки нового процессора с использованием этих более интегрированных микросхем. Как минимум, это сократило бы количество ЦП до одной карты для базовой Nova или SuperNOVA. Появилась новая концепция, согласно которой на одном шасси можно было бы разместить любую машину, просто заменив печатную плату ЦП. Это позволит клиентам приобрести более дешевую систему, а затем обновить ее в любое время. [ 22 ]
Пока Селигман работал над SuperNOVA, компания получила письмо от Рона Грюнера, в котором говорилось: «Я читал о вашем продукте, я читал вашу рекламу и буду работать на вас. в вашем офисе через неделю, чтобы поговорить с вами об этом». [ 22 ] Его наняли на месте. Грюнеру было поручено разработать недорогую машину, а Селигман разработал соответствующую высокопроизводительную версию. [ 22 ]
Недорогая модель Gruner, выпущенная в 1970 году как Nova 1200 , 1200 относится к использованию базовой памяти оригинальной Nova 1200 нс. Он имел 4-битное АЛУ на базе одного чипа 74181 и, таким образом, по сути представлял собой переупакованную Nova. Переупакованная модель SuperNOVA с четырьмя ALU от Селигмана была выпущена в 1971 году как Nova 800 , что привело к несколько запутанному названию, поскольку модель с меньшим номером имела более высокую производительность. [ 22 ] Обе модели предлагались в различных корпусах: 1200 с семью слотами, 1210 с четырьмя и 1220 с четырнадцатью.
Более поздние модели
[ редактировать ]К этому времени PDP-11 наконец поступил в продажу. Он предлагал гораздо более богатую архитектуру набора команд , чем намеренно простая архитектура Nova. Постоянное совершенствование конструкций ИС, особенно их соотношения цены и качества , снижало ценность исходных упрощенных инструкций. Селигману было поручено разработать новую машину, которая была бы совместима с Nova и предлагала бы гораздо более богатую среду для тех, кто этого хотел. Эта концепция поставлялась как серия Data General Eclipse , которая предлагала возможность добавлять дополнительные схемы для адаптации набора команд для научных задач или рабочих нагрузок по обработке данных. Eclipse успешно конкурировал с PDP-11 на более высоком уровне рынка. [ 23 ]
Примерно в то же время начали появляться слухи о новой 32-битной машине от DEC. Генеральный директор решил, что им нужен аналогичный продукт, и Грюнеру было поручено заняться тем, что впоследствии стало проектом Fountainhead. Учитывая масштабы проекта, они согласились, что все усилия следует проводить за пределами объекта, и Грюнер выбрал место в парке Research Triangle Park в Северной Каролине . Эта конструкция стала очень сложной [ 24 ] и в конечном итоге был отменен несколько лет спустя.
Пока эти усилия продолжались, работы по линии Нова продолжались.
840
[ редактировать ]Модель 840, впервые предложенная в 1973 году, также включала новую систему страничной памяти, позволяющую использовать адреса длиной до 17 бит. Индекс смещает базовый адрес в большую память объемом 128 килобайт. На самом деле установка такого большого объема памяти потребовала значительного пространства; Модель 840 поставляется в большом корпусе с 14 слотами.
Нова 2
[ редактировать ]Следующей версией была Nova 2 , первые версии которой были выпущены в 1973 году. Nova 2, по сути, была упрощенной версией более ранних машин, поскольку увеличение плотности чипов позволяло уменьшить размер ЦП. В то время как в SuperNOVA использовались три платы размером 15×15 дюймов для реализации ЦП и его памяти, в Nova 2 все это размещалось на одной плате. ПЗУ использовалось для хранения загрузочного кода, который затем копировался в ядро при «загрузке программы». Переключатель был переключен. Были доступны версии с четырьмя («2/4»), семью и десятью («2/10») слотами.
Нова 3
[ редактировать ]В Nova 3 1975 года были добавлены еще два регистра, используемые для управления доступом к встроенному стеку. Процессор также был переработан с использованием компонентов TTL , что еще больше повысило производительность системы. Nova 3 предлагалась в четырехслотовой (Nova 3/4) и двенадцатислотовой (Nova 3/12) версиях.
Нова 4
[ редактировать ]Похоже, что Data General изначально планировала, что Nova 3 будет последней в своей линейке, планируя заменить Nova более поздними машинами Eclipse. [ нужна ссылка ] Однако продолжающийся спрос привел к появлению в 1978 году машины Nova 4 , на этот раз основанной на четырех AMD Am2901 битовых ALU . Эта машина с самого начала проектировалась как Nova 4 и Eclipse S/140, с разными микрокодами для каждой. Также был доступен сопроцессор с плавающей запятой, занимавший отдельный слот. Дополнительная опция позволяла отображать память, позволяя программам получать доступ к памяти объемом до 128 килослов с помощью переключения банков . В отличие от более ранних машин, Nova 4 не имела консоли на передней панели , а вместо этого включала ПЗУ, содержащее машинный код, который позволяет терминалу эмулировать консоль при необходимости. [ 25 ] : 87
Существовало три разные версии Nova 4: Nova 4/C, Nova 4/S и Nova 4/X. Nova 4/C представляла собой одноплатную реализацию, включавшую всю память (16 или 32 кслова). В Nova 4/S и 4/X использовались отдельные платы памяти. Nova 4/X имел встроенный блок управления памятью (MMU), позволяющий использовать до 128 килослов памяти. MMU также был установлен в Nova 4/S, но был отключен прошивкой. И 4/S, и 4/X включали функцию предварительной выборки для повышения производительности за счет выборки до 11 инструкций из памяти до того, как они потребуются. [ 25 ] : 5
микроНОВА
[ редактировать ]Data General также выпустила серию microNOVA однокристальных реализаций процессора Nova . Чтобы его можно было разместить в 40-контактном чипе с двойным входом (DIP), адресная шина и шина данных использовали общий набор из 16 контактов. Это означало, что чтение и запись в память требовали двух циклов, и в результате машина работала примерно вдвое медленнее, чем оригинальная Nova. [ 26 ]
Первым чипом в серии был mN601 1977 года. Он продавался как ЦП для других пользователей, полный набор микросхем для тех, кто хочет реализовать компьютер, полноценный компьютер на одной плате с 4 КБ ОЗУ, а также как полноценная бюджетная модель Nova. [ 26 ] Модернизированная версия конструкции mN602 1979 года сократила весь набор микросхем до одной СБИС . Это предлагалось в двух машинах: microNOVA MP/100 и более крупной microNOVA MP/200 .
Позже microNOVA была переупакована с монитором в корпусе типа ПК и двумя дискетами как Enterprise . Enterprise была выпущена в 1981 году и работала под управлением RDOS , но появление IBM PC в том же году заставило большинство других машин исчезнуть из поля зрения. [ 27 ]
Наследие Новы
[ редактировать ]Nova повлияла на дизайн Xerox Alto (1973 г.) [ 28 ] и Apple I (1976) [ 29 ] компьютеры, и его архитектура легла в основу серии Computervision CGP (графический процессор Computervision). Сообщается, что его внешний дизайн послужил прямым источником вдохновения для передней панели микрокомпьютера MITS Altair (1975).
Data General продолжила успех оригинальной Nova, выпустив серию более быстрых моделей. Позднее было представлено семейство систем Eclipse с расширенным набором команд, совместимым с предыдущими версиями, а серия MV еще больше расширила Eclipse до 32-битной архитектуры, чтобы конкурировать с DEC VAX . Развитие серии MV было задокументировано в популярной книге Трейси Киддер 1981 года «Душа новой машины» . Сама Data General позже превратилась в поставщика серверов и массивов хранения данных на базе процессоров Intel, которые в конечном итоге были куплены EMC .
Во всем мире существует разнообразная, но пылкая группа людей, которые восстанавливают и сохраняют оригинальные 16-битные системы Data General. [ 30 ] [ 31 ]
Техническое описание
[ редактировать ]Дизайн процессора
[ редактировать ]
|
Nova, в отличие от PDP-8 , имела архитектуру «загрузка-сохранение» . Он имел четыре 16-битных аккумуляторных регистра, два из которых (2 и 3) могли использоваться как индексные регистры . Имелся 15-битный счетчик программ и однобитный регистр переноса . Как и в PDP-8, адресация текущей + нулевой страницы была центральной. не было Регистра стека , но в более поздних разработках Eclipse для этой функции использовался выделенный адрес аппаратной памяти.
Самые ранние модели Nova обрабатывали математические данные последовательно в 4-битных пакетах, используя один из 74181 битов ALU . Через год после своего появления эта конструкция была улучшена и теперь включает полный 16-битный параллельный математический блок с использованием четырех процессоров 74181, причем эта конструкция получила название SuperNova. В будущих версиях системы были добавлены стековая единица и аппаратное умножение/деление.
Nova 4 / Eclipse S/140 был основан на четырех AMD 2901 бит-срезных ALU с микрокодом в постоянной памяти и был первым Nova, разработанным DRAM только для основной памяти , без возможности использования памяти на магнитных сердечниках .
Память и ввод-вывод
[ редактировать ]Первые модели были доступны с на 8 тыс. слов памятью на магнитном сердечнике в качестве опции, которую приходилось покупать практически каждому, в результате чего стоимость системы достигала 7995 долларов.
Эта основная плата памяти была организована планарно как четыре группы по четыре банка, каждый банк содержал два набора ядер в матрице 64 на 64; таким образом, в каждом наборе было 64 x 64 = 4096 бит, x 2 набора давали 8 192 бита, x 4 банка давали 32 768 бит, x 4 группы давали в общей сложности 131 072 бита, и это, разделенное на размер машинного слова в 16 бит, давало 8 192 слова. памяти.
Ядро этой платы памяти на 8 КБ занимало расположенную в центре «плату на плате» шириной 5,25 дюйма и высотой 6,125 дюйма и было закрыто защитной пластиной. Он был окружен необходимой схемой чтения-записи-перезаписи драйверов. Все ядро и соответствующая вспомогательная электроника помещаются на одну стандартную плату размером 15 x 15 дюймов (380 мм). до 32 КБ такой основной оперативной памяти В одном внешнем блоке расширения может поддерживаться . Полупроводниковое ПЗУ уже было доступно в то время, и системы без ОЗУ (т.е. только с ПЗУ) стали популярными во многих промышленных условиях. Оригинальные машины Nova работали на частоте примерно 200 кГц , но SuperNova была разработана для работы на частоте до 3 МГц при использовании со специальной полупроводниковой основной памятью.
Стандартизированная объединительная плата и сигналы ввода-вывода создали простую и эффективную конструкцию ввода-вывода, которая упростила взаимодействие программируемых устройств ввода-вывода и каналов данных с Nova по сравнению с конкурирующими машинами. В дополнение к специальной структуре шины ввода-вывода объединительная плата Nova имела контакты для намотки проводов , которые можно было использовать для нестандартных разъемов или других специальных целей.
Модель программирования
[ редактировать ]Формат инструкций можно в общих чертах разделить на одну из трех функций: 1) манипуляция между регистрами, 2) обращение к памяти и 3) ввод/вывод. Каждая инструкция заключалась в одном слове. Манипулирование между регистрами было почти RISC -подобным по своей битовой эффективности; а инструкция, которая манипулирует данными регистров, также может выполнять тесты, сдвиги и даже отбрасывать результат. Варианты аппаратного обеспечения включали блок целочисленного умножения и деления, блок с плавающей запятой (одинарной и двойной точности) и управление памятью .
Самая ранняя Nova поставлялась с интерпретатором BASIC на перфоленте . По мере роста продукта компания Data General разработала множество языков для компьютеров Nova, работающих под управлением различных операционных систем. FORTRAN IV , ALGOL , Extended BASIC, Data General Business Basic , Interactive COBOL и несколько ассемблеров были доступны в Data General. Сторонние поставщики и сообщество пользователей расширили свои предложения за счет Forth , Lisp , BCPL , C , ALGOL и других проприетарных версий COBOL и BASIC .
Набор инструкций
[ редактировать ]Реализованные ниже машинные инструкции представляют собой общий набор, реализованный во всех процессорах серии Nova. В определенных моделях часто реализовывались дополнительные инструкции, а некоторые инструкции предоставлялись дополнительным оборудованием.
Арифметические инструкции
[ редактировать ]Все арифметические инструкции выполняются между аккумуляторами. Для операций, требующих двух операндов, один брался из аккумулятора-источника, а другой - из аккумулятора-приемника, а результат помещался в аккумулятор-приемник. Для операций с одним операндом операнд брался из исходного регистра, а результат заменял регистр назначения. Для всех кодов операций с одним операндом допустимо, чтобы аккумуляторы источника и назначения были одинаковыми, и операция работала должным образом.
Все арифметические инструкции включали бит «без загрузки», который, будучи установлен, подавлял передачу результата в регистр назначения; это использовалось вместе с опциями тестирования для выполнения теста без потери существующего содержимого регистра назначения. На языке ассемблера добавление символа «#» к коду операции устанавливает бит отсутствия загрузки.
ЦП содержал однобитный регистр, называемый битом переноса, который после арифметической операции содержал перенос самого старшего бита. Бит переноса может быть установлен в желаемое значение перед выполнением операции с использованием двухбитового поля в инструкции. Бит может быть установлен, очищен или дополнен перед выполнением инструкции. На языке ассемблера эти параметры задавались добавлением буквы к коду операции: «O» — установить бит переноса; «Z» — очистить бит переноса, «C» — дополнить бит переноса, ничего — оставить бит переноса в покое. Если также был указан бит отсутствия загрузки, для вычислений будет использоваться указанное значение переноса, но фактический регистр переноса останется неизменным.
Все арифметические инструкции включали двухбитовое поле, которое можно было использовать для указания параметра сдвига, который будет применяться к результату перед его загрузкой в регистр назначения. Можно указать однобитовый сдвиг влево или вправо или поменять местами два байта результата. Сдвиги были 17-битными циклическими, с битом переноса «слева» от старшего бита. Другими словами, когда выполнялся сдвиг влево, наиболее значимый бит результата сдвигался в бит переноса, а предыдущее содержимое бита переноса сдвигалось в наименее значащий бит результата. Замена байтов не повлияла на бит переноса. На языке ассемблера эти параметры задавались добавлением буквы к коду операции: «L» — сдвиг влево; 'R' — сдвиг вправо, 'S' – поменять местами байты; ничего — не выполняйте сдвиг или замену.
Все арифметические инструкции включали трехбитное поле, в котором можно было указать тест, который должен был применяться к результату операции. Если результат теста оказался верным, следующая инструкция в строке была пропущена. На языке ассемблера опция проверки была указана как третий операнд инструкции. Доступными тестами были:
- SZR — пропуск при нулевом результате
- SNR — пропустить ненулевой результат
- SZC — пропуск при нулевом переносе
- SNC — пропуск ненулевого переноса
- SBN — пропустить, если и перенос, и результат ненулевые.
- SEZ — пропустить, если либо перенос, либо результат, либо и то, и другое равно нулю.
- СКП — всегда пропускать
- Ничего — никогда не пропускайте
Фактические арифметические инструкции были:
- MOV — переместить содержимое исходного аккумулятора в целевой аккумулятор.
- COM — переместить побитовое дополнение исходного аккумулятора в целевой аккумулятор.
- ADD — добавить аккумулятор источника в аккумулятор назначения.
- АЦП — возьмите побитовое дополнение исходного аккумулятора и добавьте его в целевой аккумулятор.
- NEG — переместить отрицательный заряд исходного аккумулятора в целевой аккумулятор.
- SUB — вычесть аккумулятор источника содержимого из аккумулятора назначения.
- INC — добавить 1 к содержимому исходного аккумулятора и перейти к целевому аккумулятору.
- И — выполнить побитовое И между двумя аккумуляторами и поместить результат в целевой аккумулятор.
Пример арифметических инструкций со всеми используемыми опциями:
ADDZR# 0,2,SNC
Это декодируется как: очистить бит переноса; добавьте содержимое AC2 (аккумулятор 2) в AC0; круговой сдвиг результата на один бит вправо; проверьте результат, чтобы увидеть, установлен ли бит переноса, и, если да, пропустите следующую инструкцию. Отмените результат после выполнения теста. По сути, это добавляет два числа и проверяет, является ли результат четным или нечетным.
Справочные инструкции по памяти
[ редактировать ]Набор команд Nova содержал пару инструкций, которые передавали содержимое памяти в аккумуляторы и наоборот, две инструкции передачи управления и две инструкции, которые проверяли содержимое ячейки памяти. Все инструкции обращения к памяти содержали восьмибитное поле адреса и двухбитное поле, определяющее режим адресации памяти. Четыре режима были:
- Режим 0 — абсолютная адресация. Содержимое поля адреса инструкции заполняется нулями слева и используется в качестве целевого адреса.
- Режим 1 — относительная адресация. Содержимое поля адреса инструкции расширяется влево и добавляется к текущему значению счетчика программы (который к моменту выполнения инструкции указывает на следующую инструкцию). Результат используется в качестве целевого адреса.
- Режим 2 — индексированная адресация. Содержимое поля адреса инструкции расширяется влево и добавляется к текущему значению аккумулятора 2. Результат используется в качестве целевого адреса.
- Режим 3 — индексированная адресация. Содержимое поля адреса инструкции расширяется влево и добавляется к текущему значению аккумулятора 3. Результат используется в качестве целевого адреса.
Очевидно, что режим 0 был способен обращаться только к первым 256 словам памяти, учитывая восьмибитное адресное поле. Эта часть памяти называлась «нулевой страницей». Слова памяти нулевой страницы считались ценными для программистов на языке ассемблера Nova из-за их небольшого количества; только к нулевым позициям страницы можно было обращаться из любого места программы, не прибегая к индексированной адресации, которая требовала связывания аккумулятора 2 или 3 для использования в качестве индексного регистра. На языке ассемблера директива «.ZREL» заставляла ассемблер помещать инструкции и слова данных, следующие за ней, на нулевую страницу; Директива «.NREL» помещала следующие инструкции и слова данных в «обычную» память. В более поздних моделях Nova были добавлены инструкции с расширенными полями адресации, что позволило преодолеть эту проблему (за счет снижения производительности).
Относительные смещения для режима 1 ассемблер вычислял автоматически, хотя можно было и явно записать это в исходнике. Если инструкция обращения к памяти ссылалась на адрес памяти в пространстве .NREL, но не имел спецификатора режима, предполагался режим 1, а ассемблер вычислял смещение между текущей инструкцией и адресом, на который ссылается, и помещал его в поле адреса инструкции (при условии, что результирующий значение помещается в 8-битное поле).
Две инструкции по загрузке и хранению были следующими:
- LDA — загрузить содержимое ячейки памяти в указанный аккумулятор.
- STA — сохранить содержимое указанного аккумулятора в ячейку памяти.
Обе эти инструкции включали «косвенный» бит. Если этот бит был установлен (сделано на языке ассемблера путем добавления символа «@» к коду операции), предполагалось, что содержимое целевого адреса само по себе является адресом памяти, и на этот адрес можно будет ссылаться для загрузки или сохранения.
Двумя инструкциями по передаче управления были:
- JMP — передает управление в указанную ячейку памяти
- JSR («подпрограмма перехода») — выполняет то же самое, что и инструкция JMP, но дополнительно загружает адрес возврата (инструкцию, следующую за инструкцией JSR в строке) в аккумулятор 3 перед переходом.
Как и в случае с инструкциями загрузки и сохранения, инструкции перехода содержали косвенный бит, который также был указан в ассемблере с использованием символа «@». В случае непрямого перехода процессор извлекал содержимое целевой ячейки и использовал это значение в качестве адреса памяти для перехода. Однако, в отличие от инструкций загрузки и сохранения, если бы в косвенном адресе был установлен старший бит, он выполнил бы следующий цикл косвенности. В процессорах серии Nova до Nova 3 не было ограничения на количество циклов косвенности; косвенный адрес, ссылающийся на самого себя, приведет к бесконечному циклу косвенной адресации, в котором инструкция никогда не завершится. (Это может вызвать тревогу у пользователей, поскольку в таком состоянии нажатие переключателя СТОП на передней панели ничего не дало. Чтобы разорвать петлю, необходимо было перезагрузить машину.)
Две инструкции по тестированию памяти были следующими:
- ISZ — увеличивает ячейку памяти и пропускает следующую инструкцию, если результат равен нулю.
- DSZ — уменьшить ячейку памяти и пропустить следующую инструкцию, если результат равен нулю.
Как и в случае с инструкциями загрузки и сохранения, существовал бит косвенной адресации, который выполнял один уровень косвенной адресации. Эти инструкции были странными тем, что на Novas с памятью на магнитных сердечниках инструкция выполнялась внутри самой платы памяти. Как это было принято в то время, платы памяти содержали схему «обратной записи» для решения проблемы деструктивного чтения, свойственной памяти с магнитным сердечником. Но механизм обратной записи также содержал мини-арифметический блок, который процессор использовал для нескольких целей. Для инструкций ISZ и DSZ приращение или уменьшение происходило между считываемой ячейкой памяти и обратной записью; ЦП просто ждал, пока ему сообщат, был ли результат нулевым или ненулевым. Эти инструкции были полезны, поскольку позволяли использовать ячейку памяти в качестве счетчика циклов без использования аккумулятора, но они были медленнее, чем выполнение эквивалентных арифметических инструкций.
Некоторые примеры инструкций обращения к памяти:
LDA 1,COUNT
Переносит содержимое ячейки памяти с меткой COUNT в аккумулятор 1. Предполагая, что COUNT находится в пространстве .NREL, эта инструкция эквивалентна: LDA 1,1,(COUNT-(.+1)) где '.' представляет расположение инструкции LDA.
JSR@ 0,17
Косвенный переход к адресу памяти, указанному содержимым ячейки 17, в пространстве нулевой страницы, и помещение адреса возврата в аккумулятор 3. Это был стандартный метод выполнения системного вызова RDOS на ранних моделях Nova; мнемоника языка ассемблера ".SYSTM" переведена на это.
JMP 0,3
Перейти к ячейке памяти, адрес которой содержится в аккумуляторе 3. Это был обычный способ возврата из функции или вызова подпрограммы, поскольку инструкция JSR оставляла адрес возврата в аккумуляторе 3.
STA 0,3,-1
Сохраните содержимое аккумулятора 0 в месте, которое на единицу меньше адреса, содержащегося в аккумуляторе 3.
DSZ COUNT
Уменьшите значение в ячейке с надписью COUNT и пропустите следующую инструкцию, если результат равен нулю. Как и в приведенном выше случае, если предполагается, что COUNT находится в пространстве .NREL, это эквивалентно: DSZ 1,(COUNT-(.+1))
Инструкции ввода/вывода
[ редактировать ]В Novas реализована канальная модель взаимодействия с устройствами ввода-вывода. В модели ожидалось, что каждое устройство ввода-вывода будет реализовывать два флага, называемые «Занято» и «Готово», а также три регистра данных и управления, называемые A, B и C. Доступны инструкции ввода-вывода. для чтения и записи регистров, а также для отправки устройству одного из трех сигналов, называемых «старт», «очистка» и «импульс». Обычно отправка сигнала запуска инициирует операцию ввода-вывода, которая была настроена путем загрузки значений в регистры A/B/C. Сигнал очистки остановил операцию ввода-вывода и очистил возникшее в результате прерывание. Импульсный сигнал использовался для инициирования вспомогательных операций в сложных подсистемах, таких как операции поиска на дисках. Опрашиваемые устройства обычно передавали данные непосредственно между устройством и регистром A. Устройства DMA обычно использовали регистр A для указания адреса памяти, регистр B для указания количества передаваемых слов и регистр C для флагов управления. Канал 63 относился к самому ЦП и использовался для различных специальных функций.
Каждая инструкция ввода-вывода содержала шестибитное поле номера канала, четырехбитное поле для указания регистра для чтения или записи и двухбитное поле для указания того, какой сигнал следует отправить. На языке ассемблера сигнал задавался добавлением буквы к коду операции: «S» для начала, «C» для очистки, «P» для импульса и «ничего» для отсутствия сигнала. Коды операций были:
- DIA — переместить содержимое регистра A устройства в указанный аккумулятор.
- DOA — отправить содержимое указанного аккумулятора в регистр A устройства по указанному каналу.
- DIB — переместить содержимое регистра B устройства в указанный аккумулятор.
- DOB — отправить содержимое указанного аккумулятора в регистр B устройства по указанному каналу
- DIC — переместить содержимое регистра C устройства в указанный аккумулятор.
- DOC — отправить содержимое указанного аккумулятора в регистр C устройства по указанному каналу.
- NIO — «нет ввода-вывода», неверное название. Инструкция использовалась для отправки сигнала устройству без выполнения передачи регистров.
Кроме того, были доступны четыре инструкции для проверки состояния устройства:
- SKPBN — пропустить следующую инструкцию, если установлен флаг занятости устройства
- SKPBZ — пропустить следующую инструкцию, если флаг занятости устройства сброшен.
- SKPDN — пропустить следующую инструкцию, если установлен флаг готовности устройства.
- SKPDZ — пропустить следующую инструкцию, если флаг выполнения устройства сброшен
Запуск устройства привел к установке флага занятости. Когда запрошенная операция была завершена, обычно устройство очищало свой флаг занятости и устанавливало флаг выполнения; у большинства устройств механизм запроса прерывания был привязан к флагу выполнения, поэтому установка флага выполнения вызывала прерывание (если прерывания были включены и устройство не было замаскировано).
Специальные инструкции
[ редактировать ]Эти инструкции выполняли различные функции управления процессором и состояния. Все они на самом деле представляли собой сокращенные мнемоники для инструкций ввода-вывода на канале 63, самоссылающемся канале ввода-вывода ЦП.
- INTA — подтверждение прерывания. Передал номер канала прерывающего устройства в указанный аккумулятор.
- INTDS — отключены все прерывания
- INTEN — включены все прерывания
- IORST — сброс ввода/вывода. Отправил сигнал сброса на шину ввода-вывода, который остановил весь ввод-вывод, отключил прерывания и очистил все ожидающие прерывания.
- МСКО — маскировать. Использовало содержимое указанного аккумулятора для настройки маски прерывания. То, как интерпретировалась маска, зависело от реализации каждого устройства ввода-вывода. Некоторые устройства не удалось замаскировать.
- READS — передача содержимого 16 переключателей данных передней панели в указанный аккумулятор.
- HALT — остановил процессор. После остановки ЦП можно было запустить снова только путем ручного вмешательства на передней панели.
Прерывания и обработка прерываний
[ редактировать ]С аппаратной точки зрения механизм прерываний был относительно простым, но и менее гибким, чем в современных архитектурах ЦП. Объединительная плата поддерживала одну линию запроса прерывания, к которой подключались все устройства, способные прерывать. Когда устройству требовалось запросить прерывание, оно вызывало эту строку. ЦП принял прерывание, как только завершил текущую инструкцию. Как указано выше, ожидалось, что устройство поднимет свой флаг ввода-вывода «готово», когда оно запросит прерывание, и соглашение заключалось в том, что устройство очистит свой запрос на прерывание, когда ЦП выполнит инструкцию очистки ввода-вывода на канале устройства. число.
ЦП ожидал, что операционная система поместит адрес своей процедуры обслуживания прерываний в адрес памяти 1. Когда устройство прерывалось, ЦП выполнял косвенный переход через адрес 1, помещая адрес возврата в адрес памяти 0 и отключая дальнейшие прерывания. Обработчик прерывания затем выполнит инструкцию INTA, чтобы определить номер канала прерывающего устройства. Это работало за счет подачи сигнала «подтверждения» на объединительной плате. Сигнал подтверждения подключался последовательно через объединительную плату, так что он проходил через каждую плату на шине. Ожидалось, что любое устройство, запрашивающее прерывание, будет блокировать дальнейшее распространение сигнала подтверждения по шине, так что, если два или более устройств одновременно имеют ожидающие прерывания, только первое из них увидит сигнал подтверждения. Затем это устройство отреагировало, поместив номер своего канала в линии данных на шине. Это означало, что в случае одновременных запросов на прерывание приоритетное устройство определялось тем, какое из них было физически ближе всего к ЦП в каркасе для карт.
После того, как прерывание было обработано и сервисная программа отправила устройству очистку ввода-вывода, оно возобновило нормальную обработку, разрешив прерывания и затем вернувшись через непрямой переход через адрес памяти 0. Чтобы предотвратить прерывание ожидающего прерывания непосредственно перед при обратном переходе (который приводил к перезаписи адреса возврата), инструкция INTEN имела задержку в один цикл инструкции. При его выполнении прерывания не будут разрешены до тех пор, пока не будет выполнена следующая инструкция, которая, как ожидалось, будет инструкцией JMP@0.
Затем процедура обработки прерываний операционной системы обычно выполняет индексированный переход, используя полученный номер канала, чтобы перейти к конкретной процедуре обработки прерываний для устройства. Было несколько устройств, в частности схема обнаружения сбоя питания ЦП, которые не ответили на инструкцию INTA. Если INTA возвращал нулевой результат, подпрограмме обслуживания прерываний приходилось опрашивать все устройства, не отвечающие на INTA, с помощью инструкций SKPDZ/SKPDN, чтобы определить, какое из них прервалось.
Операционная система могла бы в некоторой степени управлять порядком прерываний, устанавливая маску прерывания с помощью инструкции MSKO. Это было предназначено для того, чтобы операционная система могла определить, каким устройствам разрешено прерывание в данный момент времени. При выполнении этой инструкции 16-битная маска прерывания передавалась всем устройствам на объединительной плате. Устройство должно было решить, что на самом деле означает для него маска; по соглашению замаскированное устройство не должно было поднимать линию прерывания, но у ЦП не было средств обеспечить это. Большинство маскируемых устройств позволяли выбирать бит маски с помощью перемычки на плате. Были устройства, которые вообще игнорировали маску.
В системах, имеющих память на магнитном сердечнике (которая сохраняла свое содержимое без питания), было возможно восстановление после сбоя питания. Схема обнаружения сбоя питания в ЦП выдавала прерывание при обнаружении потери основного питания, поступающего в компьютер; с этого момента у ЦП было небольшое количество времени, пока конденсатор в источнике питания не потерял заряд и не отключилось питание ЦП. Этого времени было достаточно, чтобы остановить выполняемый ввод-вывод, выдав команду IORST, а затем сохранить содержимое четырех аккумуляторов и бит переноса в память. При возобновлении подачи питания, если ключевой переключатель на передней панели ЦП находился в положении LOCK, ЦП запускался и выполнял косвенный переход через адрес памяти 2. Ожидалось, что это будет адрес сервисной процедуры операционной системы, которая перезагрузит аккумуляторы. и перенесите бит, а затем возобновите нормальную обработку. Сервисной программе предстояло выяснить, как перезапустить операции ввода-вывода, прерванные из-за сбоя питания.
Компоновка передней панели
[ редактировать ]Как было принято в то время, большинство моделей Nova имели консоль на передней панели для управления и мониторинга функций ЦП. Все модели до Nova 3 использовали каноническую компоновку передней панели, как показано на фотографии панели Nova 840 справа. Компоновка содержала переключатель питания с ключом, два ряда лампочек отображения адреса и данных, ряд переключателей ввода данных и ряд функциональных переключателей, которые при нажатии активировали различные функции ЦП. Адресные лампы всегда отображали текущее значение счетчика программ в двоичном формате. Лампы данных отображали различные значения в зависимости от того, какая функция ЦП была активна в данный момент. Слева от крайней левой лампы данных дополнительная лампа отображала текущее значение бита переноса. На большинстве моделей использовались лампы накаливания, припаянные к панели управления; замена перегоревших ламп была проклятием существования для инженеров выездного обслуживания Data General.
Каждый из переключателей данных контролировал значение одного бита в 16-битном значении, и в соответствии с соглашением Data General они были пронумерованы от 0 до 15 слева направо. Переключатели данных обеспечивали ввод данных в ЦП для различных функций, а также могли быть прочитаны работающей программой с использованием инструкции языка ассемблера READS. Чтобы уменьшить беспорядок на панели и сэкономить деньги, функциональные переключатели были реализованы как двусторонние переключатели мгновенного действия. Когда рычаг функционального переключателя был поднят, он запускал функцию, название которой было напечатано над переключателем на панели; когда рычаг был нажат, он активировал функцию, название которой появлялось под переключателем. Рычаг переключателя при отпускании возвращался в нейтральное положение.
Судя по фотографии Nova 840, первые четыре переключателя слева выполняют функции ПРОВЕРКА и ДЕПОЗИТ для четырех аккумуляторов. Нажатие кнопки ПРОВЕРИТЬ на одном из них привело к тому, что текущее значение аккумулятора отобразилось в двоичном виде с помощью индикаторов данных. При нажатии DEPOSIT двоичное значение, представленное текущими настройками переключателей данных, переносится в аккумулятор.
Идя направо, следующим переключателем был переключатель RESET/STOP. Нажатие STOP привело к остановке процессора после завершения текущей инструкции. Нажатие RESET привело к немедленной остановке ЦП, очистке ряда внутренних регистров ЦП и отправке сигнала сброса ввода-вывода всем подключенным устройствам. Переключатель справа от него был переключателем ПУСК/ПРОДОЛЖЕНИЕ. Нажатие кнопки ПРОДОЛЖИТЬ заставило ЦП возобновить выполнение инструкции, на которую в данный момент указывает счетчик программ. При нажатии START значение, установленное в данный момент в переключателях данных 1–15, переносится в счетчик программы, а затем начинается выполнение оттуда.
Следующие два переключателя обеспечивали доступ к памяти для чтения и записи с передней панели. Нажатие кнопки EXAMINE передает значение, установленное в переключателях данных 1–15, в программный счетчик, извлекает значение из соответствующей ячейки памяти и отображает его значение на индикаторах данных. Нажатие кнопки EXAMINE NEXT увеличило счетчик программ, а затем выполнило операцию проверки этой ячейки памяти, позволяя пользователю пройти через ряд ячеек памяти. Нажатие кнопки DEPOSIT записывает значение, содержащееся в данных, и переключается на ячейку памяти, на которую указывает программный счетчик. Нажатие кнопки DEPOSIT NEXT сначала увеличивает счетчик программ, а затем помещает его в указанную ячейку памяти.
Функция INST STEP заставила ЦП выполнить одну инструкцию в текущем месте счетчика программ, а затем остановиться. Поскольку счетчик программы увеличивался в ходе выполнения инструкции, это позволяло пользователю выполнять программу пошагово. MEMORY STEP (неправильный термин) заставил процессор пройти один такт и остановиться. Это было мало полезно для пользователей и обычно использовалось только обслуживающим персоналом для диагностики.
ЗАГРУЗКА ПРОГРАММЫ — это механизм, обычно используемый для загрузки Nova. Когда этот переключатель сработал, загрузочное ПЗУ из 32 слов отображалось на первые 32 слова памяти, счетчик программ устанавливался на 0 и запускался ЦП. Загрузочное ПЗУ содержало код, который считывал 256 слов (512 байт) кода с выбранного устройства ввода-вывода в память, а затем передавал управление считанному коду. Переключатели данных 8–15 использовались для указания загрузочному ПЗУ, с какого канала ввода-вывода следует загружаться. Если переключатель 0 был выключен, загрузочное ПЗУ предполагало, что устройство является опрашиваемым устройством (например, устройство чтения бумажной ленты), и запускало цикл опрашиваемого ввода до тех пор, пока не были прочитаны 512 байт. Если переключатель 0 был включен, загрузочное ПЗУ предполагало, что устройство поддерживает DMA, и инициировало передачу данных DMA. Загрузочное ПЗУ не было достаточно умным, чтобы расположить устройство перед началом передачи. Это была проблема при перезагрузке после сбоя; если загрузочным устройством был дисковод, его головки, скорее всего, остались на случайном цилиндре. Их нужно было переместить в цилиндр 0, где RDOS записал загрузочный блок первого уровня, чтобы последовательность загрузки работала. Обычно это делалось путем циклического выполнения последовательности загрузки диска, но пользователи, которых расстраивало время ожидания (до 5 минут в зависимости от модели диска), научились вводить с передней панели код ввода-вывода для «перекалибровки» диска. и выполнить через него процессор за один шаг — операция, которая у опытного пользователя заняла всего несколько секунд.
Выключатель питания представлял собой трехпозиционный переключатель с ключом и положениями, отмеченными OFF, ON и LOCK. В положении OFF все питание ЦП было отключено. При повороте ключа в положение ON подается питание на процессор. Однако, в отличие от нынешних ЦП, ЦП не запускался автоматически при подаче питания; пользователю приходилось использовать ЗАГРУЗКУ ПРОГРАММЫ или какой-либо другой метод, чтобы запустить ЦП и инициировать последовательность загрузки. Поворот переключателя в положение LOCK отключил функциональные переключатели на передней панели; повернув переключатель в положение LOCK и вынув ключ, пользователь может сделать ЦП устойчивым к несанкционированному вмешательству. В системах с памятью на магнитных сердечниках положение LOCK также включает функцию автоматического восстановления после сбоя питания. Ключ можно вынуть в положениях OFF или LOCK.
Производительность
[ редактировать ]Nova 1200 выполнил инструкции доступа к основной памяти (LDA и STA) за 2,55 микросекунды (мкс). Использование постоянной памяти сэкономило 0,4 мкс. Инструкции аккумулятора (ADD, SUB, COM, NEG и т. д.) занимали 1,55 мкс, MUL 2,55 мкс, DIV 3,75 мкс, ISZ 3,15-4,5 мкс. [ 32 ] В более позднем Eclipse MV/6000 LDA и STA требовали 0,44 мкс, ADD и т. д. требовали 0,33 мкс, MUL 2,2 мкс, DIV 3,19 мкс, ISZ 1,32 мкс, FAD 5,17 мкс, FMMD 11,66 мкс. [ 33 ]
Примеры языка ассемблера
[ редактировать ]Программа «Привет, мир»
[ редактировать ]Это минимальный пример программирования на ассемблере Nova. Он предназначен для работы под RDOS и печатает строку « Hello, world. » на консоли.
; a "hello, world" program for Nova running RDOS
; uses PCHAR system call
.titl hello
.nrel
.ent start
start:
dochar:
lda 0,@pmsg ; load ac0 with next character,
mov# 0,0,snr ; test ac0; skip if nonzero (don't load result)
jmp done
.systm
.pchar ; print first
jmp er ; skipped if OK
movs 0,0 ; swap bytes
.systm
.pchar ; print second
jmp er ; skipped if OK
isz pmsg ; point to next character
jmp dochar ; go around again
done:
.systm ; normal exit
.rtn
er:
.systm ; error exit
.ertn
halt
pmsg:
.+1 ; pointer to first character of string
; note bytes are packed right-to-left by default
; <15><12> denotes a CR LF pair.
.txt /Hello, world.<15><12>/
0 ; flag word to end string
.end start
16-битное умножение
[ редактировать ]Базовые модели Nova поставлялись без встроенной аппаратной возможности умножения и деления, чтобы поддерживать конкурентоспособные цены. Следующая процедура умножает два 16-битных слова, чтобы получить результат в виде 16-битного слова (переполнение игнорируется). Он демонстрирует совместное использование операций ALU, сдвига и проверки (пропуска). Обратите внимание, что когда эта процедура вызывается jsr
AC3 содержит обратный адрес . Это используется инструкцией возврата jmp 0,3
. Идиоматический способ очистки аккумулятора: sub 0,0
. Другие отдельные инструкции могут быть организованы для загрузки определенного набора полезных констант (например, -2, -1 или +1).
mpy: ; multiply AC0 <- AC1 * AC2, by Toby Thain
sub 0,0 ; clear result
mbit: movzr 1,1,szc ; shift multiplier, test lsb
add 2,0 ; 1: add multiplicand
movzl 2,2,szr ; shift and test for zero
jmp mbit ; not zero, do another bit
jmp 0,3 ; return
Двоичный аккумулятор печати
[ редактировать ]Следующая процедура выводит значение AC1 в виде 16-значного двоичного числа на консоль RDOS. Он раскрывает дополнительные особенности набора команд Nova. Например, не существует инструкции для загрузки произвольного «немедленного» значения в аккумулятор (хотя инструкции обращения к памяти кодируют такое значение для формирования эффективного адреса). Аккумуляторы обычно должны загружаться из инициализированных ячеек памяти (например, n16
). Другие современные машины, такие как PDP-11 , и практически все современные архитектуры допускают немедленную загрузку, хотя многие из них, такие как ARM, ограничивают диапазон значений, которые могут быть загружены немедленно.
Потому что РДОС .systm
макрос вызова реализует jsr
, AC3 перезаписывается обратным адресом для .pchar
функция. Следовательно, необходимо временное местоположение для сохранения обратного адреса вызывающего эту функцию. Для рекурсивной или иной реентерабельной процедуры вместо этого необходимо использовать стек, аппаратное обеспечение, если оно доступно, и программное обеспечение, если нет. Инструкция возврата становится jmp @ retrn
который использует режим косвенной адресации Nova для загрузки обратного ПК.
Определения констант в конце демонстрируют две особенности ассемблера: система счисления ассемблера является восьмеричной ( по умолчанию 20
= шестнадцать), а символьные константы могут быть закодированы, например, как "0
.
pbin: ; print AC1 on console as 16 binary digits, by Toby Thain
sta 3,retrn ; save return addr
lda 2,n16 ; set up bit counter
loop: lda 0,chr0 ; load ASCII '0'
movzl 1,1,szc ; get next bit in carry
inc 0,0 ; bump to '1'
.systm
.pchar ; AC0-2 preserved
jmp err ; if error
inc 2,2,szr ; bump counter
jmp loop ; loop again if not zero
lda 0,spc ; output a space
.systm
.pchar
jmp err ; if error
jmp @retrn
spc: " ;that's a space
chr0: "0
n16: -20
retrn: 0
Приложения
[ редактировать ]Канадская радиовещательная корпорация в Монреале использовала Nova 1200 для автоматизации воспроизведения каналов вплоть до конца 1980-х годов. Затем его заменили отремонтированными агрегатами Nova 4, которые использовались до середины 1990-х годов.
См. также
[ редактировать ]- Fairchild 9440 - однокристальная реализация Nova 2 и 3.
- National Semiconductor IMP-16 - 5-чиповый PMOS- процессор, вдохновленный оригинальной Nova.
- National Semiconductor PACE и INS8900 — однокристальные реализации IMP-16 с возможностью обработки байтов .
Примечания
[ редактировать ]Ссылки
[ редактировать ]Цитаты
[ редактировать ]- ^ «Музей истории компьютеров — Data General Corporation (DG) — лучший маленький компьютер в мире» .
- ^ Привет, Тони; Привет, Энтони; Папай, Дюри (2014). Компьютерная вселенная: путешествие через революцию . Издательство Кембриджского университета. п. 165. ИСБН 9780521766456 .
- ^ Перейти обратно: а б Хендри 2002 , с. 40.
- ^ Перейти обратно: а б с д и Супник 2004 .
- ^ Перейти обратно: а б с д Хендри 2002 , с. 48.
- ^ Хендри 2002 , с. 42.
- ^ «Когда миникомпьютер становится микро: DGC microNOVA mN601 и 602» . Музей «Хажина процессора» . 21 ноября 2014 г.
- ^ Хендри 2002 , с. 43.
- ^ Хендри 2002 , с. 43-44.
- ^ Перейти обратно: а б с Джанлука Г. (2017). «История ALU 74181 в коммерческих миникомпьютерах» .
- ^ Хендри 2002 , с. 49.
- ^ «Лучший маленький компьютер в мире» (PDF) . Ноябрь 1968 г. Архивировано (PDF) из оригинала 11 декабря 2019 г.
- ^ Перейти обратно: а б «Помешали в DEC, процветают в Data General» . Музей истории компьютеров .
- ^ Джонс, Дуглас. «Корпорация цифрового оборудования PDP-8» . Факультет компьютерных наук Университета Айовы .
- ^ Хендри 2002 , с. 50.
- ^ Перейти обратно: а б «СУПЕР НОВА» (PDF) . Музей истории компьютеров . 1970. Архивировано (PDF) из оригинала 11 декабря 2019 г.
- ^ «Бизнес, который забыло время: Data General исчез. Но делает ли это его основателя неудачником?» . деньги.cnn.com . 1 апреля 2003 года . Проверено 27 июля 2016 г.
- ^ Перейти обратно: а б Хендри 2002 , с. 53.
- ^ «Общая история данных/предыстория» . Клемсонский университет .
- ^ Хендри 2002 , с. 54.
- ^ Хендри 2002 , с. 44.
- ^ Перейти обратно: а б с д Хендри 2002 , с. 55.
- ^ Хендри 2002 , с. 58.
- ^ Хендри 2002 , с. 60.
- ^ Перейти обратно: а б Нова 4/S и 4/X (PDF) . Справочная серия полевого инженера. Общие данные . Июнь 1981 года.
- ^ Перейти обратно: а б микроНОВА . Данные общие. 1977.
- ^ «Enterprise — 16-битный бизнес-компьютер всего за 2300 фунтов стерлингов» . Мир персональных компьютеров . Октябрь 1983 года.
- ^ Чарльз П. Такер; Эдвард М. МакКрайт (декабрь 1974 г.). «Альт: система персонального компьютера» (PDF) . п. 13. Архивировано (PDF) из оригинала 6 июня 2011 г.
- ^ Том Овад (2005). Создание реплики Apple I: возвращение в гараж . п. XXI. ISBN 1-931836-40-Х .
- ^ «Общее восстановление данных» . Общие данные Nova, Eclipse, MV и AV . Проверено 20 августа 2021 г.
- ^ «Миникомпьютеры общего назначения с большими и красивыми данными» . www.chookfest.net . Проверено 20 августа 2021 г.
- ^ Техническое руководство Nova 1200, Общие данные 015-000002, 1971, стр. 1-4.
- ^ Принципы работы Eclipse MV/6000, Общие данные 014-000648, 1980, приложение. Ф
Библиография
[ редактировать ]- Хендри, Гарднер (22 ноября 2002 г.). «Устная история Эдсона (Эд) Д. де Кастро» (PDF) (интервью). Архивировано (PDF) из оригинала 27 декабря 2014 г.
- Супник, Боб (10 января 2004 г.). «Что такое PDP-X?» (PDF) . Архивировано (PDF) из оригинала 10 декабря 2004 г.
Внешние ссылки
[ редактировать ]- Проект SimH Боба Супника – включает базовый эмулятор Nova в пакете, изменяемом пользователем.
- Портативный компилятор C включает в себя цель NOVA. Архивировано 23 февраля 2009 г. в Wayback Machine.
- Веб-сайт Novas Are Forever (SimuLogic) - пытается заархивировать все, что DG, а также предоставляет бесплатные и коммерческие продукты.
- Портативный кросс-ассемблер PDP-8 и DG Nova.
- Музей миникомпьютеров Карла Френда - подробно описывает набор инструкций Nova.