stringtranslate.com

Datos Generales Nova

Un sistema Nova (beige y amarillo, parte inferior central) y un sistema de disco duro de cartucho (abierto, debajo de Nova) en un soporte de bastidor casi vacío
Un Nova 1200, en el centro de la derecha, procesó las imágenes generadas por el EMI-Scanner, el primer escáner CT disponible comercialmente en el mundo .

El Data General Nova es una serie de minicomputadoras de 16 bits lanzadas por la empresa estadounidense Data General . La familia Nova fue muy popular en la década de 1970 y finalmente vendió decenas de miles de unidades.

El primer modelo, conocido simplemente como "Nova", se lanzó en 1969. [1] El Nova estaba empaquetado en una única caja de montaje en bastidor de 3U y tenía suficiente potencia informática para realizar la mayoría de las tareas simples. El Nova se hizo popular en los laboratorios científicos de todo el mundo. Al año siguiente le siguió el SuperNOVA , que funcionó aproximadamente cuatro veces más rápido.

Introducida durante un período de rápido progreso en el diseño de circuitos integrados (o "microchips"), la línea pasó por varias actualizaciones durante los siguientes cinco años, introduciendo el 800 y el 1200, el Nova 2, el Nova 3 y, finalmente, el Nova 4. La implementación de un solo chip también se introdujo como microNOVA en 1977, pero no tuvo un uso generalizado a medida que el mercado pasó a nuevos diseños de microprocesadores. Fairchild Semiconductor también introdujo una versión con microprocesador del Nova en 1977, el Fairchild 9440 , pero también tuvo un uso limitado en el mercado.

La línea Nova fue reemplazada por Data General Eclipse , que era similar en muchos aspectos pero agregó soporte de memoria virtual y otras características requeridas por los sistemas operativos modernos . Una actualización de 32 bits del Eclipse dio como resultado la serie Eclipse MV de la década de 1980.

Historia

Edson de Castro y el PPD-X

Edson de Castro fue el gerente de producto de la pionera PDP-8 de Digital Equipment Corporation (DEC) , una computadora de 12 bits ampliamente conocida como la primera minicomputadora verdadera. [2] También dirigió el diseño del PDP-8/I actualizado, que utilizaba los primeros circuitos integrados en lugar de transistores individuales. [3]

Durante el proceso PDP-8/I, de Castro había estado visitando fabricantes de placas de circuitos que estaban logrando rápidos avances en la complejidad de las placas que podían ensamblar. de Castro concluyó que el 8/I podría producirse mediante un montaje totalmente automatizado en tableros grandes, lo que habría sido imposible sólo un año antes. Otros dentro de DEC se habían acostumbrado a las placas más pequeñas utilizadas en máquinas anteriores y estaban preocupados por detectar problemas cuando había muchos componentes en una sola placa. [a] Para el 8/I, se tomó la decisión de quedarse con tablas pequeñas, usando el nuevo empaque " flip-chip " para una modesta mejora en la densidad. [3]

Durante el período en que se estaba desarrollando el PDP-8, la introducción de ASCII y su importante actualización en 1967 condujo a una nueva generación de diseños con longitudes de palabras que eran múltiplos de 8 bits en lugar de múltiplos de 6 bits como en la mayoría de los diseños anteriores. Esto llevó a que los diseños de rango medio funcionaran con longitudes de palabras de 16 bits en lugar de las alineaciones actuales de DEC de 12 y 18 bits. de Castro estaba convencido de que era posible mejorar el PDP-8 construyendo una CPU de minicomputadora de 16 bits en una sola placa cuadrada de 15 pulgadas. [4] [5]

En 1967, de Castro inició un nuevo esfuerzo de diseño conocido como "PDP-X", que incluía varias características avanzadas. Entre ellos se encontraba un diseño subyacente único que podría usarse para construir plataformas de 8, 16 y 32 bits. [6] Esto progresó hasta el punto de producir varios documentos de arquitectura detallados. Ken Olsen no apoyó este proyecto, sintiendo que no ofrecía suficientes ventajas sobre el PDP-8 de 12 bits y el PDP-9 de 18 bits . Finalmente fue cancelado en la primavera de 1968. [4]

Diseño de la Nova

La cancelación del PDP-X llevó a De Castro a considerar dejar al DEC para construir un sistema por su cuenta. No estaba solo; A finales de 1967 se formó un grupo de ingenieros con ideas afines para considerar una máquina de este tipo. El grupo incluía a Pat Green, gerente de división; Richard Sogge, otro ingeniero de hardware; y Henry Burkhardt III, ingeniero de software. [7] A diferencia del PDP-X, el nuevo esfuerzo se centró en una sola máquina que pudiera lanzarse al mercado rápidamente, ya que de Castro sintió que el concepto PDP-X era demasiado ambicioso para una pequeña empresa emergente . [8]

Al discutirlo con los demás en DEC, el concepto inicial condujo a una máquina de 8 bits que sería menos costosa de implementar. [9] El grupo comenzó a hablar con Herbert Richman, un vendedor de Fairchild Semiconductor que conocía a los demás a través de sus contactos con DEC. En ese momento, Fairchild estaba luchando con Texas Instruments y Signetics en el mercado TTL en rápido crecimiento y estaba introduciendo nuevas fábricas que permitían diseños más complejos. La última serie 9300 de Fairchild permitía hasta 96 puertas por chip, y las habían utilizado para implementar varios chips de 4 bits, como contadores binarios y registros de desplazamiento . [10]

El uso de estos circuitos integrados redujo el recuento total de circuitos integrados necesarios para implementar una unidad lógica aritmética (ALU) completa, el componente matemático central de una CPU, lo que permitió la expansión de un diseño de 8 bits a 16 bits. Esto requirió la expansión de la CPU de una sola placa de circuito impreso de 15 por 15 pulgadas (38 cm × 38 cm) a dos, pero un diseño de este tipo aún sería significativamente más barato de producir que el 8/I y al mismo tiempo seguiría siendo más potente y Basado en ASCII. Una tercera placa contenía los circuitos de entrada/salida y un sistema completo normalmente incluía otra placa con 4 kB de memoria de acceso aleatorio . Un sistema completo de cuatro tarjetas cabe en un único chasis de montaje en rack. [5]

Las placas se diseñaron para que pudieran conectarse entre sí mediante una placa posterior de circuito impreso , con un cableado manual mínimo, lo que permitió que todas las placas se construyeran de forma automatizada. Esto redujo en gran medida los costos con respecto a 8/I, que consistía en muchas placas más pequeñas que debían conectarse entre sí en el backplane, que a su vez estaba conectado entre sí mediante envoltura de cables . La construcción de tablero más grande también hizo que Nova fuera más confiable, lo que lo hizo especialmente atractivo para entornos industriales o de laboratorio. [5]

El nuevo diseño utilizó una arquitectura simple de almacenamiento de carga [4] que resurgiría en los diseños RISC en la década de 1980. Debido a que la complejidad de un flip-flop se estaba reduciendo rápidamente a medida que se implementaban en chips, el diseño compensó la falta de modos de direccionamiento del diseño de carga-almacenamiento agregando cuatro acumuladores de propósito general , en lugar del registro único que se encontraría. en ofertas similares de bajo costo como la serie PDP. [4]

introducción nueva

A finales de 1967, Richman presentó al grupo al abogado Fred Adler, radicado en Nueva York, quien comenzó a buscar varias fuentes de financiación para obtener capital inicial. En 1968, Adler había llegado a un importante acuerdo de financiación con un consorcio de fondos de capital de riesgo del área de Boston, que acordaron proporcionar una inversión inicial de 400.000 dólares estadounidenses con una segunda inversión de 400.000 dólares disponibles para aumentar la producción. de Castro, Burkhart y Sogge abandonaron DEC y fundaron Data General (DG) el 15 de abril de 1968. Green no se unió a ellos, considerando que la empresa era demasiado arriesgada, y Richman no se unió hasta que el producto estuvo en funcionamiento más adelante ese mismo año. [5]

El trabajo en el primer sistema duró unos nueve meses y los primeros esfuerzos de ventas comenzaron en noviembre. Tuvieron un poco de suerte porque la Conferencia Conjunta de Computación de Otoño se había retrasado hasta diciembre de ese año, por lo que pudieron traer una unidad funcional al Centro Moscone donde ejecutaron una versión de Spacewar. . [11] DG lanzó oficialmente el Nova en 1969 a un precio base de 3.995 dólares estadounidenses (equivalente a 31.880 dólares en 2022), anunciándolo como "la mejor computadora pequeña del mundo". [12] El modelo básico no era muy útil desde el primer momento, y agregarkilovatios (16  kB ) La RAM en forma de memoria central normalmente elevaba el precio a 7.995 dólares estadounidenses . [13] Por el contrario, un 8/I conkilovatios (6 kB ) tenía un precio de 12.800 dólares estadounidenses . [14]

La primera venta fue a una universidad en Texas, y el equipo construyó manualmente un ejemplo que se envió en febrero. Sin embargo, esto fue en medio de una huelga en la industria aérea y la máquina nunca llegó. Enviaron un segundo ejemplo, que llegó puntualmente ya que la huelga ya había terminado, y en mayo finalmente también se entregó el original. [15]

El sistema tuvo éxito desde el principio: el número 100 se vendió después de seis meses [16] y el número 500 después de 15 meses. [13] Las ventas se aceleraron a medida que se introdujeron versiones más nuevas y, en 1975, la empresa tenía unas ventas anuales de 100 millones de dólares . [17]

SuperNOVA

Ken Olsen había predicho públicamente que DG fracasaría, pero con el lanzamiento del Nova quedó claro que eso no iba a suceder. En ese momento, varias otras empresas estaban hablando de introducir también diseños de 16 bits. Olsen decidió que estos presentaban una amenaza tanto para su línea de 18 bits como para la de 12 bits, y comenzó un nuevo esfuerzo de diseño de 16 bits. [18] Este surgió en 1970 como el PDP-11 , un diseño mucho más complejo que era tan diferente del PDP-X como lo era el Nova. Los dos diseños compitieron fuertemente en el mercado. [4]

Los rumores sobre el nuevo sistema de DEC llegaron a DG poco después de que Nova comenzara a enviarse. En la primavera de 1970 contrataron a un nuevo diseñador, Larry Seligman, para superar cualquier máquina posible en proceso. Se habían producido dos cambios importantes desde que se diseñó el Nova; Una fue que Signetics había introducido el 8260, un IC de 4 bits que combinaba un sumador, XNOR y AND, lo que significaba que la cantidad de chips necesarios para implementar la lógica básica se redujo aproximadamente tres veces. Otra fue que Intel estaba hablando agresivamente de memorias basadas en semiconductores, prometiendo 1024 bits en un solo chip y funcionando a velocidades mucho más altas que la memoria central. [18]

El nuevo diseño de Seligman aprovechó ambas mejoras. Para empezar, los nuevos circuitos integrados permitieron ampliar la ALU a un ancho completo de 16 bits en las mismas dos tarjetas, lo que le permitió realizar operaciones matemáticas y lógicas en un solo ciclo y, por lo tanto, hacer que el nuevo diseño fuera cuatro veces más rápido que el original. . Además, se utilizó una nueva memoria central más pequeña que mejoró el tiempo de ciclo de los 1200 ns del original a 800 ns, ofreciendo una mayor1/3mejora. El rendimiento podría mejorarse aún más reemplazando el núcleo con memoria de sólo lectura ; Al carecer del ciclo de lectura-escritura del núcleo, se podría acceder a él en 300 ns para aumentar drásticamente el rendimiento. [dieciséis]

La máquina resultante, conocida como SuperNOVA , fue lanzada en 1970. Aunque los modelos iniciales todavía usaban núcleo, todo el diseño se basó en la premisa de que estarían disponibles memorias semiconductoras más rápidas y la plataforma podría aprovecharlas al máximo. Este se introdujo más tarde, ese mismo año, que el SuperNOVA SC , con memoria semiconductora (SC). El rendimiento mucho mayor de la memoria permitió que la CPU, que estaba sincronizada con la memoria, aumentara aún más su velocidad para funcionar a un tiempo de ciclo de 300 ns (3,3 MHz). Esto la convirtió en la minicomputadora más rápida disponible durante muchos años. [19] Inicialmente, la nueva memoria también era muy cara y se calentaba, por lo que no se utilizaba mucho. [20]

1200 y 800

Placa de circuito impreso de la CPU Nova 1200 . El 74181 ALU es el gran IC de centro derecha.

Como demostración del poder de su tecnología de matriz de puertas Micromatrix , en 1968 Fairchild creó el prototipo del 4711, una ALU de 4 bits de un solo chip. [10] [21] El diseño nunca estuvo pensado para la producción en masa y su producción era bastante costosa. La introducción del Signetics 8260 en 1969 les obligó a actuar; Tanto Texas Instruments como Fairchild introdujeron sus propias ALU de 4 bits en 1970, el 74181 y el 9341, respectivamente. A diferencia del 8260, los nuevos diseños ofrecían todas las funciones lógicas comunes y reducían aún más el número de chips. [10]

Esto llevó a DG a considerar el diseño de una nueva CPU utilizando estos circuitos integrados más integrados. Como mínimo, esto reduciría la CPU a una sola tarjeta, ya sea para el Nova básico o el SuperNOVA. Surgió un nuevo concepto en el que un solo chasis podría albergar cualquiera de las máquinas simplemente cambiando la placa de circuito de la CPU. Esto permitiría a los clientes comprar el sistema de menor costo y luego actualizarlo en cualquier momento. [22]

Mientras Seligman trabajaba en SuperNOVA, la empresa recibió una carta de Ron Gruner que decía: "He leído sobre su producto, he leído sus anuncios y voy a trabajar para usted. Y voy a ser "Estaré en tus oficinas dentro de una semana para hablar contigo sobre eso". [22] Fue contratado en el acto. Gruner se encargó de la máquina de bajo coste, mientras que Seligman diseñó una versión de alto rendimiento a juego. [22]

El modelo de bajo costo de Gruner se lanzó en 1970 como Nova 1200 , el 1200 se refiere al uso de la memoria central de 1200 ns del Nova original. Presentaba una ALU de 4 bits basada en un único chip 74181 y, por lo tanto, era esencialmente un Nova reempaquetado. El SuperNOVA de cuatro ALU reempaquetado de Seligman fue lanzado en 1971 como Nova 800 , lo que resultó en una denominación algo confusa donde el modelo con números más bajos tiene un mayor rendimiento. [22] Ambos modelos se ofrecieron en una variedad de cajas, el 1200 con siete ranuras, el 1210 con cuatro y el 1220 con catorce.

Modelos posteriores

En ese momento, el PDP-11 finalmente se estaba enviando. Ofrecía una arquitectura de conjunto de instrucciones mucho más rica que la deliberadamente simple del Nova. La mejora continua en los diseños de circuitos integrados, y especialmente en su relación precio-rendimiento , estaba erosionando el valor de las instrucciones simplificadas originales. Seligman se encargó de diseñar una nueva máquina que fuera compatible con Nova y al mismo tiempo ofreciera un entorno mucho más rico para quienes la desearan. Este concepto se presentó como la serie Data General Eclipse , que ofrecía la capacidad de agregar circuitos adicionales para adaptar el conjunto de instrucciones a cargas de trabajo científicas o de procesamiento de datos. El Eclipse logró competir con el PDP-11 en el extremo superior del mercado. [23]

Casi al mismo tiempo, comenzaron a surgir rumores sobre una nueva máquina de 32 bits de DEC. DG decidió que tenían que tener un producto similar y Gruner quedó a cargo de lo que se convirtió en el Proyecto Fountainhead. Dado el alcance del proyecto, acordaron que todo el esfuerzo debería realizarse fuera del sitio y Gruner seleccionó una ubicación en Research Triangle Park en Carolina del Norte . Este diseño se volvió muy complejo [24] y finalmente fue cancelado años después.

Mientras estos esfuerzos estaban en marcha, continuaron los trabajos en la línea Nova.

840

Ejecutando Nova 840 (El panel frontal ha sido reemplazado por uno de un 1220)

El 840, ofrecido por primera vez en 1973, también incluía un nuevo sistema de memoria paginada que permitía direcciones de hasta 17 bits. Un índice desplaza la dirección base en la memoria más grande de 128 kpalabras. En realidad, instalar tanta memoria requirió un espacio considerable; el 840 se envió en una caja grande de 14 ranuras.

nueva 2

La siguiente versión fue la Nova 2 , y las primeras versiones se enviaron en 1973. La Nova 2 era esencialmente una versión simplificada de las máquinas anteriores, ya que el aumento de la densidad de los chips permitía reducir el tamaño de la CPU. Mientras que SuperNOVA usó tres placas de 15 × 15 "para implementar la CPU y su memoria, Nova 2 instaló todo esto en una sola placa. La ROM se usó para almacenar el código de arranque, que luego se copió en el núcleo cuando el "programa se cargaba". " se activó el interruptor. Había versiones disponibles con cuatro ("2/4"), siete y diez ("2/10") ranuras.

nueva 3

Datos generales Nova 3

El Nova 3 de 1975 agregó dos registros más, utilizados para controlar el acceso a una pila incorporada. El procesador también se reimplementó utilizando componentes TTL , aumentando aún más el rendimiento del sistema. El Nova 3 se ofreció en versiones de cuatro ranuras (Nova 3/4) y doce ranuras (Nova 3/12).

nueva 4

Parece que Data General originalmente pretendía que el Nova 3 fuera el último de su línea, planeando reemplazar el Nova con las máquinas Eclipse posteriores. [ cita necesaria ] Sin embargo, la demanda continua llevó a que se introdujera una máquina Nova 4 en 1978, esta vez basada en cuatro ALU de corte de bits AMD Am2901 . Esta máquina fue diseñada desde el principio para ser tanto Nova 4 como Eclipse S/140, con un microcódigo diferente para cada uno. También estaba disponible un coprocesador de punto flotante que ocupaba una ranura separada. Una opción adicional permitía el mapeo de memoria, lo que permitía a los programas acceder a hasta 128 kpalabras de memoria mediante conmutación de banco . A diferencia de las máquinas anteriores, el Nova 4 no incluía una consola en el panel frontal y en su lugar incluía una ROM que contenía un código de máquina que permite que un terminal emule una consola cuando sea necesario. [25] : 87 

Había tres versiones diferentes del Nova 4, el Nova 4/C, el Nova 4/S y el Nova 4/X. El Nova 4/C era una implementación de placa única que incluía toda la memoria (16 o 32 kpalabras). El Nova 4/S y el 4/X usaban tarjetas de memoria separadas. El Nova 4/X tenía la unidad de gestión de memoria integrada (MMU) habilitada para permitir el uso de hasta 128 kpalabras de memoria. La MMU también se instaló en el Nova 4/S, pero el firmware la deshabilitó. Tanto el 4/S como el 4/X incluían un "prefetcher" para aumentar el rendimiento al recuperar hasta 11 instrucciones de la memoria antes de que fueran necesarias. [25] : 5 

microNOVA

Datos Generales microprocesador mN601

Data General también produjo una serie de implementaciones de chip único microNOVA del procesador Nova. Para permitir que encaje en un chip de paquete dual en línea (DIP) de 40 pines, el bus de direcciones y el bus de datos compartían un conjunto de 16 pines. Esto significaba que las lecturas y escrituras en la memoria requerían dos ciclos y que, como resultado, la máquina funcionaba aproximadamente a la mitad de la velocidad del Nova original. [26]

El primer chip de la serie fue el mN601 , de 1977. Este se vendió tanto como CPU para otros usuarios, como chipset completo para quienes quisieran implementar un ordenador, como ordenador completo en una sola placa con 4 kB de RAM, y como Un modelo completo de gama baja del Nova. [26] Una versión mejorada del diseño, el mN602 de 1979 , redujo todo el conjunto de chips a un solo VLSI . Esto se ofreció en dos máquinas, la microNOVA MP/100 y la microNOVA MP/200 más grande .

Posteriormente, el microNOVA se volvió a empaquetar con un monitor en una carcasa estilo PC con dos disquetes como el Enterprise . Enterprise se lanzó en 1981, ejecutando RDOS , pero la introducción de la IBM PC el mismo año hizo que la mayoría de las otras máquinas desaparecieran del radar. [27]

El legado de Nova

El Nova influyó en el diseño de las computadoras Xerox Alto (1973) [28] y Apple I (1976) [29] , y su arquitectura fue la base de la serie Computervision CGP (Computervision Graphics Processor). Se ha informado que su diseño externo es la inspiración directa para el panel frontal de la microcomputadora MITS Altair (1975).

Data General siguió el éxito del Nova original con una serie de diseños más rápidos. La familia de sistemas Eclipse se introdujo más tarde con un conjunto de instrucciones ampliado y compatible hacia arriba, y la serie MV amplió aún más el Eclipse a una arquitectura de 32 bits para competir con el DEC VAX . El desarrollo de la serie MV se documentó en el popular libro de Tracy Kidder de 1981, The Soul of a New Machine . El propio Data General evolucionaría más tarde hasta convertirse en un proveedor de matrices de almacenamiento y servidores basados ​​en procesadores Intel, y finalmente sería adquirido por EMC .

Existe un grupo diverso pero apasionado de personas en todo el mundo que restauran y preservan sistemas de datos generales originales de 16 bits. [30] [31]

Descripción técnica

Diseño de procesador

El Nova, a diferencia del PDP-8 , tenía una arquitectura de almacenamiento de carga . Tenía cuatro registros acumuladores de 16 bits , dos de los cuales (2 y 3) podían usarse como registros índice . Había un contador de programa de 15 bits y un registro de acarreo de un solo bit . Al igual que con el PDP-8, el direccionamiento de página actual + cero era fundamental. No había registro de pila , pero los diseños posteriores de Eclipse utilizarían una dirección de memoria de hardware dedicada para esta función.

Los primeros modelos de Nova procesaban matemáticas en serie en paquetes de 4 bits, utilizando una única ALU de 74181 bits . Un año después de su introducción, este diseño se mejoró para incluir una unidad matemática paralela completa de 16 bits que utiliza cuatro 74181; este diseño se conoce como SuperNova. Las versiones futuras del sistema agregaron una unidad de pila y hardware de multiplicación/división.

El Nova 4/Eclipse S/140 se basó en cuatro ALU AMD de 2901 bits, con microcódigo en memoria de solo lectura , y fue el primer Nova diseñado solo para memoria principal DRAM , sin provisión para memoria de núcleo magnético .

Memoria y E/S

Los primeros modelos estaban disponibles con una memoria de núcleo magnético de 8 K palabras como opción, algo que prácticamente todo el mundo tenía que comprar, lo que elevaba el coste del sistema a 7.995 dólares.

Esta placa de memoria central estaba organizada de forma plana como cuatro grupos de cuatro bancos, cada banco llevaba dos conjuntos de núcleos en una matriz de 64 por 64; por lo tanto, había 64 x 64 = 4096 bits por conjunto, x 2 conjuntos dieron 8,192 bits, x 4 bancos dieron 32,768 bits, x 4 grupos dieron un total de 131,072 bits, y esto dividido por el tamaño de palabra de la máquina de 16 bits dio 8,192 palabras. de la memoria.

El núcleo de esta placa de memoria de palabras de 8K ocupaba una "placa sobre placa" ubicada en el centro, de 5,25" de ancho por 6,125" de alto, y estaba cubierta por una placa protectora. Estaba rodeado por los circuitos de lectura, escritura y reescritura del controlador de soporte necesarios. Todo el núcleo y la electrónica de soporte correspondiente encajan en una única placa estándar de 15 x 15 pulgadas (380 mm). Se podrían admitir hasta 32 K de dicha RAM central en una caja de expansión externa. La ROM semiconductora ya estaba disponible en ese momento, y los sistemas sin RAM (es decir, sólo con ROM) se hicieron populares en muchos entornos industriales. Las máquinas Nova originales funcionaban a aproximadamente 200 kHz , pero su SuperNova fue diseñada para funcionar hasta 3 MHz cuando se usaba con una memoria principal semiconductora especial.

El backplane estandarizado y las señales de E/S crearon un diseño de E/S simple y eficiente que hizo que la interfaz de dispositivos de E/S programadas y de canal de datos con Nova fuera simple en comparación con las máquinas de la competencia. Además de su estructura de bus de E/S dedicada, el backplane Nova tenía clavijas enrolladas que podían usarse para conectores no estándar u otros fines especiales.

modelo de programación

El formato de instrucción podría clasificarse ampliamente en una de tres funciones: 1) manipulación de registro a registro, 2) referencia de memoria y 3) entrada/salida. Cada instrucción estaba contenida en una palabra. La manipulación de registro a registro era casi similar a RISC en su eficiencia de bits; y una instrucción que manipulara datos de registro también podría realizar pruebas, cambios e incluso optar por descartar el resultado. Las opciones de hardware incluían una unidad de multiplicación y división de números enteros, una unidad de punto flotante (precisión simple y doble) y administración de memoria .

Software Data General en cinta perforada

El primer Nova venía con un intérprete BÁSICO en cinta perforada . A medida que el producto crecía, Data General desarrolló muchos lenguajes para las computadoras Nova, que se ejecutan en una variedad de sistemas operativos consistentes. FORTRAN IV , ALGOL , Extended BASIC, Data General Business Basic , Interactive COBOL y varios ensambladores estaban disponibles en Data General. Los proveedores externos y la comunidad de usuarios ampliaron las ofertas con Forth , Lisp , BCPL , C , ALGOL y otras versiones propietarias de COBOL y BASIC .

Conjunto de instrucciones

Las instrucciones de la máquina implementadas a continuación son el conjunto común implementado por todos los procesadores de la serie Nova. Los modelos específicos a menudo implementaban instrucciones adicionales y algunas instrucciones se proporcionaban mediante hardware opcional.

Instrucciones aritméticas

Todas las instrucciones aritméticas operaban entre acumuladores. Para operaciones que requerían dos operandos, uno se tomaba del acumulador de origen y otro del acumulador de destino, y el resultado se depositaba en el acumulador de destino. Para operaciones de un solo operando, el operando se tomó del registro de origen y el resultado reemplazó al registro de destino. Para todos los códigos de operación de un solo operando, estaba permitido que los acumuladores de origen y destino fueran los mismos, y la operación funcionó como se esperaba.

Todas las instrucciones aritméticas incluían un bit "sin carga" que, cuando se activaba, suprimía la transferencia del resultado al registro de destino; esto se usó junto con las opciones de prueba para realizar una prueba sin perder el contenido existente del registro de destino. En lenguaje ensamblador, agregar un '#' al código de operación establece el bit sin carga.

La CPU contenía un registro de un solo bit llamado bit de acarreo, que después de una operación aritmética contendría el acarreo del bit más significativo. El bit de acarreo podría establecerse en un valor deseado antes de realizar la operación utilizando un campo de dos bits en la instrucción. El bit podría establecerse, borrarse o complementarse antes de ejecutar la instrucción. En lenguaje ensamblador, estas opciones se especificaban agregando una letra al código de operación: 'O': establece el bit de acarreo; 'Z': borra el bit de acarreo, 'C': complementa el bit de acarreo, nada: deja el bit de acarreo en paz. Si también se especificara el bit sin carga, el valor de acarreo especificado se utilizaría para el cálculo, pero el registro de acarreo real permanecería inalterado.

Todas las instrucciones aritméticas incluían un campo de dos bits que podía usarse para especificar una opción de desplazamiento, que se aplicaría al resultado antes de que se cargara en el registro de destino. Se podría especificar un desplazamiento de un solo bit hacia la izquierda o hacia la derecha, o se podrían intercambiar los dos bytes del resultado. Los cambios eran circulares de 17 bits, con el bit de acarreo "a la izquierda" del bit más significativo. En otras palabras, cuando se realizó un desplazamiento a la izquierda, el bit más significativo del resultado se desplazó al bit de acarreo y el contenido anterior del bit de acarreo se desplazó al bit menos significativo del resultado. Los intercambios de bytes no afectaron el bit de acarreo. En lenguaje ensamblador, estas opciones se especificaban agregando una letra al código de operación: 'L' - desplazamiento hacia la izquierda; 'R' - desplazamiento hacia la derecha, 'S' - intercambio de bytes; nada: no realice un cambio ni un cambio.

Todas las instrucciones aritméticas incluían un campo de tres bits que podía especificar una prueba que se aplicaría al resultado de la operación. Si la prueba se evaluó como verdadera, se omitió la siguiente instrucción en la línea. En lenguaje ensamblador, la opción de prueba se especificaba como un tercer operando de la instrucción. Las pruebas disponibles fueron:

Las instrucciones aritméticas reales fueron:

Un ejemplo de instrucción aritmética, con todas las opciones utilizadas, es:

ADDZR# 0 , 2 , SNC 

Esto se decodifica como: borrar el bit de acarreo; sumar el contenido de AC2 (acumulador 2) a AC0; desplace circularmente el resultado un bit hacia la derecha; Pruebe el resultado para ver si el bit de acarreo está configurado y omita la siguiente instrucción si es así. Deseche el resultado después de realizar la prueba. En efecto, esto suma dos números y prueba para ver si el resultado es par o impar.

Instrucciones de referencia de memoria

El conjunto de instrucciones de Nova contenía un par de instrucciones que transferían el contenido de la memoria a los acumuladores y viceversa, dos instrucciones de transferencia de control y dos instrucciones que probaban el contenido de una ubicación de memoria. Todas las instrucciones de referencia de memoria contenían un campo de dirección de ocho bits y un campo de dos bits que especificaba el modo de direccionamiento de la memoria. Los cuatro modos fueron:

Obviamente, el modo 0 sólo era capaz de direccionar las primeras 256 palabras de memoria, dado el campo de dirección de ocho bits. Esta porción de memoria se denominó "página cero". Las palabras de memoria de la página cero se consideraban valiosas para los programadores de lenguaje ensamblador de Nova debido al pequeño número disponible; sólo las ubicaciones de la página cero podían direccionarse desde cualquier parte del programa sin recurrir al direccionamiento indexado, lo que requería ocupar el acumulador 2 o 3 para usarlo como registro de índice. En lenguaje ensamblador, una directiva ".ZREL" hacía que el ensamblador colocara las instrucciones y palabras de datos que la seguían en la página cero; una directiva ".NREL" colocó las siguientes instrucciones y palabras de datos en la memoria "normal". Los modelos posteriores de Nova agregaron instrucciones con campos de direccionamiento extendidos, lo que superó esta dificultad (con una penalización en el rendimiento).

El ensamblador calculó automáticamente las compensaciones relativas para el modo 1, aunque también era posible escribirlo explícitamente en la fuente. Si una instrucción de referencia de memoria hacía referencia a una dirección de memoria en el espacio .NREL pero no a ningún especificador de modo, se asumía el modo 1 y el ensamblador calculaba el desplazamiento entre la instrucción actual y la ubicación referenciada, y lo colocaba en el campo de dirección de la instrucción (siempre que el resultado el valor cabe en el campo de 8 bits).

Las dos instrucciones de carga y almacenamiento fueron:

Ambas instrucciones incluían un bit "indirecto". Si este bit estaba configurado (hecho en lenguaje ensamblador agregando una '@' al código de operación), se suponía que el contenido de la dirección de destino era una dirección de memoria en sí misma, y ​​se haría referencia a esa dirección para realizar la carga o el almacenamiento.

Las dos instrucciones de transferencia de control fueron:

Como en el caso de las instrucciones de carga y almacenamiento, las instrucciones de salto contenían un bit indirecto, que también se especificaba en ensamblador mediante el carácter '@'. En el caso de un salto indirecto, el procesador recuperaba el contenido de la ubicación de destino y usaba el valor como dirección de memoria para saltar. Sin embargo, a diferencia de las instrucciones de carga y almacenamiento, si la dirección indirecta tuviera configurado el bit más significativo, realizaría un ciclo adicional de direccionamiento indirecto. En los procesadores de la serie Nova anteriores al Nova 3, no había límite en el número de ciclos de direccionamiento indirecto; una dirección indirecta que hiciera referencia a sí misma daría como resultado un bucle infinito de direccionamiento indirecto, y la instrucción nunca se completaría. (Esto podría ser alarmante para los usuarios, ya que en esta condición, presionar el interruptor STOP en el panel frontal no hizo nada. Fue necesario reiniciar la máquina para romper el bucle).

Las dos instrucciones de la prueba de memoria fueron:

Como en el caso de las instrucciones de carga y almacenamiento, había un bit indirecto que realizaría un único nivel de direccionamiento indirecto. Estas instrucciones eran extrañas porque, en los Nova con memoria de núcleo magnético, la instrucción se ejecutaba dentro de la propia placa de memoria. Como era común en ese momento, las placas de memoria contenían un circuito de "escritura" para resolver el problema de lectura destructiva inherente a la memoria de núcleo magnético. Pero el mecanismo de reescritura también contenía una mini unidad aritmética, que el procesador utilizaba para varios propósitos. Para las instrucciones ISZ y DSZ, el incremento o decremento se produjo entre la ubicación de la memoria que se lee y la reescritura; la CPU simplemente esperó a que le dijeran si el resultado era cero o distinto de cero. Estas instrucciones eran útiles porque permitían utilizar una ubicación de memoria como contador de bucle sin ocupar un acumulador, pero eran más lentas que realizar las instrucciones aritméticas equivalentes.

Algunos ejemplos de instrucciones de referencia de memoria:

LDA 1 , CONTAR 

Transfiere el contenido de la ubicación de memoria etiquetada COUNT al acumulador 1. Suponiendo que COUNT está en el espacio .NREL, esta instrucción es equivalente a: LDA 1,1,(COUNT-(.+1)) donde '.' representa la ubicación de la instrucción LDA.

JSR @ 0 , 17 

Salte indirectamente a la dirección de memoria especificada por el contenido de la ubicación 17, en el espacio cero de la página, y deposite la dirección del remitente en el acumulador 3. Este era el método estándar para realizar una llamada al sistema RDOS en los primeros modelos de Nova; el mnemotécnico del lenguaje ensamblador ".SYSTM" traducido a esto.

JMP 0 , 3 

Saltar a la ubicación de la memoria cuya dirección está contenida en el acumulador 3. Este era un medio común de regresar de una función o llamada de subrutina, ya que la instrucción JSR dejó la dirección de retorno en el acumulador 3.

ESTA 0 , 3 , - 1 

Almacene el contenido del acumulador 0 en la ubicación que sea uno menos que la dirección contenida en el acumulador 3.

CUENTA DSZ 

Disminuya el valor en la ubicación etiquetada COUNT y omita la siguiente instrucción si el resultado es cero. Como en el caso anterior, si se supone que COUNT está en el espacio .NREL, esto equivale a: DSZ 1,(COUNT-(.+1))

Instrucciones de E/S

Los Nova implementaron un modelo canalizado para conectarse a dispositivos de E/S. En el modelo, se esperaba que cada dispositivo de E/S implementara dos indicadores, denominados "Ocupado" y "Listo", y tres registros de control y datos, denominados A, B y C. Las instrucciones de E/S estaban disponibles leer y escribir los registros y enviar una de tres señales al dispositivo, denominadas "inicio", "borrado" y "pulso". En general, el envío de una señal de inicio iniciaba una operación de E/S que se había configurado cargando valores en los registros A/B/C. La señal de borrado detuvo una operación de E/S y borró cualquier interrupción resultante. La señal de pulso se utilizó para iniciar operaciones auxiliares en subsistemas complejos, como operaciones de búsqueda en unidades de disco. Los dispositivos encuestados generalmente movían datos directamente entre el dispositivo y el registro A. Los dispositivos DMA generalmente usaban el registro A para especificar la dirección de memoria, el registro B para especificar el número de palabras a transferir y el registro C para indicadores de control. El canal 63 se refería a la propia CPU y se utilizaba para diversas funciones especiales.

Cada instrucción de E/S contenía un campo de número de canal de seis bits, uno de cuatro bits para especificar qué registro leer o escribir y un campo de dos bits para especificar qué señal se iba a enviar. En lenguaje ensamblador, la señal se especificaba agregando una letra al código de operación: 'S' para inicio, 'C' para borrar, 'P' para pulso y nada para no tener señal. Los códigos de operación fueron:

Además, estaban disponibles cuatro instrucciones para probar el estado de un dispositivo:

Al iniciar un dispositivo, se estableció su indicador de ocupado. Cuando se completó la operación solicitada, convencionalmente el dispositivo borró su indicador de ocupado y estableció su indicador de hecho; la mayoría de los dispositivos tenían su mecanismo de solicitud de interrupción conectado al indicador de finalización, por lo que configurar el indicador de finalización provocó una interrupción (si las interrupciones estaban habilitadas y el dispositivo no estaba enmascarado).

instrucciones especiales

Estas instrucciones realizaron varias funciones de estado y control de la CPU. Todos ellos eran en realidad mnemónicos abreviados para instrucciones de E/S en el canal 63, el canal de E/S autorreferencial de la CPU.

Interrupciones y manejo de interrupciones.

Desde el punto de vista del hardware, el mecanismo de interrupción era relativamente simple, pero también menos flexible que las arquitecturas de CPU actuales. El backplane admitía una única línea de solicitud de interrupción, a la que se conectaban todos los dispositivos capaces de interrumpir. Cuando un dispositivo necesitaba solicitar una interrupción, generaba esta línea. La CPU tomó la interrupción tan pronto como completó la instrucción actual. Como se indicó anteriormente, se esperaba que un dispositivo elevara su indicador de E/S "hecho" cuando solicitaba una interrupción, y la convención era que el dispositivo borraría su solicitud de interrupción cuando la CPU ejecutara una instrucción de borrado de E/S en el canal del dispositivo. número.

La CPU esperaba que el sistema operativo colocara la dirección de su rutina de servicio de interrupción en la dirección de memoria 1. Cuando un dispositivo se interrumpía, la CPU realizaba un salto indirecto a través de la dirección 1, colocando la dirección de retorno en la dirección de memoria 0 y deshabilitando más interrupciones. El manejador de interrupciones luego realizaría una instrucción INTA para descubrir el número de canal del dispositivo que interrumpe. Esto funcionó generando una señal de "reconocimiento" en el backplane. La señal de reconocimiento se conectó en formato de cadena tipo margarita a lo largo del backplane, de modo que recorría cada placa del bus. Se esperaba que cualquier dispositivo que solicitara una interrupción bloqueara la propagación adicional de la señal de reconocimiento por el bus, de modo que si dos o más dispositivos tuvieran interrupciones pendientes simultáneamente, solo el primero vería la señal de reconocimiento. Luego, ese dispositivo respondió colocando su número de canal en las líneas de datos del bus. Esto significaba que, en el caso de solicitudes de interrupción simultáneas, el dispositivo que tenía prioridad estaba determinado por cuál estaba físicamente más cerca de la CPU en la caja de tarjetas.

Después de que se procesó la interrupción y la rutina de servicio envió al dispositivo un borrado de E/S, reanudó el procesamiento normal habilitando las interrupciones y luego regresando a través de un salto indirecto a través de la dirección de memoria 0. Para evitar que una interrupción pendiente se interrumpa inmediatamente antes En el salto de retorno (lo que provocaría que se sobrescribiera la dirección de retorno), la instrucción INTEN tenía un retraso de ciclo de instrucción. Cuando se ejecutaba, las interrupciones no se habilitarían hasta que se ejecutara la siguiente instrucción, que se esperaba que fuera la instrucción JMP@ 0.

La rutina de servicio de interrupciones del sistema operativo normalmente realizaba un salto indexado utilizando el número de canal recibido, para saltar a la rutina de manejo de interrupciones específica para el dispositivo. Hubo algunos dispositivos, en particular el circuito de detección de fallas de energía de la CPU, que no respondieron a la instrucción INTA. Si el INTA devolvía un resultado de cero, la rutina del servicio de interrupción tenía que sondear todos los dispositivos que no respondían al INTA utilizando las instrucciones SKPDZ/SKPDN para ver cuál interrumpía.

El sistema operativo podría gestionar de alguna manera el orden de las interrupciones configurando una máscara de interrupción utilizando la instrucción MSKO. Esto tenía como objetivo permitir que el sistema operativo determinara qué dispositivos podían interrumpir en un momento dado. Cuando se emitió esta instrucción, se transmitió una máscara de interrupción de 16 bits a todos los dispositivos en el backplane. Correspondía al dispositivo decidir qué significaba realmente la máscara para él; Por convención, se suponía que un dispositivo enmascarado no debía generar la línea de interrupción, pero la CPU no tenía medios para hacer cumplir esto. La mayoría de los dispositivos enmascarables permitían seleccionar el bit de máscara mediante un puente en el tablero. Había dispositivos que ignoraban por completo la máscara.

En los sistemas que tenían memoria de núcleo magnético (que conservaba su contenido sin energía), era posible recuperarse de un corte de energía. Un circuito de detección de falla de energía en la CPU emitió una interrupción cuando se detectó una pérdida de la energía principal que ingresaba a la computadora; A partir de este punto, la CPU tuvo un corto período de tiempo hasta que un capacitor en la fuente de alimentación perdió su carga y falló la alimentación a la CPU. Este fue tiempo suficiente para detener la E/S en progreso, emitiendo una instrucción IORST y luego guardar el contenido de los cuatro acumuladores y el bit de acarreo en la memoria. Cuando volviera la energía, si el interruptor de llave del panel frontal de la CPU estaba en la posición LOCK, la CPU se iniciaría y realizaría un salto indirecto a través de la dirección de memoria 2. Se esperaba que esta fuera la dirección de una rutina de servicio del sistema operativo que recargaría los acumuladores. y acarrear bit, y luego reanudar el procesamiento normal. Correspondía a la rutina de servicio descubrir cómo reiniciar las operaciones de E/S que fueron abortadas por el corte de energía.

Diseño del panel frontal

Como era la convención de la época, la mayoría de los modelos Nova proporcionaban una consola de panel frontal para controlar y monitorear las funciones de la CPU. Todos los modelos anteriores al Nova 3 se basaban en un diseño de panel frontal canónico, como se muestra en la foto del panel Nova 840 de arriba. El diseño contenía un interruptor de encendido con llave, dos filas de luces de visualización de datos y direcciones, una fila de interruptores de entrada de datos y una fila de interruptores de función que activaban varias funciones de la CPU cuando se presionaban. Las luces de dirección siempre mostraban el valor actual del contador del programa, en binario. Las lámparas de datos mostraban varios valores dependiendo de qué función de la CPU estaba activa en ese momento. A la izquierda de la lámpara de datos más a la izquierda, una lámpara adicional mostraba el valor actual del bit de acarreo. En la mayoría de los modelos, las lámparas eran lámparas incandescentes que estaban soldadas al panel; Reemplazar las lámparas quemadas era una pesadilla para los ingenieros de servicio de campo de Data General.

Cada uno de los conmutadores de datos controlaba el valor de un bit en un valor de 16 bits y, según la convención general de datos, estaban numerados del 0 al 15 de izquierda a derecha. Los interruptores de datos proporcionaban entrada a la CPU para diversas funciones y también podían ser leídos por un programa en ejecución utilizando la instrucción en lenguaje ensamblador READS. Para reducir el desorden del panel y ahorrar dinero, los interruptores de función se implementaron como interruptores momentáneos de dos vías. Cuando se levantaba la palanca de un interruptor de función, activaba la función cuyo nombre estaba impreso encima del interruptor en el panel; cuando se presionaba la palanca, se activaba la función cuyo nombre aparecía debajo del interruptor. La palanca del interruptor volvió a la posición neutral cuando se soltó.

Haciendo referencia a la foto del Nova 840, los primeros cuatro interruptores de la izquierda realizaron las funciones EXAMINAR y DEPÓSITO para los cuatro acumuladores. Al presionar EXAMINE en uno de estos, las lámparas de datos mostraron el valor actual del acumulador en binario. Al presionar DEPÓSITO se transfirió el valor binario representado por la configuración actual de los interruptores de datos al acumulador.

Yendo hacia la derecha, el siguiente interruptor fue el interruptor RESET/STOP. Al presionar DETENER la CPU se detuvo después de completar la instrucción actual. Al presionar RESET, la CPU se detuvo inmediatamente, se borraron varios registros internos de la CPU y se envió una señal de reinicio de E/S a todos los dispositivos conectados. El interruptor a la derecha era el interruptor INICIO/CONTINUAR. Al presionar CONTINUAR, la CPU reanudó la ejecución de la instrucción señalada actualmente por el contador del programa. Al presionar INICIO se transfirió el valor actualmente establecido en los interruptores de datos 1-15 al contador del programa y luego comenzó la ejecución desde allí.

Los dos interruptores siguientes proporcionaron acceso de lectura y escritura a la memoria desde el panel frontal. Al presionar EXAMINE se transfirió el valor establecido en los interruptores de datos 1-15 al contador del programa, se obtuvo el valor en la ubicación de memoria correspondiente y se mostró su valor en las lámparas de datos. Al presionar EXAMINE NEXT se incrementó el contador del programa y luego se realizó una operación de examen en esa ubicación de memoria, lo que permitió al usuario recorrer una serie de ubicaciones de memoria. Al presionar DEPÓSITO se escribió el valor contenido en los interruptores de datos en la ubicación de memoria señalada por el contador del programa. Al presionar DEPOSIT NEXT primero se incrementó el contador del programa y luego se depositó en la ubicación de memoria señalada.

La función INST STEP hizo que la CPU ejecutara una instrucción, en la ubicación actual del contador del programa, y ​​luego se detuviera. Dado que el contador del programa se incrementaría como parte de la ejecución de la instrucción, esto permitía al usuario avanzar un solo paso a través de un programa. MEMORY STEP, un nombre inapropiado, provocó que la CPU ejecutara un único ciclo de reloj y se detuviera. Esto era de poca utilidad para los usuarios y generalmente solo lo usaba el personal de servicio de campo para diagnósticos.

CARGA DE PROGRAMA era el mecanismo utilizado habitualmente para iniciar un Nova. Cuando se activó este interruptor, provocó que la ROM de arranque de 32 palabras se asignara a las primeras 32 palabras de la memoria, estableciera el contador del programa en 0 e iniciara la CPU. La ROM de arranque contenía un código que leía 256 palabras (512 bytes) de código de un dispositivo de E/S seleccionado en la memoria y luego transfería el control al código leído. Los conmutadores de datos 8-15 se utilizaron para indicarle a la ROM de arranque desde qué canal de E/S arrancar. Si el interruptor 0 estaba apagado, la ROM de arranque asumiría que el dispositivo era un dispositivo sondeado (por ejemplo, el lector de cintas de papel) y ejecutaría un bucle de entrada sondeado hasta que se hubieran leído 512 bytes. Si el interruptor 0 estaba activado, la ROM de arranque asumió que el dispositivo era un dispositivo compatible con DMA e inició una transferencia de datos DMA. La ROM de arranque no fue lo suficientemente inteligente como para colocar el dispositivo antes de iniciar la transferencia. Esto fue un problema al reiniciar después de un bloqueo; si el dispositivo de arranque era una unidad de disco, sus cabezas probablemente se habían dejado en un cilindro aleatorio. Tuvieron que reposicionarse en el cilindro 0, donde RDOS escribió el bloque de arranque de primer nivel, para que la secuencia de arranque funcionara. Convencionalmente, esto se hacía ciclando la unidad a través de su secuencia de carga, pero los usuarios que se sentían frustrados con el tiempo de espera (hasta 5 minutos dependiendo del modelo de unidad) aprendieron cómo ingresar desde el panel frontal un código de E/S de "recalibración" de la unidad. y pasar la CPU a través de él, una operación que le tomó a un usuario experimentado solo unos segundos.

El interruptor de encendido era un interruptor con llave de 3 vías con posiciones marcadas como APAGADO, ENCENDIDO y BLOQUEADO. En la posición APAGADO se cortó toda la energía de la CPU. Al girar la llave a ON se aplicó energía a la CPU. Sin embargo, a diferencia de las CPU actuales, la CPU no se inicia automáticamente cuando se aplica energía; el usuario tenía que usar PROGRAM LOAD o algún otro método para iniciar la CPU e iniciar la secuencia de arranque. Al girar el interruptor a LOCK se desactivan los interruptores de función del panel frontal; Al girar el interruptor a LOCK y quitar la llave, el usuario podría hacer que la CPU sea resistente a la manipulación. En sistemas con memoria de núcleo magnético, la posición LOCK también habilita la función de recuperación automática de falla de energía. La llave se puede quitar en las posiciones APAGADO o BLOQUEADO.

Actuación

El Nova 1200 ejecutó instrucciones de acceso a la memoria central (LDA y STA) en 2,55 microsegundos (μs). El uso de memoria de sólo lectura ahorró 0,4 μs. Las instrucciones del acumulador (ADD, SUB, COM, NEG, etc.) tardaron 1,55 μs, MUL 2,55 μs, DIV 3,75 μs, ISZ 3,15-4,5 μs. [32] En el último Eclipse MV/6000, LDA y STA tomaron 0,44 μs, ADD, etc. tomaron 0,33 μs, MUL 2,2 μs, DIV 3,19 μs, ISZ 1,32 μs, FAD 5,17 μs, FMMD 11,66 μs. [33]

Ejemplos de lenguaje ensamblador

programa hola mundo

Este es un ejemplo de programación mínima en lenguaje ensamblador Nova. Está diseñado para ejecutarse bajo RDOS e imprime la cadena " Hola, mundo". ”en la consola.

 ; un programa de "hola, mundo" para Nova que ejecuta RDOS ; utiliza la llamada al sistema PCHAR .titl hola .nrel .ent inicio       inicio: dochar: lda 0 , @ pmsg ; cargar ac0 con el siguiente carácter, mov# 0 , 0 , snr ; prueba ac0; omitir si es distinto de cero (no cargar el resultado) jmp done .systm .pchar ; imprimir el primer jmp er ; omitido si está bien movs 0 , 0 ; intercambiar bytes .systm .pchar ; imprimir el segundo jmp er ; omitido si está bien isz pmsg ; apuntar al siguiente carácter jmp dochar ; dar la vuelta de nuevo                               hecho: .system ; salida normal .rtn er: .systm ; error salir .ertn detener         pmsj: . + 1 ; puntero al primer carácter de la cadena ; los bytes de nota se empaquetan de derecha a izquierda de forma predeterminada ; <15><12> denota un par CR LF. .txt / Hola mundo . < 15 >< 12 >/ 0 ; marcar la palabra para finalizar la cadena          .fin inicio 

multiplicación de 16 bits

Los modelos básicos del Nova venían sin hardware incorporado con capacidad de multiplicar y dividir, para mantener los precios competitivos. La siguiente rutina multiplica dos palabras de 16 bits para producir un resultado de palabra de 16 bits (se ignora el desbordamiento). Demuestra el uso combinado de operación, cambio y prueba (saltar) de ALU. Tenga en cuenta que cuando esta rutina es llamada por jsr, AC3 mantiene la dirección del remitente . Esto lo utiliza la instrucción de devolución jmp 0,3. Una forma idiomática de borrar un acumulador es sub 0,0. Se pueden organizar otras instrucciones individuales para cargar un conjunto específico de constantes útiles (por ejemplo, -2, -1 o +1).

 mpy: ; multiplica AC0 <- AC1 * AC2, por Toby Thain sub 0 , 0 ; resultado claro mbit: movzr 1 , 1 , szc ; multiplicador de desplazamiento, prueba lsb suma 2 , 0 ; 1: suma multiplicando movzl 2 , 2 , szr ; cambie y pruebe si hay cero jmp mbit ; no es cero, haz otro bit jmp 0 , 3 ; devolver           

Acumulador de impresión binaria

La siguiente rutina imprime el valor de AC1 como un número binario de 16 dígitos en la consola RDOS. Revela más peculiaridades del conjunto de instrucciones de Nova. Por ejemplo, no hay ninguna instrucción para cargar un valor "inmediato" arbitrario en un acumulador (aunque las instrucciones de referencia de memoria codifican dicho valor para formar una dirección efectiva). Los acumuladores generalmente deben cargarse desde ubicaciones de memoria inicializadas (p. ej. n16). Otras máquinas contemporáneas como la PDP-11 , y prácticamente todas las arquitecturas modernas, permiten cargas inmediatas, aunque muchas como ARM restringen el rango de valores que se pueden cargar de forma inmediata.

Debido a que la macro de llamada RDOS .systmimplementa a jsr, la dirección de retorno de la función sobrescribe AC3 .pchar. Por lo tanto, se necesita una ubicación temporal para preservar la dirección del remitente de la persona que llama a esta función. Para una rutina recursiva o reentrante, se debe utilizar en su lugar una pila, hardware si está disponible y software si no. La instrucción de retorno jmp @ retrnexplota el modo de direccionamiento indirecto del Nova para cargar la PC de retorno.

Las definiciones de constantes al final muestran dos características del ensamblador: la base del ensamblador es octal por defecto ( 20= dieciséis) y las constantes de caracteres se pueden codificar como, por ejemplo "0, .

 pbin: ; imprima AC1 en la consola como 16 dígitos binarios, por Toby Thain  sta 3 , regresar ; guardar dirección de retorno lda 2 , n16 ; configurar el bucle del contador de bits: lda 0 , chr0 ; cargar ASCII '0' movzl 1 , 1 , szc ; obtener el siguiente bit en carry inc 0 , 0 ; pasar a '1' .systm .pchar ; AC0-2 error jmp conservado ; si el error incluye 2 , 2 , szr ; bucle jmp del contador de golpes ; bucle de nuevo si no es cero lda 0 , spc ; generar un espacio .systm .pchar jmp err ; si error jmp @ retrn                                      spc: " ;ese es un espacio chr0: "0 n16: -20 retrn: 0        

Aplicaciones

La Canadian Broadcasting Corporation de Montreal utilizó el Nova 1200 para la automatización de la reproducción de canales hasta finales de los años 1980. Luego fue reemplazado por unidades Nova 4 reacondicionadas y estuvieron en uso hasta mediados de la década de 1990.

Ver también

Notas

  1. ^ Esto probablemente fue una reacción a los problemas con el PDP-6 , que usaba placas grandes y tenía tasas de falla significativas. El PDP-10 , esencialmente un PDP-6 rediseñado, utiliza tarjetas "flip-chip" más pequeñas.

Referencias

Citas

  1. ^ "Museo de Historia de la Computación - Data General Corporation (DG) - La mejor computadora pequeña del mundo".
  2. ^ Hola, Tony; Hola, Antonio; Papay, Gyuri (2014). El universo informático: un viaje a través de una revolución. Prensa de la Universidad de Cambridge. pag. 165.ISBN 9780521766456.
  3. ^ ab Hendrie 2002, pág. 40.
  4. ^ ABCDE Supnik 2004.
  5. ^ abcd Hendrie 2002, pag. 48.
  6. ^ Hendrie 2002, pag. 42.
  7. ^ "Cuando una Minicomputadora se convierte en Micro: la DGC microNOVA mN601 y 602". El Museo CPU Shack . 21 de noviembre de 2014.
  8. ^ Hendrie 2002, pag. 43.
  9. ^ Hendrie 2002, pag. 43-44.
  10. ^ abc Gianluca G. (2017). "Historia de ALU 74181 en minicomputadoras comerciales".
  11. ^ Hendrie 2002, pag. 49.
  12. ^ "La mejor computadora pequeña del mundo" (PDF) . Noviembre de 1968. Archivado (PDF) desde el original el 11 de diciembre de 2019.
  13. ^ ab "Frustrado en DEC, prosperando en Data General". Museo de Historia de la Computación .
  14. ^ Jones, Douglas. "La Corporación de Equipos Digitales PDP-8". Departamento de Ciencias de la Computación de la Universidad de Iowa .
  15. ^ Hendrie 2002, pag. 50.
  16. ^ ab "SÚPER NOVA" (PDF) . Museo de Historia de la Computación . 1970. Archivado (PDF) desde el original el 11 de diciembre de 2019.
  17. ^ "El negocio que el tiempo olvidó: Data General desapareció. ¿Pero eso convierte a su fundador en un fracaso?". dinero.cnn.com . 1 de abril de 2003 . Consultado el 27 de julio de 2016 .
  18. ^ ab Hendrie 2002, pág. 53.
  19. ^ "Historial general de datos/antecedentes". Universidad de Clemson .
  20. ^ Hendrie 2002, pag. 54.
  21. ^ Hendrie 2002, pag. 44.
  22. ^ abcd Hendrie 2002, pag. 55.
  23. ^ Hendrie 2002, pag. 58.
  24. ^ Hendrie 2002, pag. 60.
  25. ^ ab Nova 4/S y 4/X (PDF) . Serie de referencia para ingenieros de campo. Datos generales . Junio ​​de 1981.
  26. ^ ab microNOVA . Datos generales. 1977.
  27. ^ "Enterprise: una computadora empresarial de 16 bits por solo £ 2300". Mundo de las computadoras personales . Octubre de 1983.
  28. ^ Charles P. Thacker; Edward M. McCreight (diciembre de 1974). "Alto: un sistema informático personal" (PDF) . pag. 13. Archivado (PDF) desde el original el 6 de junio de 2011.
  29. ^ Tom Owad (2005). Creación de réplicas de Apple I: regreso al garaje . pag. xxi. ISBN 1-931836-40-X.
  30. ^ "Restauración general de datos". Datos Generales Nova, Eclipse, MV y AV . Consultado el 20 de agosto de 2021 .
  31. ^ "Las minicomputadoras generales de datos grandes y hermosas". www.chookfest.net . Consultado el 20 de agosto de 2021 .
  32. ^ Manual técnico Nova 1200, Datos generales 015-000002, 1971, p.1-4
  33. ^ Principios de funcionamiento de Eclipse MV/6000, datos generales 014-000648, 1980, aplicación. F

Bibliografía

enlaces externos