Данные General Nova - Data General Nova

Система Nova (бежево-желтая, в центре внизу) и система жесткого диска с картриджем (открытая, под Nova) в основном пустом креплении в стойку.
Передняя панель Data General Nova 1200
Nova 1200 (в центре справа) обрабатывала изображения, полученные с помощью EMI-Scanner, первого в мире коммерчески доступного Компьютерный томограф.

В Данные General Nova это серия 16 бит миникомпьютеры выпущен американской компанией Общие данные. Семейство Nova было очень популярно в 1970-х годах и в конечном итоге было продано десятки тысяч экземпляров.

Первая модель, известная просто как «Нова», была выпущена в 1969 году.[1] Нова была упакована в сингл монтаж в стойку case и обладал достаточной вычислительной мощностью для решения большинства простых задач. Nova стала популярной в научных лабораториях по всему миру. В следующем году последовали SuperNOVA, который работал примерно в четыре раза быстрее.

Введено в период быстрого прогресса в Интегральная схема (или «микрочип»), линейка претерпела несколько обновлений в течение следующих пяти лет, включая 800 и 1200, Nova 2, Nova 3 и, наконец, Nova 4. Одночиповая реализация была также представлена ​​как microNOVA в 1977 году, но не получил широкого распространения, поскольку рынок перешел на новые конструкции микропроцессоров. Fairchild Semiconductor также представила микропроцессорную версию Nova в 1977 году. Fairchild 9440, но он также имел ограниченное применение на рынке.

На смену линейке Nova пришел Данные General Eclipse, который во многом был похож, но добавил виртуальная память поддержка и другие функции, необходимые для современных операционные системы. 32-битное обновление Eclipse привело к Eclipse серии MV 1980-х годов.

История

Эдсон де Кастро и PDP-X

Эдсон де Кастро был менеджером по продукции новаторского Корпорация цифрового оборудования (DEC) PDP-8, 12-битный компьютер, который многие считают первым настоящим мини-компьютером.[2] Он также руководил разработкой модернизированной PDP-8 / I, которая использовалась ранее. интегральные схемы вместо отдельных транзисторов.[3]

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

В период разработки ПДП-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]

Дизайн Nova

Отмена PDP-X побудила де Кастро подумать об уходе из DEC и построении системы самостоятельно. Он был не один; В конце 1967 года группа инженеров-единомышленников собралась для рассмотрения такой машины. В группу входили Пэт Грин, менеджер подразделения, Ричард Согге, еще один инженер по аппаратному обеспечению, и инженер-программист Генри Буркхардт II. В отличие от PDP-X, новые усилия были сосредоточены на одной машине, которую можно было быстро вывести на рынок, поскольку де Кастро считал, что концепция PDP-X была слишком амбициозной для небольшого предприятия. стартап компания.[7]

Обсуждая это с другими в DEC, первоначальная концепция привела к созданию 8-битной машины, которую было бы дешевле реализовать.[8] В это время группа начала разговор с Гербертом Ричманом, продавцом компании Fairchild Semiconductor который знал других через свои контакты с DEC. Fairchild представляла свои 74181, однокристальный 4-битный арифметико-логическое устройство (ALU), основной компонент ЦП. Ричман указал, что длина слова внутри машины не обязательно должна совпадать с ее внешним представлением; можно было построить 16-битную машину, используя 74181 и выполнив одну 16-битную инструкцию за четыре прохода через 4-битный процессор.[9]

Такой подход значительно снизил сложность и стоимость основной логики и стал причиной низкой стоимости продажи Nova.[5] В новом дизайне использован простой архитектура загрузки и хранения[4] которые вновь появятся в конструкциях RISC в 1980-х годах. Поскольку сложность резкий поворот быстро сокращались, поскольку они были реализованы в микросхемах, дизайн компенсировал отсутствие режимы адресации конструкции загрузки / магазина, добавив четыре универсальных аккумуляторы вместо единого регистра, который можно было бы найти в аналогичных недорогих предложениях, таких как серия PDP.[4]

В соответствии с оригинальной концепцией упаковки 8 / I, в основе Nova лежали две модели размером 15 на 15 дюймов (38 см × 38 см). печатные платы, один для ЦП, а другой для различных систем поддержки. Платы были спроектированы так, чтобы их можно было соединять вместе с помощью печатной схемы. объединительная плата, с минимальной ручной разводкой, что позволяет собирать все платы в автоматическом режиме. Это значительно снизило затраты по сравнению с платой 8 / I, которая состояла из множества меньших плат, которые нужно было соединить вместе на объединительной плате, которая сама была соединена вместе с помощью проволока. Конструкция с более крупными платами также сделала Nova более надежным, что сделало ее особенно привлекательной для промышленных или лабораторных условий. Fairchild предоставил средняя интеграция (MSI), используемые во всей системе.

Нова введение

В конце 1967 года Ричман познакомил группу с юристом из Нью-Йорка Фредом Адлером, который начал поиск различных источников финансирования для получения начального капитала. К 1968 году Адлер заключил крупную сделку по финансированию с консорциумом венчурный капитал средства из Бостона, которые согласились предоставить первоначальные инвестиции в размере 400 000 долларов США, а вторые 400 000 долларов США были доступны для наращивания производства. де Кастро, Буркхарт и Согге покинули DEC и начали Общие данные (DG) 15 апреля 1968 года. Грин не присоединился к ним, посчитав это предприятие слишком рискованным, и Ричман не присоединился, пока продукт не был запущен и запущен в конце года.[5]

Работа над первой системой заняла около девяти месяцев, и первые продажи начались в ноябре. Им немного повезло, потому что Падение Совместная компьютерная конференция был отложен до декабря того же года, поэтому они смогли привезти рабочий блок в Москоне Центр где они запустили версию Космическая война!.[10] DG официально выпустила Nova в 1969 году по базовой цене 3 995 долларов США, рекламируя ее как «лучший маленький компьютер в мире».[11] Базовая модель была не очень полезна из коробки, и добавление 4 кВт (8 КБ) ОЗУ в виде основная память Обычно цена увеличивалась до 7 995 долларов.[12] Напротив, 8 / I мощностью 4 кВт (6 КБ) стоил 12 800 долларов.[13]

Первая продажа была сделана университету в Техасе, и команда создала образец, который был отправлен в феврале. Однако это было в разгар забастовки в авиационной отрасли, и машина так и не прибыла. Они прислали второй экземпляр, который прибыл незамедлительно, так как к этому моменту забастовка закончилась, и в мае наконец был доставлен и оригинальный.[14]

Система была успешной с самого начала, и через шесть месяцев была продана сотая.[15] и 500-й через 15 месяцев.[12] Продажи ускорились по мере появления новых версий, и к 1975 году годовой объем продаж компании составил 100 миллионов долларов.[16]

SuperNOVA

Кен Олсен публично предсказал, что DG потерпит неудачу, но с выпуском Nova стало ясно, что этого не произойдет. К тому времени о внедрении 16-битных проектов заговорили и многие другие компании. Олсен решил, что они представляют угрозу как для их 18-битной линии, так и для 12-битной, и начал новую разработку 16-битной системы.[17] Это появилось в 1970 году как PDP-11, гораздо более сложный дизайн, который так же отличался от PDP-X, как и Nova. Эти два дизайна сильно конкурировали на рынке.[4]

Слухи о новой системе от DEC достигли DG вскоре после начала поставок Nova. Весной 1970 года они наняли нового дизайнера, Ларри Селигмана, чтобы обойти любую возможную машину в процессе создания. С момента создания Nova произошли два основных изменения; во-первых, ИС продолжали совершенствоваться и предлагать более высокую плотность, а во-вторых, Intel агрессивно говорил о памяти на основе полупроводников, обещая 1000 бит на одном чипе и работая на гораздо более высоких скоростях, чем ядро.[17]

В новом дизайне Селигмана использовались оба этих улучшения. Для начала, новые ИС позволили расширить ALU до полной 16-битной ширины, что позволило ему выполнять операции за один цикл и, таким образом, сделало новый дизайн в четыре раза быстрее оригинала. Кроме того, было использовано новое ядро ​​памяти меньшего размера, что позволило сократить время цикла с 1200 нс до 800 нс в оригинале, предлагая дальнейшее улучшение. 1/3 прирост. Производительность можно улучшить, заменив ядро ​​на только для чтения памяти; из-за отсутствия цикла чтения / записи ядра, доступ к нему можно получить на скорости 300 нс для значительного повышения производительности.[15]

В результате машина, известная как SuperNOVA, был выпущен в 1970 году. Хотя в первоначальных моделях по-прежнему использовалось ядро, вся конструкция была основана на предпосылке, что станут доступны более быстрые полупроводниковые запоминающие устройства и платформа сможет их полностью использовать. Он был представлен позже в том же году, что и SuperNOVA SCс полупроводниковой (ПП) памятью. Память с гораздо более высокой производительностью позволила ЦП, который был синхронизирован с памятью, еще больше увеличить скорость для работы с временем цикла 300 нс (3,3 МГц). Это сделало его самым быстрым из доступных миникомпьютеров за многие годы.[18] Однако новая память также была очень дорогой и перегревалась, поэтому широко не использовалась.[19]

1200 и 800

Запуск Nova 840 (Передняя панель заменена на панель от 1220)
Общие данные Nova 3

Пока Селигман работал над SuperNOVA, компания получила письмо от Рона Грюнера, в котором говорилось: «Я читал о вашем продукте, я читал ваши объявления и собираюсь работать на вас. И я буду в через неделю, чтобы поговорить с вами об этом ".[20] Его наняли на месте.

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

Недорогая модель Gruner, выпущенная в 1970 году как Нова 1200, 1200 относится к использованию исходной оперативной памяти Nova 1200 нс. Он также использовал оригинальный 4-битный ALU и, таким образом, был, по сути, переработанной Nova. Переупакованная SuperNOVA Селигмана была выпущена в 1971 году как Nova 800, что приводит к несколько запутанному названию, когда модель с меньшим номером имеет более высокую производительность.[20] Обе модели предлагались в различных корпусах: 1200 с семью слотами, 1210 с четырьмя и 1220 с четырнадцатью.

Более поздние модели

К этому времени PDP-11 наконец была доставлена. Предлагал гораздо более богатый архитектура набора команд чем нарочито простой в Nova. Постоянное совершенствование конструкций ИС, и особенно их соотношение цены и качества, снижало ценность первоначальных упрощенных инструкций. Селигману было поручено разработать новую машину, которая будет совместима с Nova, предлагая гораздо более богатую среду для тех, кто этого хотел. Эта концепция поставлялась как Данные General Eclipse серия, которая предлагала возможность добавления дополнительных схем для адаптации набора инструкций для научных задач или рабочих нагрузок обработки данных. Eclipse успешно конкурировал с PDP-11 на более высоком уровне рынка.[21]

Примерно в то же время стали появляться слухи о новой 32-битной машине от DEC. DG решил, что у них должен быть аналогичный продукт, и Грюнер был назначен ответственным за то, что стало проектом Fountainhead. Учитывая масштаб проекта, они согласились, что все усилия должны выполняться за пределами площадки, и Грюнер выбрал место в Парк Исследований Треугольника в Северная Каролина. Этот дизайн стал очень сложным[22] и в конечном итоге был отменен спустя годы.

Пока шли эти работы, работы на линии Nova продолжались.

840

Модель 840, впервые представленная в 1973 году, также включала новую систему страничной памяти, позволяющую использовать адреса до 17 бит. Индекс смещает базовый адрес в большую память 128 kword. На самом деле установка такого объема памяти требовала значительного места; 840 поставляется в большом корпусе на 14 слотов.

Нова 2

Следующая версия была Нова 2, первые версии были выпущены в 1973 году. Nova 2 была, по сути, упрощенной версией более ранних машин, поскольку увеличение плотности микросхем позволило уменьшить размер ЦП. В то время как SuperNOVA использовала три платы 15 × 15 дюймов для реализации ЦП и его памяти, Nova 2 умещала все это на одной плате. ПЗУ использовалось для хранения кода загрузки, который затем копировался в ядро ​​при "загрузке программы" Переключатель был перевернут. Доступны версии с четырьмя («2/4»), семью и десятью («2/10») слотами.

Нова 3

В Нова 3 1975 г. добавлены еще два регистра, используемые для управления доступом к встроенному стеку. Процессор также был переработан с использованием TTL компоненты, что еще больше увеличивает производительность системы. Nova 3 предлагалась в версиях с четырьмя (Nova 3/4) и двенадцатью (Nova 3/12) слотами.

Нова 4

Похоже, что компания Data General изначально планировала, что Nova 3 станет последней в своей линейке, планируя заменить Nova более поздними машинами Eclipse. Однако продолжающийся спрос привел к Нова 4 машина, на этот раз на базе четырех AMD Am2901 бит-ломтик ALU. Эта машина с самого начала проектировалась как Nova 4 и Eclipse S / 140 с разными микрокод для каждого. Также был доступен сопроцессор с плавающей запятой, занимающий отдельный слот. Дополнительная опция, позволяющая отображать память, позволяя программам получать доступ к памяти до 128 kword, используя переключение банка. В отличие от более ранних машин, Nova 4 не имела передняя панель консоли и вместо этого полагался на Терминал при необходимости эмулировать консоль.

Существовали три разные версии Nova 4, Nova 4 / C, Nova 4 / S и Nova 4 / X. Nova 4 / C была одноплатной реализацией, которая включала всю память (16 или 32 kword). В Nova 4 / S и 4 / X используются отдельные платы памяти. Nova 4 / X имела на борту блок управления памятью (MMU) позволяет использовать до 128 килобайт памяти (MMU также был установлен в Nova 4 / S, но был отключен прошивкой). И 4 / S, и 4 / X включали «предварительную выборку» для повышения производительности за счет выборки до двух инструкций из памяти до того, как они понадобятся.

microNOVA

Компания Data General также выпустила серию однокристальных реализаций процессора Nova в качестве microNOVA. Изменения в архитектуре автобуса резко ограничили скорость до такой степени, что она была примерно вдвое меньше, чем у оригинальной Nova. Оригинальный microNOVA с процессором «mN601», выпущенный в 1977 году. За ним последовал microNOVA MP / 100 в 1979 году, что привело к сокращению ЦП до одного СБИС микросхема mN602. Более крупная версия также предлагалась как microNOVA MP / 200, отгрузка в том же году.

Позднее microNOVA была упакована в корпус типа ПК с двумя дискеты как Предприятие. Предприятие отгружено в 1981 г., работает RDOS, но введение IBM PC в том же году большинство других машин исчезло из поля зрения.

Наследие Новы

Nova повлияла на дизайн как Xerox Alto (1973)[23] и Яблоко I (1976)[24] компьютеров, и его архитектура была основой для Компьютерное зрение Серия CGP (графический процессор Computervision). Сообщается, что его внешний дизайн послужил прямым вдохновением для передней панели MITS Altair (1975) микрокомпьютер.

После успеха оригинальной Nova компания Data General разработала серию более быстрых проектов. Позже было представлено семейство систем Eclipse с расширенным набором инструкций, совместимым снизу вверх, а серия MV расширила Eclipse до 32-битной архитектуры, чтобы конкурировать с DEC. VAX. Разработка серии MV была задокументирована в Трейси Киддер популярная книга 1981 года, Душа новой машины. Сама Data General позже превратилась в поставщика серверов на базе процессоров Intel и массивов хранения, которые в конечном итоге приобрела EMC.

По состоянию на 2004 год есть еще 16-битные Novas и Затмения работает в различных приложениях по всему миру, включая управление воздушным движением[нужна цитата ]. Во всем мире существует разнообразная, но страстная группа людей, которые восстанавливают и сохраняют унаследованные 16-битные системы Data General.[нужна цитата ]

Техническое описание

Дизайн процессора

Регистры данных General Nova
15141312111009080706050403020100(битовая позиция)
Регистры аккумулятора
0Регистр 0
1Регистр 1
Индексные регистры
2Индексный регистр 2
3Индексный регистр 3
Счетчик команд
 ПК    ппрограмма Cвстречный
Регистр статуса
 CCфлаг arry

Нова, в отличие от PDP-8, был архитектура загрузки и хранения. Было четыре 16-битных аккумулятор регистры, из которых два (2 и 3) могут использоваться как индексные регистры. Был 15-битный счетчик команд и однобитный нести регистр. Как и в случае с PDP-8, ток + нулевая страница адресация была центральной. Не было регистр стека, но в более поздних проектах Eclipse для этой функции будет использоваться выделенный адрес аппаратной памяти.

Самые ранние модели Nova обрабатывали математику последовательно в 4-битных пакетах, используя один 74181 битслайс ALU. Через год после его появления эта конструкция была улучшена и теперь включает в себя полноценный 16-разрядный параллельный математический модуль с использованием четырех 74181, этот дизайн получил название SuperNova. В будущих версиях системы добавлены стековый блок и аппаратное умножение / деление.

Nova 4 / Eclipse S / 140 был основан на четырех 2901 драм бит-срезы ALU, с микрокод в только для чтения памяти, и была первой Nova, разработанной для DRAM только основная память, без память на магнитном сердечнике.

Память и ввод / вывод

Первые модели были доступны с 8K слова из память на магнитном сердечнике как вариант, который должен был купить практически каждый, в результате чего стоимость системы выросла до 7 995 долларов.

Эта плата памяти ядра была организована планарно в виде четырех групп по четыре банка, каждый банк нес два набора ядер в матрице 64 на 64; таким образом, было 64 x 64 = 4096 бит на набор, x 2 набора давали 8192 бит, x 4 банка давали 32 768 бит, x 4 группы давали в сумме 131 072 бит, и это, разделенное на размер машинного слова в 16 бит, дало 8 192 слова памяти.

Ядро на этой плате с памятью 8K слов занимало расположенную в центре «плату на плате», шириной 5,25 дюйма и высотой 6,125 дюйма, и было закрыто защитной пластиной. Он был окружен необходимой схемой чтения-записи-перезаписи драйвера поддержки. Все ядро ​​и соответствующая вспомогательная электроника помещаются на единую стандартную плату размером 15 x 15 дюймов (380 мм). До 32К такого ядра баран может поддерживаться в одной внешней коробке расширения. Полупроводник ПЗУ уже были доступны в то время, и системы без ОЗУ (то есть только с ПЗУ) стали популярными во многих промышленных условиях. Оригинальные машины Nova работали примерно 200 кГц, но его SuperNova была разработана для работы на частоте до 3 МГц при использовании со специальной полупроводниковой основной памятью.

Стандартизированные объединительная плата и Ввод / вывод Сигналы создали простую и эффективную конструкцию ввода / вывода, которая упростила взаимодействие программируемых устройств ввода / вывода и каналов данных с Nova по сравнению с конкурирующими машинами. В дополнение к специальной структуре шины ввода-вывода, объединительная плата Nova имела проволока контакты, которые можно использовать для нестандартных разъемов или других специальных целей.

Модель программирования

В формат инструкции можно в общих чертах разделить на одну из трех функций: 1) преобразование регистров, 2) обращение к памяти и 3) ввод / вывод. Каждая инструкция содержалась в одном слове. Манипуляции с регистрами были почти RISC -подобен своей битовой эффективностью; и инструкция, которая манипулирует данными регистров, также может выполнять тесты, сдвиги и даже отбрасывать результат. Варианты аппаратного обеспечения включают блок целочисленного умножения и деления, блок с плавающей запятой (одинарная и двойная точность) и управление памятью.

Программное обеспечение Data General на перфолента

Самый ранний Nova поставлялся с БАЗОВЫЙ переводчик на перфолента. По мере роста продукта Data General разработала множество языков для компьютеров Nova, работающих под управлением ряда согласованных операционных систем. FORTRAN IV, АЛГОЛ, Расширенный БЕЙСИК, Данные General Business Basic, Интерактивный КОБОЛ, и несколько ассемблеров были доступны от Data General. Сторонние поставщики и сообщество пользователей расширили предложения за счет Четвертый, Лисп, BCPL, C, АЛГОЛ и другие проприетарные версии КОБОЛ и БАЗОВЫЙ.

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

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

Арифметические инструкции

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

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

ЦП содержал однобитовый регистр, называемый битом переноса, который после арифметической операции содержал перенос самого старшего бита. Бит переноса может быть установлен на желаемое значение до выполнения операции с использованием двухбитового поля в инструкции. Бит может быть установлен, очищен или дополнен перед выполнением инструкции. В ассемблере эти параметры были указаны путем добавления буквы к коду операции: «O» - установить бит переноса; «Z» - очистить бит переноса, «C» - дополнить бит переноса, ничего - оставить бит переноса в покое. Если также был указан бит холостого хода, указанное значение переноса будет использоваться для вычисления, но фактический регистр переноса останется неизменным.

Все арифметические инструкции включали двухбитовое поле, которое можно было использовать для указания опции сдвига, которая будет применяться к результату до его загрузки в регистр назначения. Можно указать однобитный сдвиг влево или вправо или можно поменять местами два байта результата. Сдвиги были 17-битными круговыми, с битом переноса «слева» от самого старшего бита. Другими словами, когда был выполнен сдвиг влево, наиболее значимый бит результата был сдвинут в бит переноса, а предыдущее содержимое бита переноса было сдвинуто в младший значащий бит результата. Обмен байтами не влияет на бит переноса. В ассемблере эти параметры были указаны путем добавления буквы к коду операции: «L» - сдвиг влево; «R» - сдвиг вправо, «S» - перестановка байтов; ничего - не выполнять смену или замену.

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

  • SZR - пропустить нулевой результат
  • SNR - пропуск ненулевого результата
  • SZC - пропуск нулевого переноса
  • SNC - пропуск ненулевого переноса
  • SBN - пропускать, если и перенос, и результат ненулевые
  • SEZ - пропускать, если либо перенос, либо результат, либо и то, и другое равно нулю
  • SKP - всегда пропускать
  • ничего - никогда не пропускай

Фактические арифметические инструкции были:

  • MOV - переместить содержимое исходного аккумулятора в целевой аккумулятор
  • COM - переместить побитовое дополнение исходного аккумулятора в целевой аккумулятор
  • ADD - добавить исходный аккумулятор в целевой аккумулятор
  • ADC - взять побитовое дополнение исходного аккумулятора и добавить его в целевой аккумулятор
  • NEG - переместить отрицательное значение исходного аккумулятора в целевой аккумулятор.
  • SUB - вычесть исходный аккумулятор содержимого из целевого аккумулятора
  • INC - добавить 1 к содержимому исходного аккумулятора и перейти к целевому аккумулятору
  • И - выполнить побитовое И двух аккумуляторов и поместить результат в целевой аккумулятор.

Пример арифметических инструкций со всеми использованными опциями:

АДДЗР № 0,2, СНС

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

Две инструкции по тестированию памяти:

  • 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.

СТА 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 устройства по указанному каналу
  • НИО - "нет ввода / вывода", неправильное употребление. Эта инструкция использовалась для отправки сигнала устройству без передачи регистров.

Кроме того, для проверки состояния устройства были доступны четыре инструкции:

  • SKPBN - пропустить следующую инструкцию, если установлен флаг занятости устройства
  • СКПБЗ - пропустить следующую инструкцию, если флаг занятости устройства снят
  • SKPDN - пропустить следующую инструкцию, если установлен флаг готовности устройства
  • SKPDZ - пропустить следующую инструкцию, если флаг готовности устройства снят

Запуск устройства привел к установке флага занятости. Когда запрошенная операция была завершена, обычно устройство сбрасывает свой флаг занятости и устанавливает флаг выполнения; у большинства устройств механизм запроса прерывания был привязан к флагу done, поэтому установка флага done вызывала прерывание (если прерывания были разрешены, а устройство не было замаскировано).

Специальные инструкции

Эти инструкции выполняли различные функции управления ЦП и состояния. Все они на самом деле были сокращенной мнемоникой для инструкций ввода-вывода на канале 63, самореферентном канале ввода-вывода ЦП.

  • INTA - подтверждение прерывания. Передал номер канала устройства прерывания в указанный аккумулятор.
  • INTDS - отключены все прерывания
  • INTEN - разрешены все прерывания
  • IORST - сброс ввода / вывода. Отправил сигнал сброса на шину ввода-вывода, который остановил все операции ввода-вывода, отключил прерывания и очистил все ожидающие прерывания.
  • МСКО - маскироваться. Использует содержимое указанного аккумулятора для установки маски прерывания. Интерпретация маски зависела от реализации каждого устройства ввода-вывода. Некоторые устройства не могли быть замаскированы.
  • READS - передал содержимое 16 переключателей данных лицевой панели в указанный аккумулятор.
  • HALT - остановил CPU. После остановки ЦП можно было заставить снова запустить только ручное вмешательство на передней панели.

Прерывания и обработка прерываний

С аппаратной точки зрения механизм прерывания был относительно простым, но также менее гибким, чем текущие архитектуры ЦП. Объединительная плата поддерживала одну линию запроса прерывания, к которой подключены все устройства, способные прерываться. Когда устройству требовалось запросить прерывание, оно поднимало эту строку. ЦП принял прерывание, как только выполнил текущую инструкцию. Как указано выше, ожидалось, что устройство поднимет свой флаг ввода-вывода "готово", когда оно запросит прерывание, и соглашение заключалось в том, что устройство сбрасывает свой запрос прерывания, когда ЦП выполняет инструкцию очистки ввода-вывода на канале устройства. номер.

ЦП ожидал, что операционная система поместит адрес своей подпрограммы обслуживания прерывания в адрес памяти 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, первые четыре переключателя слева выполняли функции EXAMINE и DEPOSIT для четырех аккумуляторов. Нажатие EXAMINE на одном из них привело к отображению текущего значения аккумулятора в двоичном формате с помощью ламп данных. Нажатие DEPOSIT передает двоичное значение, представленное текущими настройками переключателей данных, в аккумулятор.

Следующим переключателем был переключатель СБРОС / СТОП. Нажатие STOP заставляло CPU останавливаться после завершения текущей инструкции. Нажатие RESET вызывает немедленную остановку ЦП, очищает ряд внутренних регистров ЦП и отправляет сигнал сброса ввода / вывода всем подключенным устройствам. Переключатель справа от него был переключателем START / CONTINUE. Нажатие CONTINUE заставило ЦП возобновить выполнение инструкции, на которую в данный момент указывает счетчик программ. Нажатие кнопки СТАРТ передает текущее значение, установленное в переключателях данных 1-15, на счетчик программ, а затем начинает выполнение оттуда.

Следующие два переключателя обеспечивали доступ для чтения и записи к памяти с передней панели. Нажатие EXAMINE передает значение, установленное в переключателях данных 1-15, на счетчик программ, выбирает значение в соответствующей ячейке памяти и отображает его значение в индикаторах данных. Нажатие EXAMINE NEXT увеличивает счетчик программы, а затем выполняет операцию проверки в этой ячейке памяти, позволяя пользователю перемещаться по ряду ячеек памяти. Нажатие DEPOSIT записывает значение, содержащееся в переключателях данных, в ячейку памяти, на которую указывает счетчик программы. Нажатие DEPOSIT NEXT сначала увеличивает счетчик программы, а затем депонирует в указанную ячейку памяти.

Функция INST STEP заставила CPU выполнить одну инструкцию в текущем месте счетчика программ, а затем остановиться. Поскольку счетчик программы будет увеличиваться как часть выполнения инструкции, это позволяет пользователю пошагово выполнять программу. MEMORY STEP, неправильное название, заставляло ЦП проходить один тактовый цикл и останавливаться. Это было мало полезно для пользователей и обычно использовалось только обслуживающим персоналом для диагностики.

ЗАГРУЗКА ПРОГРАММЫ - это механизм, обычно используемый для загрузки Nova. Когда этот переключатель был запущен, он заставлял 32-словное загрузочное ПЗУ отображаться на первые 32 слова памяти, устанавливал счетчик программ на 0 и запускал ЦП. Загрузочное ПЗУ содержало код, который считывал 256 слов (512 байт) кода из выбранного устройства ввода-вывода в память, а затем передавал управление считываемому коду. Переключатели данных 8-15 использовались для указания загрузочному ПЗУ, с какого канала ввода / вывода загружаться. Если переключатель 0 был выключен, загрузочное ПЗУ предположит, что устройство является опрашиваемым устройством (например, устройством чтения бумажной ленты), и запустит цикл ввода по запросу, пока не будут прочитаны 512 байт. Если переключатель 0 был включен, загрузочное ПЗУ предполагало, что устройство поддерживает DMA, и инициировало передачу данных DMA. Загрузочное ПЗУ было недостаточно интеллектуальным, чтобы расположить устройство до начала передачи. Это была проблема при перезагрузке после сбоя; если загрузочное устройство было дисковым накопителем, его головки, вероятно, были оставлены на случайном цилиндре. Их пришлось переместить в цилиндр 0, где RDOS записал загрузочный блок первого уровня, чтобы последовательность загрузки работала. Обычно это делалось путем циклического переключения привода через последовательность загрузки, но пользователи, разочарованные временем ожидания (до 5 минут в зависимости от модели привода), научились вводить с передней панели код ввода-вывода «перекалибровать». и пошагово выполнить через него ЦП - операция, которая заняла у опытного пользователя всего несколько секунд.

Выключатель питания представлял собой трехпозиционный клавишный переключатель с положениями, обозначенными OFF, ON и LOCK. В положении ВЫКЛ все питание ЦП отключено. При повороте ключа в положение 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 мкс.[25] В более поздних версиях 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 мкс.[26]

Примеры языков ассемблера

Привет, мир программа

Это минимальный пример программирования на ассемблере Nova. Он предназначен для работы под RDOS и печатает строку «Привет, мир. »На консоли.

    ; программа "привет, мир" для Nova с RDOS    ; использует системный вызов PCHAR    .titl Привет    .nrel    .ent Начните Начните: Дочар:    lda    0,@pmsg  ; загрузить в ac0 следующий символ,    mov #   0,0,snr  ; тест ac0; пропустить, если ненулевое значение (не загружать результат)    jmp    сделано    .systm    .pchar          ; сначала напечатать    jmp    э       ; пропущено, если ОК    мовс   0,0      ; поменять местами байты    .systm    .pchar          ; печать второй    jmp    э       ; пропущено, если ОК    isz    pmsg     ; указать на следующий символ    jmp    Дочар   ; идти вокруг снова сделано:    .systm          ; нормальный выход    .rtn эр:    .systm          ; ошибка выхода    .ertn    остановка pmsg:    .+1             ; указатель на первый символ строки                    ; примечание байты по умолчанию упаковываются справа налево                    ; <15> <12> обозначает пару CR LF.    .текст /Привет, Мир.<15><12>/    0               ; слово флага до конца строки    .конец Начните

16-битное умножение

Базовые модели Nova поставлялись без встроенной аппаратной функции умножения и деления, чтобы поддерживать конкурентоспособные цены. Следующая процедура умножает два 16-битных слова для получения результата в 16-битном слове (переполнение игнорируется). Он демонстрирует совместное использование ALU op, shift и test (skip). Обратите внимание: когда эта процедура вызывается jsr, AC3 содержит обратный адрес. Это используется инструкцией возврата jmp 0,3. Идиоматический способ очистить аккумулятор: суб 0,0. Можно организовать другие отдельные инструкции для загрузки определенного набора полезных констант (например, -2, -1 или +1).

 mpy:	; умножить AC0 <- AC1 * AC2, Тоби Тейн 	суб 0,0		; четкий результат мбит:	movzr 1,1,szc	; множитель сдвига, тест лсб 	Добавить 2,0		; 1: сложить множимое 	movzl 2,2,szr	; сдвиг и тест на ноль 	jmp мбит	; не ноль, сделай еще немного 	jmp 0,3		; возвращаться

Аккумулятор двоичной печати

Следующая процедура печатает значение AC1 в виде 16-значного двоичное число, на консоли RDOS. Это раскрывает другие причуды набора инструкций Nova. Например, нет инструкции для загрузки произвольного «немедленного» значения в аккумулятор (хотя инструкции обращения к памяти кодируют такое значение для формирования эффективного адреса). Накопители обычно должны загружаться из инициализированных ячеек памяти (например, n16). Другие современные машины, такие как PDP-11, и практически все современные архитектуры допускают немедленную загрузку, хотя многие, такие как РУКА ограничить диапазон значений, которые могут быть загружены немедленно.

Потому что RDOS .systm макрос вызова реализует jsr, AC3 перезаписывается адресом возврата для .pchar функция. Следовательно, необходимо временное расположение, чтобы сохранить адрес возврата вызывающего эту функцию. Для рекурсивной или иным образом реентерабельной процедуры вместо этого должны использоваться стек, оборудование, если оно доступно, или программное обеспечение, если нет. Инструкция возврата становится jmp @ retrn который использует режим косвенной адресации Nova для загрузки возвращаемого ПК.

Определения констант в конце показывают две особенности ассемблера: основание ассемблера восьмеричный по умолчанию (20 = шестнадцать), а символьные константы могут быть закодированы, например, "0.

 pbin:  ; печать AC1 на консоли как 16 двоичных цифр, Тоби Тейн        штат     3,retrn     ; сохранить обратный адрес        lda     2,n16       ; настроить битовый счетчик петля:  lda     0,chr0      ; загрузить ASCII '0'        movzl   1,1,szc     ; получить следующий кусок в переносе        inc     0,0         ; поднять до "1"        .systm        .pchar              ; AC0-2 сохранен        jmp     ошибаться         ; если ошибка        inc     2,2,szr     ; счетчик ударов        jmp     петля        ; цикл снова, если не ноль        lda     0,зрc       ; вывести пробел        .systm        .pchar        jmp     ошибаться         ; если ошибка        jmp     @retrn spc:   " ; это пространство chr0:  "0 n16:   -20 retrn: 0

Факты

Канадская радиовещательная корпорация в Монреале использовала Nova 1200 для автоматизации воспроизведения каналов до конца 1980-х годов. Затем его заменили отремонтированные апартаменты Nova 4, которые использовались до середины 1990-х годов.

Смотрите также

Примечания

  1. ^ Вероятно, это была реакция на проблемы с PDP-6, в которых использовались большие платы и было много отказов. В PDP-10, по сути, модернизированный PDP-6, использует карты с «флип-чипом».

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

Цитаты

  1. ^ «Музей истории компьютеров - Data General Corporation (DG) - лучший маленький компьютер в мире».
  2. ^ Привет, Тони! Привет, Энтони! Папай, Гьюри (2014). Вычислительная вселенная: путешествие через революцию. п. 165. ISBN  9780521766456.
  3. ^ а б Хендри 2002, п. 40.
  4. ^ а б c d е Супник 2004.
  5. ^ а б c Хендри 2002, п. 48.
  6. ^ Хендри 2002, п. 42.
  7. ^ Хендри 2002, п. 43.
  8. ^ Хендри 2002, п. 43-44.
  9. ^ Хендри 2002, п. 44.
  10. ^ Хендри 2002, п. 49.
  11. ^ «Лучший маленький компьютер в мире» (PDF). Ноябрь 1968 г.
  12. ^ а б "Помешано в DEC, процветает в Data General". Музей истории компьютеров.
  13. ^ Джонс, Дуглас. "Корпорация цифрового оборудования PDP-8". Департамент компьютерных наук Университета Айовы.
  14. ^ Хендри 2002, п. 50.
  15. ^ а б "СУПЕР НОВА" (PDF). Музей истории компьютеров. 1970.
  16. ^ «Бизнес, о котором время забыли: Data General больше нет. Но разве это делает его основателя неудачником?». money.cnn.com. 1 апреля 2003 г.. Получено 27 июля 2016.
  17. ^ а б Хендри 2002, п. 53.
  18. ^ «Общая история данных / Предпосылки». Университет Клемсона.
  19. ^ Хендри 2002, п. 54.
  20. ^ а б c Хендри 2002, п. 55.
  21. ^ Хендри 2002, п. 58.
  22. ^ Хендри 2002, п. 60.
  23. ^ Чарльз П. Такер; Эдвард М. МакКрайт (декабрь 1974 г.). "Альт: система персонального компьютера" (PDF). п. 13.
  24. ^ Том Овад (2005). Создание реплики Apple I: назад в гараж. п. xxi. ISBN  1-931836-40-X.
  25. ^ Техническое руководство Nova 1200, Общие данные 015-000002, 1971, стр.1-4
  26. ^ Принципы работы Eclipse MV / 6000, Data General 014-000648, 1980, Прил. F

Библиография

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