Data General Nova

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

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

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

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

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

Содержание
  • 1 История
    • 1.1 Эдсон де Кастро и PDP-X
    • 1.2 Дизайн Nova
    • 1.3 Введение в Nova
    • 1.4 SuperNOVA
    • 1.5 1200 и 800
    • 1.6 Более поздние модели
      • 1.6.1 840
      • 1.6.2 Nova 2
      • 1.6.3 Nova 3
      • 1.6.4 Nova 4
    • 1.7 microNOVA
    • 1.8 Наследие Nova
  • 2 Техническое описание
    • 2.1 Устройство процессора
    • 2.2 Память и ввод / вывод
    • 2.3 Модель программирования
    • <15>2.4 Набор команд
      • 2.4.1 Арифметические инструкции
      • 2.4.2 Инструкции по обращению к памяти
      • 2.4. 3 Инструкции ввода / вывода
      • 2.4.4 Специальные инструкции
    • 2.5 Прерывания и обработка прерываний
    • 2.6 Внешний вид передней панели
    • 2.7 Производительность
  • 3 Примеры языка ассемблера
    • 3.1 Программа Hello World
    • 3.2 16-битное умножение
    • 3.3 Двоичный накопитель печати
  • 4 Факты
  • 5 См. Также
  • 6 Примечания
  • 7 Ссылки
    • 7.1 Цитаты
    • 7.2 Библиография
  • 8 Внешние ссылки
История

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

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

Во время процесса PDP-8 / I де Кастро был посещение производителей печатных плат, которые быстро добивались успеха в сложности сборки плат. де Кастро пришел к выводу, что 8 / I можно печатать, используя полностью автоматизированную сборку на больших досках, что было невозможно только годом ранее. Другие сотрудники DEC привыкли к меньшим платам, используемым в более ранних машинах, и об отслеживании проблем, когда на одной плате было много компонентов. Для 8 было принято решение остаться с небольшими платами, используя новую упаковку «flip-chip » для небольшого улучшения плотности.

В период, PDP -8, введение ASCII и его крупное обновление в 1967 году привело к поколению конструкций с длиной слова, кратной 8 битам, а не 6 битам, как в большинстве предыдущих проектов. Это привело к тому, что конструкции среднего уровня работали с длиной слова 16 бит вместо нынешних 12- и 18-битных линейок DEC. де Кастро был убежден, что можно улучшить PDP-8, построив 16-битный ЦП миникомпьютера на единой 15-дюймовой квадратной плате.

В 1967 году де Кастро начал новый проект, известный как «PDP-X», включающий несколько дополнительных функций. Среди них был единый базовый проект, который можно было использовать для создания 8-, 16- и 32-разрядных платформ. Это привело к созданию нескольких подробных архитектурных документов. Кен Олсен не поддерживает этот проект, считая, что он не предлагает достаточных преимуществ перед 12-битным PDP-8 и 18-битным PDP-9. В конце концов, весной 1968 года он был отменен.

Дизайн Nova

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

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

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

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

Введение в Nova

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

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

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

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

SuperNOVA

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

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

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

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

1200 и 800

Running Nova 840 (Передняя панель была заменена на панель от 1220) Data General Nova 3 ЦП Nova 1200 печатная плата

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

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

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

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

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

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

Пока шли эти усилия, работа на линии Нова продолжалась.

840

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

Nova 2

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

Nova 3

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

Nova 4

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

Существовало три разных версии 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 включают «предварительную выборку» для производительности за счет выборки до двух инструкций из памяти до того, как они потребятся.

microNOVA

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

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

Наследие Nova

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

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

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

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

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

Регистры Data General Nova
5432109876543210(бит позиция)
Регистры аккумулятора .
0Регистр 0
1Регистр 1
Индексные регистры .
2Индексный регистр 2
3Индексный регистр 3
Программный счетчик .
ПКPпрограмма C счетчик
Регистр состояния
C Cфлаг прибытия

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

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

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

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

Первые модели были доступны с 8 K слов из памяти с магнитным сердечником в качестве опции, которую практически каждый должен был купить, в результате чего стоимость системы выросла до 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 поставлялась с интерпретатором BASIC на перфоленте. По мере роста продукта Данные Общее множество языков для компьютеров Новые, работающие под управлением ряда рабочих разработанных систем. FORTRAN IV, ALGOL, Extended BASIC, Data General Business Basic, Interactive COBOL и несколько ассемблеров были доступны от Data General. Сторонние поставщики и сообщество пользователей расширили свои предложения с помощью Forth, Lisp, BCPL, C, ALGOL и других закрытых версий COBOL <129.>и BASIC.

Набор команд

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

Арифметические команды

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

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

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

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

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

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

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

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

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

ADDZR # 0, 2, SNC

Это декодируется как: очистить бит переноса; добавить содержимое AC2 (аккумулятор 2) к AC0; по кругу сдвиньте результат на один бит вправо; проверьте результат, чтобы увидеть, установлен ли бит переноса, и пропустите инструкцию, если это так. Отменить результат после выполнения теста. Фактически, это складывает два числа и проверяет, четный или нечетный результат.

Инструкции обращения к памяти

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

  • Режим 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.

STA 0,3, -1

Сохранение содержимого аккумулятора 0 в месте, которое на единицу меньше места, содержащегося в аккумуляторе 3.

DSZ COUNT

Уменьшите значение в метке местоположения, пропустите COUNT и пропустите инструкцию, если результат равен нулю. NREL, это эквивалентно: DSZ 1, (COUNT - (. + 1))

Инструкции ввода / вывода

В Novas реализована канальная модель для взаимодействия с вводом-выводом. В модели ожидалось, что устройство вывода вывода будет реализовывать два флага, называемых «Занят» и «Готово», и три регистра данных и управления, обозначаемые как A, B и C. Доступны инструкции ввода-вывода. для чтения и записи регистров и для отправки на устройство одного из трех сигналов, называемых «запуск», «очистка» и «импульс». Как правило, настроено начало запуска ввода-вывода, которая настроена путем ввода-вывода в регистры A / B / C. Импульсный сигнал используется для запуска вспомогательных операций в сложных подсистемах, таких как операции поиска на дисках. Опрашиваемые устройства обычно перемещают данные непосредственно между ними и A. Устройства DMA используют регистр для указаний адресов памяти, регистр B для указания количества передаваемых и регистр C для флагов управления. Канал 63 относился к самому ЦП и использовался для различных специальных функций.

Каждое сообщение ввода / вывода вводного поля ввода шестибитного номера канала, четырехбитное поле для указания, какой регистр читать или писать, и двухбитовое поле для указания, какой сигнал должен быть отправлен. На ассемблере сигнал указывался добавлением буквы к коду операции: «S» для начала, «C» для очистки, «P» для импульса и ничего для отсутствия сигнала. Коды:

  • DIA - переместить регистратор устройства в соответствующий аккумулятор
  • DOA - отправить первое место аккумулятора в регистр A устройство на указанном канале
  • DIB - переместить регистратор B в другой аккумулятор
  • DOB - отправить вставку аккумулятора в устройство B по указанному каналу
  • DIC - переустановить регистратор C устройства в соответствующий аккумулятор
  • DOC - отправить вставку аккумулятора в регистр C по указанному каналу
  • NIO - «нет I / O», неправильное название. Эта инструкция использовалась для регистрации сигнала без передачиров.

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

  • SKPBN - пропустить следующую команду, если установлен флаг занятости устройства. set
  • SKPBZ - пропустить инструкцию, если флаг готовности устройства снят
  • SKPDN - пропустить инструкцию, если установлен флаг готовности устройства
  • SKPDZ - пропустить следующую инструкцию, если флаг готовности устройства снят

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

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

Эти инструкции выполняют различные функции управления и состояния ЦП. Все они на самом деле были сокращенной мнемоникой для инструкций ввода-вывода на канале 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 3 использовали каноническую компоновку передней панели, как показано на фотографии панели Nova 840 выше. Компоновка содержит кнопочный выключатель питания, два ряда ламп индикации адресов и данных, ряд переключателей ввода данных и ряд функциональных переключателей, которые активируют различные функции ЦП. Индикаторы адреса всегда отображали текущее значение счетчика программного обеспечения в двоичном формате. Индикаторы отображали различные значения в зависимости от того, какая функция ЦП была активна в данный момент. Слева от крайнего левого индикатора дополнительной лампы отображала текущее значение бита переноса. На большинстве моделей лампы были лампами накаливания, припаянными к панели управления; Замена перегоревших ламп была отравой для инженеров службы технической поддержки Data General.

Каждый из переключателей данных управлял величиной одного бита в 16-битном значении, и в соответствии с соглашением Data General они были пронумерованы 0-15 слева направо. Переключатели вводят инструкции с помощью различных функций, а также могут быть переведены программой с языком ассемблера READS. Чтобы уменьшить беспорядок на панели и сэкономить деньги, функциональные переключатели были реализованы как двухпозиционные переключатели мгновенного действия. Когда рычаг переключателя функций был поднят, он запускал функцию, имя которой было напечатано над переключателем на панели; при нажатии на рычаг активируется функция, название которой под переключателем. При отпускании рычаг переключателя возвращается в нейтральное положение.

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

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

Следующие два переключателя обеспечли доступ для чтения и записи к памяти с передней панели. Нажатие EXAMINE передает значение, установленное в переключателях данных 1-15, на счетчик программ, извлекает значение в соответствующей ячейке памяти и отображает его значение на индикаторе данных. Нажатие EXAMINE NEXT увеличивает счетчик программы, а затем выполняет проверку в этой ячейке памяти, позволяя пользователю перемещаться по серии ячеек памяти. Нажатие ДЕПОЗИТ записывает значение, содержащееся в переключателях данных, в ячейку памяти, на которую указывает счетчик программы. Нажатие 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 мкс. На более поздних версиях 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 мкс.

Сборка примеров языков

Программа Hello World

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

; программа "hello, world" для Новы с RDOS; использует системный вызов PCHAR.titl hellonrel.ent start start: dochar: lda 0, @ pmsg; загрузить в ac0 следующий символ, mov # 0,0, snr; тест ac0; пропустить, если не ноль (не загружать результат) jmp done.systm.pchar; напечатать первый jmp er; пропускается, если ОК movs 0,0; поменять местами байты.systm.pchar; напечатать второй jmp er; пропускается, если ОК isz pmsg; указать на следующий символ jmp dochar; обойти еще раз сделано:.systm; нормальный выход.rtn er:.systm; ошибка выхода.ertn halt pmsg:. + 1; указатель на первый символ строки; обратите внимание, что по умолчанию байты упаковываются справа налево; обозначает пару CR LF..txt / Привет, мир. / 0; слово флага до конца строки.end start

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

Базовые модели Nova поставлялись без встроенной аппаратной функции умножения и деления, чтобы поддерживать конкурентоспособные цены. Следующая процедура умножает два 16-битных слова для получения результата в 16-битном слове (переполнение игнорируется). Он демонстрирует совместное использование ALU op, shift и test (skip). Обратите внимание, что когда эта процедура вызывается из 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, ограничивают диапазон значений, которые могут быть загружены немедленно.

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

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

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

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

См. Также
Примечания
Ссылки

Цитаты

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

Внешние ссылки
Последняя правка сделана 2021-05-17 14:08:26
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте