

La Nova es una serie de minicomputadoras de 16 bits lanzadas por la compañía estadounidense Data General . La familia Nova fue muy popular en la década de 1970 y llegó a vender decenas de miles de unidades.
El primer modelo, conocido simplemente como "Nova", se lanzó en 1969. [ 1 ] El Nova venía en una única carcasa de montaje en rack de 3U y tenía suficiente potencia de cálculo para realizar la mayoría de las tareas sencillas. El Nova se popularizó en laboratorios científicos de todo el mundo. Al año siguiente le siguió el SuperNOVA , que era aproximadamente cuatro veces más rápido, convirtiéndose en el miniordenador más rápido durante varios años.
Lanzada durante un período de rápido progreso en el diseño de circuitos integrados (o microchips), la línea experimentó varias actualizaciones en los siguientes cinco años, introduciendo los modelos 800 y 1200, el Nova 2, el Nova 3 y, finalmente, el Nova 4. También se presentó una implementación de un solo chip, el microNOVA, en 1977, pero no tuvo una gran acogida, ya que el mercado se decantó por nuevos diseños de microprocesadores. Fairchild Semiconductor también presentó una versión con microprocesador del Nova en 1977, el Fairchild 9440 , pero su uso en el mercado también fue limitado.
La línea Nova fue sucedida por la Data General Eclipse , que era similar en la mayoría de los aspectos, pero añadía compatibilidad con memoria virtual y otras características necesarias para los sistemas operativos modernos . Una actualización a 32 bits de la Eclipse dio como resultado la serie Eclipse MV de la década de 1980.
Historia
Edson de Castro y el PDP-X
Edson de Castro fue el gerente de producto de la pionera Digital Equipment Corporation (DEC) PDP-8 , una computadora de 12 bits ampliamente conocida como la primera minicomputadora verdadera. [ 2 ] También lideró el diseño de la versión mejorada PDP-8/I, que utilizaba circuitos integrados primitivos en lugar de transistores individuales. [ 3 ]
During the PDP-8/I process, de Castro had been visiting circuit board manufacturers who were making rapid advances in the complexity of the boards they could assemble. de Castro concluded that the 8/I could be produced using fully automated assembly on large boards, which would have been impossible only a year earlier. Others within DEC had become used to the smaller boards used in earlier machines and were concerned about tracking down problems when there were many components on a single board.[a] For the 8/I, the decision was made to stay with small boards, using the new "flip-chip" packaging for a modest improvement in density.[3]
During the period when the PDP-8 was being developed, the introduction of ASCII and its major update in 1967 led to a new generation of designs with word lengths that were multiples of 8 bits rather than multiples of 6 bits as in most previous designs. This led to mid-range designs working at 16-bit word lengths instead of DEC's current 12- and 18-bit lineups. de Castro was convinced that it was possible to improve upon the PDP-8 by building a 16-bit minicomputer CPU on a single 15-inch square board.[4][5]
In 1967, de Castro began a new design effort known as "PDP-X" which included several advanced features. Among these was a single underlying design that could be used to build 8-, 16-, and 32-bit platforms.[6] This progressed to the point of producing several detailed architecture documents. Ken Olsen was not supportive of this project, feeling it did not offer sufficient advantages over the 12-bit PDP-8 and the 18-bit PDP-9. It was eventually canceled in the spring of 1968.[4]
Design
Cancelation of the PDP-X prompted de Castro to consider leaving DEC to build a system on his own. He was not alone; in late 1967 a number of like-minded engineers formed a group to consider such a machine. The group included Pat Green, a divisional manager; Richard Sogge, another hardware engineer; and Henry Burkhardt III, a software engineer.[7] In contrast to the PDP-X, the new effort focused on a single machine that could be brought to market quickly, as de Castro felt the PDP-X concept was far too ambitious for a small startup company.[8]
Discussing it with the others at DEC, the initial concept led to an 8-bit machine which would be less costly to implement.[9] The group began talking with Herbert Richman, a salesman for Fairchild Semiconductor who knew the others through his contacts with DEC. At the time, Fairchild was battling with Texas Instruments and Signetics in the rapidly growing TTL market and were introducing new fabs that allowed more complex designs. Fairchild's latest 9300 series allowed up to 96 gates per chip, and they had used this to implement a number of 4-bit chips like binary counters and shift registers.[10]
Using these ICs reduced the total IC count needed to implement a complete arithmetic logic unit (ALU), the core mathematical component of a CPU, allowing the expansion from an 8-bit design to 16-bit. This did require the expansion of the CPU from a single 15 by 15 inches (38 cm × 38 cm)printed circuit board to two, but such a design would still be significantly cheaper to produce than the PDP-8/I while still being more powerful and ASCII-based. A third board held the input/output circuitry and a complete system typically included another board with 4 kB of random-access memory. A complete four-card system fit in a single rackmount chassis.[5]
The boards were designed so they could be connected together using a printed circuit backplane, with minimal manual wiring, allowing all the boards to be built in an automated fashion. This greatly reduced costs over the PDP-8/I, which consisted of many smaller boards that had to be wired together at the backplane, which was itself connected together using wire wrap. The larger-board construction also made the Nova more reliable, which made it especially attractive for industrial or lab settings.[5]
The new design used a simple load–store architecture[4] which would reemerge in the RISC designs in the 1980s. Because the complexity of a flip-flop was being rapidly reduced as they were implemented in chips, the design offset the lack of addressing modes of the load–store design by adding four general-purpose accumulators, instead of the single register that would be found in similar low-cost offerings like the PDP series.[4]
Introduction
A finales de 1967, Richman presentó al grupo al abogado neoyorquino Fred Adler, quien comenzó a buscar diversas fuentes de financiación para capital semilla. En 1968, Adler había cerrado un importante acuerdo de financiación con un consorcio de fondos de capital riesgo del área de Boston, que accedió a proporcionar una inversión inicial de 400 000 dólares estadounidenses, con otros 400 000 dólares disponibles para la puesta en marcha de la producción. De Castro, Burkhart y Sogge dejaron 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 incorporó hasta que el producto estuvo en pleno funcionamiento a finales de ese año. [ 5 ]
El trabajo en el primer sistema duró aproximadamente nueve meses, y los primeros esfuerzos de venta comenzaron en noviembre de ese año. Tuvieron algo 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 llevar una unidad funcional a San Francisco donde ejecutaron una versión de Spacewar!. [ 11 ] DG lanzó oficialmente el Nova en 1969 a un precio base de US$3,995 (equivalente a US$35,074 en 2025) , anunciándolo como "la mejor computadora pequeña del mundo". [ 12 ] El modelo básico no era muy útil de fábrica, y agregar8 kW (16 kB ) RAM en forma de memoria de núcleo normalmente elevaba el precio a US$7,995 . [ 13 ] En contraste, un PDP-8/I con4 kW (6 kB ) tenía un precio de US$12.800 . [ 14 ]
La primera venta se realizó a una universidad de Texas, y el equipo fabricó a mano un ejemplar que se envió en febrero. Sin embargo, esto ocurrió en medio de una huelga en la industria aérea y la máquina nunca llegó. Enviaron un segundo ejemplar, que llegó rápidamente, ya que la huelga había terminado para entonces, y en mayo finalmente se entregó también el original. [ 15 ]
El sistema fue un éxito desde el principio, vendiéndose la unidad número 100 a los seis meses [ 16 ] y la número 500 a los 15 meses [ 13 ] . Las ventas se aceleraron con la introducción de nuevas versiones, y en 1975 la empresa tenía ventas anuales de 100 millones de dólares estadounidenses [ 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. Para entonces, varias otras compañías también estaban considerando introducir diseños de 16 bits. Olsen decidió que estos representaban una amenaza tanto para su línea de 18 bits como para la de 12 bits, y comenzó un nuevo proyecto de diseño de 16 bits. [ 18 ] Este se materializó 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 intensamente en el mercado. [ 4 ]
Los rumores sobre el nuevo sistema de DEC llegaron a DG poco después de que comenzara el envío del Nova. En la primavera de 1970, contrataron a un nuevo diseñador, Larry Seligman, para adelantarse a cualquier posible máquina en desarrollo. Dos cambios importantes habían ocurrido desde el diseño del Nova: uno fue que Signetics había presentado el 8260, un circuito integrado de 4 bits que combinaba un sumador, una compuerta XNOR y una compuerta AND, lo que significaba que la cantidad de chips necesarios para implementar la lógica básica se redujo aproximadamente a la tercera parte. Otro fue que Intel estaba promocionando agresivamente las memorias basadas en semiconductores, prometiendo 1024 bits en un solo chip y funcionando a velocidades mucho mayores que la memoria de núcleo. [ 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, haciendo que el nuevo diseño fuera cuatro veces más rápido que el original. Además, se utilizó una nueva memoria de núcleo más pequeña que mejoró el tiempo de ciclo de los 1200 ns del original a 800 ns, ofreciendo una mejora adicional de 1/3 . El rendimiento podría mejorarse aún más reemplazando el núcleo con memoria de solo lectura ; al carecer del ciclo de lectura-escritura del núcleo, se podría acceder a ella en 300 ns para un aumento drástico del rendimiento. [ 16 ]
La máquina resultante, conocida como SuperNOVA , se lanzó en 1970. Aunque los modelos iniciales todavía usaban núcleos, todo el diseño se basaba en la premisa de que estarían disponibles memorias semiconductoras más rápidas y la plataforma podría aprovecharlas al máximo. Esto se presentó más tarde ese mismo año como SuperNOVA SC , que incorporaba memoria semiconductora (SC). La memoria de rendimiento mucho mayor permitió aumentar aún más la velocidad de la CPU, que era síncrona con la memoria, 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 mucho, por lo que no se utilizó ampliamente. [ 20 ]
1200 y 800

Como demostración del poder de su tecnología de matriz de puertas Micromatrix , en 1968 Fairchild creó el prototipo 4711, una ALU de 4 bits de un solo chip. [ 10 ] [ 21 ] El diseño nunca se concibió para la producción en masa y su fabricación era bastante costosa. La introducción del Signetics 8260 en 1969 los obligó a cambiar de estrategia; tanto Texas Instruments como Fairchild introdujeron sus propias ALU de 4 bits en 1970, la 74181 y la 9341, respectivamente. A diferencia de la 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 tanto para el Nova básico como para el SuperNOVA. Surgió un nuevo concepto en el que un solo chasis podría albergar cualquiera de las dos 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 la 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 ustedes. Estaré en sus oficinas dentro de una semana para hablarles de ello». [ 22 ] Fue contratado de inmediato. Gruner se hizo cargo de la máquina de bajo coste, mientras que Seligman diseñó una versión de alto rendimiento similar. [ 22 ]
El modelo de bajo costo de Gruner se lanzó en 1970 como el Nova 1200 , donde el 1200 hacía referencia al uso de la memoria de núcleo de 1200 ns del Nova original. Presentaba una ALU de 4 bits basada en un solo chip 74181, y por lo tanto era esencialmente un Nova reempaquetado. El SuperNOVA de cuatro ALU reempaquetado de Seligman se lanzó en 1971 como el Nova 800 , lo que resultó en una nomenclatura algo confusa donde el modelo con número más bajo tiene un rendimiento superior. [ 22 ] Ambos modelos se ofrecieron en una variedad de carcasas, el 1200 con siete ranuras, el 1210 con cuatro y el 1220 con catorce.
Modelos posteriores
By this time, the PDP-11 was finally shipping. It offered a much richer instruction set architecture than the deliberately simple one in the Nova. Continuing improvement in IC designs, and especially their price–performance ratio, was eroding the value of the original simplified instructions. Seligman was put in charge of designing a new machine that would be compatible with the Nova while offering a much richer environment for those who wanted it. This concept shipped as the Data General Eclipse series, which offered the ability to add additional circuitry to tailor the instruction set for scientific or data processing workloads. The Eclipse was successful in competing with the PDP-11 at the higher end of the market.[23]
Around the same time, rumors of a new 32-bit machine from DEC began to surface. DG decided they had to have a similar product, and Gruner was put in charge of what became the Fountainhead Project. Given the scope of the project, they agreed that the entire effort should be handled off-site, and Gruner selected a location at Research Triangle Park in North Carolina. This design became very complex[24] and was ultimately canceled years later.
While these efforts were underway, work on the Nova line continued.
840
The 840, first offered in 1973, also included a new paged memory system allowing for addresses of up to 17-bits. An index offset the base address into the larger 128 kword memory. Actually installing this much memory required considerable space; the 840 shipped in a large 14-slot case.
Nova 2
The next version was the Nova 2, with the first versions shipping in 1973. The Nova 2 was essentially a simplified version of the earlier machines as increasing chip densities allowed the CPU to be reduced in size. While the SuperNOVA used three 15×15" boards to implement the CPU and its memory, the Nova 2 fitted all of this onto a single board. ROM was used to store the boot code, which was then copied into core when the "program load" switch was flipped. Versions were available with four ("2/4"), seven and ten ("2/10") slots.
Nova 3

The Nova 3 of 1975 added two more registers, used to control access to a built-in stack. The processor was also re-implemented using TTL components, further increasing the performance of the system. The Nova 3 was offered in four-slot (the Nova 3/4) and twelve-slot (the Nova 3/12) versions.
Nova 4
Parece ser que Data General originalmente pretendía que la Nova 3 fuera la última de su línea, planeando reemplazarla con las máquinas Eclipse posteriores. Sin embargo, la continua demanda llevó a la introducción de la máquina Nova 4 en 1978, esta vez basada en cuatro ALU de división de bits AMD Am2901 . Esta máquina fue diseñada desde el principio para ser tanto la Nova 4 como la Eclipse S/140, con un microcódigo diferente para cada una. 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 hasta 128 kwords de memoria mediante conmutación de bancos . A diferencia de las máquinas anteriores, la Nova 4 no incluía una consola en el panel frontal , sino una ROM con código máquina que permitía a un terminal emular una consola cuando fuera necesario. [ 25 ] : 87
Existían 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 kwords). El Nova 4/S y el 4/X utilizaban placas de memoria separadas. El Nova 4/X tenía habilitada la unidad de gestión de memoria (MMU) integrada para permitir el uso de hasta 128 kwords de memoria. La MMU también estaba instalada en el Nova 4/S, pero estaba deshabilitada por firmware . Tanto el 4/S como el 4/X incluían un "prefetcher" para aumentar el rendimiento al obtener hasta 11 instrucciones de la memoria antes de que fueran necesarias. [ 25 ] : 5
microNOVA

Data General también produjo una serie de implementaciones de un solo chip microNOVA del procesador Nova. Para que cupiera en un chip DIP ( Dual In-line Package ) 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ó como CPU para otros usuarios, como un chipset completo para quienes querían implementar una computadora, como una computadora completa 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 chipset a un único VLSI . Este se ofreció en dos máquinas, el microNOVA MP/100 y el microNOVA MP/200 de mayor tamaño .
El microNOVA fue posteriormente rediseñado con un monitor en una carcasa estilo PC con dos disqueteras como Enterprise . Enterprise se lanzó en 1981, ejecutando RDOS , pero la introducción del IBM PC ese mismo año hizo que la mayoría de las demás máquinas pasaran desapercibidas. [ 27 ]
Legado
El Nova influyó en el diseño de los ordenadores Xerox Alto (1973) [ 28 ] y Apple I (1976) [ 29 ] , y su arquitectura fue la base de la serie Computervision CGP (Computervision Graphics Processor). El diseño externo del Nova 2 inspiró el panel frontal del microordenador MITS Altair (1975) , según Ed Roberts , uno de sus diseñadores.
Data General continuó el éxito del Nova original con una serie de diseños más rápidos. Posteriormente, se presentó la familia de sistemas Eclipse con un conjunto de instrucciones extendido y compatible con versiones anteriores, y la serie MV extendió aún más el Eclipse a una arquitectura de 32 bits para competir con el DEC VAX . El desarrollo de la serie MV quedó documentado en el popular libro de Tracy Kidder de 1981, The Soul of a New Machine . Data General evolucionaría más tarde hasta convertirse en un proveedor de servidores y sistemas de almacenamiento basados en procesadores Intel, siendo finalmente adquirida por EMC .
Existe un grupo diverso pero entusiasta de personas en todo el mundo que restauran y preservan sistemas Data General originales de 16 bits. [ 30 ] [ 31 ]
Descripción técnica
Diseño de procesadores
A diferencia del PDP-8 , el Nova tenía una arquitectura de carga y almacenamiento . Contaba con cuatro registros acumuladores de 16 bits , dos de los cuales (2 y 3) podían utilizarse como registros de índice . Tenía un contador de programa de 15 bits y un registro de acarreo de un bit . Al igual que en el PDP-8, el direccionamiento de página actual + cero era fundamental. No disponía de registro de pila , pero los diseños posteriores de Eclipse utilizarían una dirección de memoria de hardware dedicada para esta función.
The original Nova processed math serially in 4-bit packets, using a single Texas Instruments 7483 adder and additional circuitry to perform other operations.[32] A year after its introduction, the SuperNova included a full 16-bit bitsliced parallel adder using four Signetics 8260 ICs. The Nova 1200 also processed math serially in 4-bit packets, using a single 74181ALU; the Nova 800 was a repackaged SuperNova.
Future versions of the Nova added a stack unit and hardware multiply/divide.
The Nova 4 / Eclipse S/140 was based on four AMD 2901 bit-slice ALUs, with microcode in read-only memory, and was the first Nova designed for DRAM main memory only, with no provision for magnetic-core memory.
Memory and I/O
The smallest unit of addressable and writable memory is the 16-bit word; byte addressing is not supported. The first models were available with 8 Kwords of magnetic-core memory as an option, one that practically everyone had to buy, bringing the system cost up to $7,995.
This core memory board was organized in planar fashion as four groups of four banks, each bank carrying two sets of core in a 64 by 64 matrix; thus there were 64 x 64 = 4096 bits per set, x 2 sets giving 8,192 bits, x 4 banks giving 32,768 bits, x 4 groups giving a total of 131,072 bits, and this divided by the machine word size of 16 bits gave 8,192 words of memory.
The core on this 8K word memory board occupied a centrally located "board-on-a-board", 5.25" wide by 6.125" high, and was covered by a protective plate. It was surrounded by the necessary support driver read-write-rewrite circuitry. All of the core and the corresponding support electronics fit onto a single standard 15 x 15-inch (380 mm) board. Up to 32K of such core RAM could be supported in one external expansion box. SemiconductorROM was already available at the time, and RAM-less systems (i.e. with ROM only) became popular in many industrial settings. The original Nova machines ran at approximately 200 kHz, but its SuperNova was designed to run at up to 3 MHz when used with special semiconductor main memory.
The standardized backplane and I/O signals created a simple, efficient I/O design that made interfacing programmed I/O and Data Channel devices to the Nova simple compared to competing machines. In addition to its dedicated I/O bus structure, the Nova backplane had wire wrap pins that could be used for non-standard connectors or other special purposes.
Programming model
The instruction format could be broadly categorized into one of three functions: 1) register-to-register manipulation, 2) memory reference, and 3) input/output. Each instruction was contained in one word. The register-to-register manipulation was almost RISC-like in its bit-efficiency; and an instruction that manipulated register data could also perform tests, shifts and even elect to discard the result. Hardware options included an integer multiply and divide unit, a floating-point unit (single and double precision), and memory management.

The earliest Nova came with a BASIC interpreter on punched tape. As the product grew, Data General developed many languages for the Nova computers, running under a range of consistent operating systems. FORTRAN IV, ALGOL, Extended BASIC, Data General Business Basic, Interactive COBOL, and several assemblers were available from Data General. Third-party vendors and the user community expanded the offerings with Forth, Lisp, BCPL, C, ALGOL, and other proprietary versions of COBOL and BASIC.
Instruction set
The machine instructions implemented below are the common set implemented by all of the Nova series processors. Specific models often implemented additional instructions, and some instructions were provided by optional hardware.
Arithmetic instructions
All arithmetic instructions operated between accumulators. For operations requiring two operands, one was taken from the source accumulator, and one from the destination accumulator, and the result was deposited in the destination accumulator. For single-operand operations, the operand was taken from the source register and the result replaced the destination register. For all single-operand opcodes, it was permissible for the source and destination accumulators to be the same, and the operation functioned as expected.
All arithmetic instructions included a "no-load" bit which, when set, suppressed the transfer of the result to the destination register; this was used in conjunction with the test options to perform a test without losing the existing contents of the destination register. In assembly language, adding a '#' to the opcode set the no-load bit.
The CPU contained a single-bit register called the carry bit, which after an arithmetic operation would contain the carry out of the most significant bit. The carry bit could be set to a desired value prior to performing the operation using a two-bit field in the instruction. The bit could be set, cleared, or complemented prior to performing the instruction. In assembly language, these options were specified by adding a letter to the opcode: 'O' — set the carry bit; 'Z' — clear the carry bit, 'C' — complement the carry bit, nothing — leave the carry bit alone. If the no-load bit was also specified, the specified carry value would be used for the computation, but the actual carry register would remain unaltered.
All arithmetic instructions included a two-bit field which could be used to specify a shift option, which would be applied to the result before it was loaded into the destination register. A single-bit left or right shift could be specified, or the two bytes of the result could be swapped. Shifts were 17-bit circular, with the carry bit "to the left" of the most significant bit. In other words, when a left shift was performed, the most significant bit of the result was shifted into the carry bit, and the previous contents of the carry bit were shifted into the least significant bit of the result. Byte swaps did not affect the carry bit. In assembly language, these options were specified by adding a letter to the opcode: 'L' — shift left; 'R' — shift right, 'S' — swap bytes; nothing — do not perform a shift or swap.
All arithmetic instructions included a three-bit field that could specify a test which was to be applied to the result of the operation. If the test evaluated to true, the next instruction in line was skipped. In assembly language, the test option was specified as a third operand to the instruction. The available tests were:
- SZR — skip on zero result
- SNR — skip on nonzero result
- SZC — skip on zero carry
- SNC — skip on nonzero carry
- SBN — skip if both carry and result are nonzero
- SEZ — skip if either carry or result, or both, is zero
- SKP — always skip
- Nothing — never skip
The actual arithmetic instructions were:
- MOV — move the contents of the source accumulator to the destination accumulator
- COM — move the bitwise complement of the source accumulator to the destination accumulator
- ADD — add source accumulator to destination accumulator
- ADC — take the bitwise complement of the source accumulator and add it to the destination accumulator
- NEG — move the negative of the source accumulator to the destination accumulator
- SUB — subtract the contents source accumulator from the destination accumulator
- INC — suma 1 al contenido del acumulador de origen y pasa al acumulador de destino.
- AND : realiza la operación AND bit a bit de los dos acumuladores y coloca el resultado en el acumulador de destino.
Un ejemplo de instrucciones aritméticas, con todas las opciones utilizadas, es:
ADDZR# 0 , 2 , SNCEsto se decodifica como: borrar el bit de acarreo; sumar el contenido de AC2 (acumulador 2) a AC0; desplazar circularmente el resultado un bit a la derecha; comprobar si el bit de acarreo está activado y, de ser así, saltarse la siguiente instrucción. Descartar el resultado tras la comprobación. En resumen, esto suma dos números y comprueba si el resultado es par o impar.
Instrucciones de referencia de memoria
El conjunto de instrucciones 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 comprobaban el contenido de una ubicación de memoria. Todas las instrucciones de referencia a memoria contenían un campo de dirección de ocho bits y un campo de dos bits que especificaba el modo de direccionamiento de memoria. Los cuatro modos eran:
- Modo 0: direccionamiento absoluto. El contenido del campo de dirección de la instrucción se rellena con ceros a la izquierda y se utiliza como dirección de destino.
- Modo 1: direccionamiento relativo. El contenido del campo de dirección de la instrucción se extiende hacia la izquierda y se suma al valor actual del contador de programa (que, cuando se ejecuta la instrucción, apunta a la siguiente). El resultado se utiliza como dirección de destino.
- Modo 2: direccionamiento indexado. El contenido del campo de dirección de la instrucción se extiende hacia la izquierda y se suma al valor actual del acumulador 2. El resultado se utiliza como dirección de destino.
- Modo 3: direccionamiento indexado. El contenido del campo de dirección de la instrucción se extiende hacia la izquierda y se suma al valor actual del acumulador 3. El resultado se utiliza como dirección de destino.
Obviamente, el modo 0 solo podía acceder a las primeras 256 palabras de memoria, dado el campo de dirección de ocho bits. Esta porción de memoria se denominaba "página cero". Las palabras de memoria de la página cero eran muy valiosas para los programadores de lenguaje ensamblador de Nova debido a su escaso número; solo se podía acceder a las ubicaciones de la página cero desde cualquier parte del programa sin recurrir al direccionamiento indexado, que requería ocupar el acumulador 2 o 3 para usarlo como registro de índice. En lenguaje ensamblador, una .ZRELdirectiva hacía que el ensamblador colocara las instrucciones y palabras de datos que la seguían en la página cero; una .NRELdirectiva colocaba las siguientes instrucciones y palabras de datos en la memoria "normal". Los modelos Nova posteriores añadieron instrucciones con campos de direccionamiento extendidos, lo que superó esta dificultad (aunque con una penalización en el rendimiento).
The assembler computed relative offsets for mode 1 automatically, although it was also possible to write it explicitly in the source. If a memory reference instruction referenced a memory address in .NREL space but no mode specifier, mode 1 was assumed and the assembler calculated the offset between the current instruction and the referenced location, and placed this in the instruction's address field (provided that the resulting value fit into the 8-bit field).
The two load and store instructions were:
LDA— load the contents of a memory location into the specified accumulator.STA— store the contents of the specified accumulator into a memory location.
Both of these instructions included an "indirect" bit. If this bit was set (done in assembly language by adding a @ to the opcode), the contents of the target address were assumed to be a memory address itself, and that address would be referenced to do the load or store.
The two transfer-of-control instructions were:
JMP— transfers control to the specified memory locationJSR("jump subroutine") — Does the same as theJMPinstruction, but additionally loads the return address (the instruction following theJSRinstruction in line) into accumulator 3 before jumping.
As in the case of the load and store instructions, the jump instructions contained an indirect bit, which likewise was specified in assembly using the @ character. In the case of an indirect jump, the processor retrieved the contents of the target location, and used the value as the memory address to jump to. However, unlike the load and store instructions, if the indirect address had the most significant bit set, it would perform a further cycle of indirection. On the Nova series processors prior to the Nova 3, there was no limit on the number of indirection cycles; an indirect address that referenced itself would result in an infinite indirect addressing loop, with the instruction never completing. (This could be alarming to users, since when in this condition, pressing the STOP switch on the front panel did nothing. It was necessary to reset the machine to break the loop.)
The two memory test instructions were:
ISZ— increment the memory location, and skip the next instruction if the result is zero.DSZ— decrement the memory location, and skip the next instruction if the result is zero.
Al igual que en el caso de las instrucciones de carga y almacenamiento, existía un bit indirecto que realizaba un único nivel de direccionamiento indirecto. Estas instrucciones eran peculiares, ya que en los Novas con memoria de núcleo magnético, la instrucción se ejecutaba dentro de la propia placa de memoria. Como era común en la época, las placas de memoria contenían un circuito de "escritura diferida" para resolver el problema de lectura destructiva inherente a la memoria de núcleo magnético. Pero el mecanismo de escritura diferida también contenía una mini unidad aritmética, que el procesador utilizaba para varios fines. Para las ISZinstrucciones DSZde lectura y escritura, el incremento o decremento se producía entre la ubicación de memoria que se leía y la escritura diferida; la CPU simplemente esperaba a que se le indicara 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 la ejecución de las instrucciones aritméticas equivalentes.
Algunos ejemplos de instrucciones de referencia a memoria:
LDA 1 , CONTEOTransfiere el contenido de la ubicación de memoria etiquetada COUNTal acumulador 1. Suponiendo que COUNTse encuentra 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 , 17Saltar indirectamente a la dirección de memoria especificada por el contenido de la ubicación 17, en el espacio de página cero, y depositar la dirección de retorno en el acumulador 3. Este era el método estándar para realizar una llamada al sistema RDOS en los primeros modelos Nova; el mnemónico en lenguaje ensamblador .SYSTMse traducía a esto.
JMP 0 , 3Saltar a la ubicación de memoria cuya dirección está contenida en el acumulador 3. Este era un método común para regresar de una llamada a una función o subrutina, ya que la instrucción JSR dejaba la dirección de retorno en el acumulador 3.
STA 0 , 3 , -1Almacena el contenido del acumulador 0 en la ubicación que sea una posición menor que la dirección contenida en el acumulador 3.
DSZ COUNTDecrementa el valor en la ubicación etiquetada COUNTy omite la siguiente instrucción si el resultado es cero. Como en el caso anterior, si COUNTse supone que está en el espacio .NREL, esto es equivalente a:
DSZ 1 , ( CONTEO - ( . + 1 ))Instrucciones de E/S
The Novas implemented a channelized model for interfacing to I/O devices. In the model, each I/O device was expected to implement two flags, referred to as "Busy" and "Done", and three data and control registers, referred to as A, B, and C. I/O instructions were available to read and write the registers, and to send one of three signals to the device, referred to as "start", "clear", and "pulse". In general, sending a start signal initiated an I/O operation that had been set up by loading values into the A/B/C registers. The clear signal halted an I/O operation and cleared any resulting interrupt. The pulse signal was used to initiate ancillary operations on complex subsystems, such as seek operations on disk drives. Polled devices usually moved data directly between the device and the A register. DMA devices generally used the A register to specify the memory address, the B register to specify the number of words to be transferred, and the C register for control flags. Channel 63 referred to the CPU itself and was used for various special functions.
Each I/O instruction contained a six-bit channel number field, a four-bit to specify which register to read or write, and a two-bit field to specify which signal was to be sent. In assembly language, the signal was specified by adding a letter to the opcode: 'S' for start, 'C' for clear, 'P' for pulse, and nothing for no signal. The opcodes were:
DIA— move the contents of the device's A register to the specified accumulatorDOA— send the contents of the specified accumulator to the A register of the device on the specified channelDIB— move the contents of the device's B register to the specified accumulatorDOB— send the contents of the specified accumulator to the B register of the device on the specified channelDIC— move the contents of the device's C register to the specified accumulatorDOC— send the contents of the specified accumulator to the C register of the device on the specified channelNIO— "no I/O", a misnomer. The instruction was used to send a signal to a device without doing a register transfer.
In addition, four instructions were available to test the status of a device:
SKPBN— skip the next instruction if the device's busy flag is setSKPBZ— skip the next instruction if the device's busy flag is clearSKPDN— skip the next instruction if the device's done flag is setSKPDZ— skip the next instruction if the device's done flag is clear
Starting a device caused it to set its busy flag. When the requested operation was completed, conventionally the device cleared its busy flag and set its done flag; most devices had their interrupt request mechanism wired to the done flag, so setting the done flag caused an interrupt (if interrupts were enabled and the device wasn't masked).
Special instructions
Estas instrucciones realizaban diversas funciones de control y estado de la CPU. En realidad, todas ellas eran abreviaturas de instrucciones de E/S en el canal 63, el canal de E/S autorreferencial de la CPU.
INTA— Reconocimiento de interrupción. Se transfirió el número de canal del dispositivo que generó la interrupción al acumulador especificado.INTDS— Se deshabilitaron todas las interrupcionesINTEN— Se habilitaron todas las interrupcionesIORST— Reinicio de E/S. Se envió una señal de reinicio al bus de E/S, lo que detuvo todas las operaciones de E/S, deshabilitó las interrupciones y borró todas las interrupciones pendientes.MSKO— Desactivación de la máscara. Se utilizó el contenido del acumulador especificado para configurar la máscara de interrupción. La interpretación de la máscara dependía de la implementación de cada dispositivo de E/S. Algunos dispositivos no podían enmascararse.READS— transfirió el contenido de los 16 interruptores de datos del panel frontal al acumulador especificado.HALT— detuvo la CPU. Una vez detenida, la CPU solo podía reiniciarse mediante intervención manual en el panel frontal.
Interrupciones y gestión 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 generar interrupciones. Cuando un dispositivo necesitaba solicitar una interrupción, activaba esta línea. La CPU recibía la interrupción tan pronto como completaba la instrucción actual. Como se mencionó anteriormente, se esperaba que un dispositivo activara su indicador de E/S "done" al solicitar una interrupción, y la convención era que el dispositivo borrara su solicitud de interrupción cuando la CPU ejecutara una instrucción de borrado de E/S en el canal del dispositivo.
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 generaba una interrupción, 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 las interrupciones posteriores. El controlador de interrupciones ejecutaba entonces una INTAinstrucción para descubrir el número de canal del dispositivo que generaba la interrupción. Esto funcionaba mediante la generación de una señal de "reconocimiento" en el plano posterior. La señal de reconocimiento estaba cableada en cadena a través del plano posterior, de modo que recorría cada tarjeta del bus. Se esperaba que cualquier dispositivo que solicitara una interrupción bloqueara la propagación de la señal de reconocimiento por el bus, de manera que si dos o más dispositivos tenían interrupciones pendientes simultáneamente, solo el primero vería la señal de reconocimiento. Dicho dispositivo respondía colocando su número de canal en las líneas de datos del bus. Esto significaba que, en caso de solicitudes de interrupción simultáneas, el dispositivo con prioridad se determinaba por cuál estaba físicamente más cerca de la CPU en el chasis de tarjetas.
The operating system's interrupt service routine then typically performed an indexed jump using the received channel number, to jump to the specific interrupt handling routine for the device. There were a few devices, notably the CPU's power-failure detection circuit, which did not respond to the INTA instruction. If the INTA returned a result of zero, the interrupt service routine had to poll all of the non-INTA-responding devices using the SKPDZ/SKPDN instructions to see which one interrupted.
After the interrupt had been processed and the service routine had sent the device an I/O clear, it resumed normal processing by enabling interrupts and then returning via an indirect jump through memory address 0, JMP@ 0. In order to prevent a pending interrupt from interrupting immediately before the return jump (which would cause the return address to be overwritten), the INTEN instruction had a one-instruction-cycle delay. When INTEN was executed, interrupts would not be enabled until after the following instruction was executed; that instruction was expected to be the JMP@ 0 instruction.
The operating system could somewhat manage the ordering of interrupts by setting an interrupt mask using the MSKO instruction. This was intended to allow the operating system to determine which devices were permitted to interrupt at a given time. When this instruction was issued, a 16-bit interrupt mask was transmitted to all devices on the backplane. It was up to the device to decide what the mask actually meant to it; by convention, a device that was masked out was not supposed to raise the interrupt line, but the CPU had no means of enforcing this. Most devices that were maskable allowed the mask bit to be selected via a jumper on the board. There were devices that ignored the mask altogether.
On the systems having magnetic core memory (which retained its contents without power), recovery from a power failure was possible. A power failure detection circuit in the CPU issued an interrupt when loss of the main power coming into the computer was detected; from this point, the CPU had a short amount of time until a capacitor in the power supply lost its charge and the power to the CPU failed. This was enough time to stop I/O in progress, by issuing an IORST instruction, and then save the contents of the four accumulators and the carry bit to memory. When the power returned, if the CPU's front panel key switch was in the LOCK position, the CPU would start and perform an indirect jump through memory address 2. This was expected to be the address of an operating system service routine that would reload the accumulators and carry bit, and then resume normal processing. It was up to the service routine to figure out how to restart I/O operations that were aborted by the power failure.
Front panel layout

Como era habitual en la época, la mayoría de los modelos Nova incluían una consola en el panel frontal para controlar y monitorizar las funciones de la CPU. Los modelos anteriores al Nova 3 utilizaban una disposición estándar del panel frontal, como se muestra en la foto del panel del Nova 840 a la derecha. Esta disposición incluía un interruptor de encendido con llave, dos filas de indicadores luminosos de dirección y datos, una fila de interruptores de entrada de datos y una fila de interruptores de función que activaban diversas funciones de la CPU al pulsarlos. Los indicadores de dirección siempre mostraban el valor actual del contador de programa en binario. Los indicadores de datos mostraban diferentes valores según la función de la CPU que estuviera activa en ese momento. A la izquierda del indicador de datos situado más a la izquierda, otro indicador mostraba el valor actual del bit de acarreo. En la mayoría de los modelos, los indicadores eran incandescentes y estaban soldados a la placa del panel; sustituir los indicadores fundidos era un verdadero quebradero de cabeza para los técnicos de servicio de Data General.
Cada uno de los interruptores de datos controlaba el valor de un bit en un valor de 16 bits y, según la convención de Data General, estaban numerados del 0 al 15 de izquierda a derecha. Los interruptores de datos proporcionaban información a la CPU para diversas funciones y también podían ser leídos por un programa en ejecución mediante la instrucción de lenguaje ensamblador READS. Para reducir el desorden en el panel y ahorrar dinero, los interruptores de función se implementaron como interruptores momentáneos bidireccionales. Al levantar la palanca de un interruptor de función, se activaba la función cuyo nombre estaba impreso encima del interruptor en el panel; al presionar la palanca hacia abajo, se activaba la función cuyo nombre aparecía debajo del interruptor. La palanca del interruptor volvía a la posición neutral al soltarse.
En la foto del Nova 840, los cuatro primeros interruptores de la izquierda realizaban las funciones de EXAMINAR y DEPOSITAR para los cuatro acumuladores. Al pulsar EXAMINAR en uno de ellos, los indicadores luminosos mostraban el valor actual del acumulador en binario. Al pulsar DEPOSITAR, se transfería al acumulador el valor binario representado por la configuración actual de los interruptores.
A la derecha, el siguiente interruptor era el de REINICIO/PARADA. Al pulsar PARADA, la CPU se detenía tras completar la instrucción actual. Al pulsar REINICIO, la CPU se detenía inmediatamente, borraba varios registros internos y enviaba una señal de reinicio de E/S a todos los dispositivos conectados. El interruptor a la derecha era el de INICIO/CONTINUACIÓN. Al pulsar CONTINUACIÓN, la CPU reanudaba la ejecución de la instrucción que apuntaba el contador de programa. Al pulsar INICIO, se transfería el valor de los interruptores de datos 1 a 15 al contador de programa y, a partir de ahí, se iniciaba la ejecución.
Los dos interruptores siguientes proporcionaban acceso de lectura y escritura a la memoria desde el panel frontal. Al pulsar EXAMINE, se transfería el valor establecido en los interruptores de datos 1 a 15 al contador de programa, se obtenía el valor de la ubicación de memoria correspondiente y se mostraba en los indicadores luminosos de datos. Al pulsar EXAMINE NEXT, se incrementaba el contador de programa y, a continuación, se realizaba una operación de examen en esa ubicación de memoria, lo que permitía al usuario recorrer una serie de ubicaciones de memoria. Al pulsar DEPOSIT, se escribía el valor contenido en los interruptores de datos en la ubicación de memoria a la que apuntaba el contador de programa. Al pulsar DEPOSIT NEXT, primero se incrementaba el contador de programa y, a continuación, se depositaba el valor en la ubicación de memoria a la que apuntaba.
La función INST STEP hacía que la CPU ejecutara una instrucción, en la posición actual del contador de programa, y luego se detuviera. Dado que el contador de programa se incrementaba durante la ejecución de la instrucción, esto permitía al usuario ejecutar un programa paso a paso. MEMORY STEP, un nombre inapropiado, hacía que la CPU ejecutara un solo ciclo de reloj y se detuviera. Esto resultaba de poca utilidad para los usuarios y, por lo general, solo lo utilizaba el personal de servicio técnico para diagnósticos.
PROGRAM LOAD era el mecanismo que se usaba habitualmente para arrancar un Nova. Cuando se activaba este interruptor, la ROM de arranque de 32 palabras se mapeaba sobre las primeras 32 palabras de memoria, el contador de programa se ponía en 0 y la CPU arrancaba. La ROM de arranque contenía 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 interruptores de datos 8-15 se usaban para indicarle a la ROM de arranque qué canal de E/S arrancar. Si el interruptor 0 estaba apagado, la ROM de arranque asumía que el dispositivo era un dispositivo de sondeo (por ejemplo, el lector de cinta de papel) y ejecutaba un bucle de entrada de sondeo hasta que se hubieran leído 512 bytes. Si el interruptor 0 estaba encendido, la ROM de arranque asumía que el dispositivo era un dispositivo con capacidad DMA e iniciaba una transferencia de datos DMA. La ROM de arranque no era lo suficientemente inteligente como para posicionar el dispositivo antes de iniciar la transferencia. Esto era un problema al reiniciar después de un fallo; Si el dispositivo de arranque era una unidad de disco, probablemente sus cabezales se habían quedado en un cilindro al azar. Era necesario reposicionarlos en el cilindro 0, donde RDOS escribía el bloque de arranque de primer nivel, para que la secuencia de arranque funcionara. Tradicionalmente, esto se hacía repitiendo la secuencia de carga de la unidad, pero los usuarios que se frustraban con el tiempo de espera (hasta 5 minutos, según el modelo de la unidad) aprendieron a introducir desde el panel frontal un código de E/S para "recalibrar" la unidad y ejecutarlo paso a paso en la CPU, una operación que a un usuario experimentado le llevaba solo unos segundos.
El interruptor de encendido era un interruptor de llave de tres posiciones: APAGADO, ENCENDIDO y BLOQUEO. En la posición APAGADO, se cortaba la alimentación de la CPU. Al girar la llave a ENCENDIDO, se alimentaba la CPU. Sin embargo, a diferencia de las CPU actuales, la CPU no se iniciaba automáticamente al recibir alimentación; el usuario debía usar CARGA DE PROGRAMA u otro método para iniciar la CPU y la secuencia de arranque. Al girar el interruptor a BLOQUEO, se desactivaban los interruptores de función del panel frontal; al girar el interruptor a BLOQUEO y retirar la llave, el usuario podía hacer que la CPU fuera a prueba de manipulaciones. En sistemas con memoria de núcleo magnético, la posición BLOQUEO también activaba la función de recuperación automática ante fallos de alimentación. La llave podía retirarse en las posiciones APAGADO o BLOQUEO.
Actuación
El Nova 1200 ejecutaba las instrucciones de acceso a la memoria principal (LDA y STA) en 2,55 microsegundos (μs). El uso de memoria de solo lectura ahorraba 0,4 μs. Las instrucciones del acumulador (ADD, SUB, COM, NEG, etc.) tardaban 1,55 μs, MUL 2,55 μs, DIV 3,75 μs, ISZ 3,15-4,5 μs. [ 33 ] En el Eclipse MV/6000 posterior, LDA y STA tardaban 0,44 μs, ADD, etc. tardaban 0,33 μs, MUL 2,2 μs, DIV 3,19 μs, ISZ 1,32 μs, FAD 5,17 μs, FMMD 11,66 μs. [ 34 ]
Ejemplos en lenguaje ensamblador
Programa Hola mundo
Este es un ejemplo mínimo de programación en lenguaje ensamblador Nova. Está diseñado para ejecutarse bajo RDOS e imprime la cadena " Hola, mundo " en la consola.
; un programa "hola, mundo" para Nova ejecutándose en RDOS ; utiliza la llamada al sistema PCHAR .titl hello .nrel .ent startinicio: dochar: lda 0 , @ pmsg ; cargar ac0 con el siguiente carácter, mov# 0 , 0 , snr ; probar ac0; saltar si no es cero (no cargar el resultado) jmp done .systm .pchar ; imprimir el primer jmp er ; saltado si OK movs 0 , 0 ; intercambiar bytes .systm .pchar ; imprimir el segundo jmp er ; saltado si OK isz pmsg ; apuntar al siguiente carácter jmp dochar ; volver a recorrerhecho: .systm ; salida normal .rtn er: .systm ; salida de error .ertn haltpmsg: . + 1 ; puntero al primer carácter de la cadena ; nota: los bytes se empaquetan de derecha a izquierda por defecto ; <15><12> denota un par CR LF. .txt / Hola , mundo. < 15 >< 12 >/ 0 ; palabra indicadora para finalizar la cadena.endstart16-bit multiplication
Basic models of the Nova came without built-in hardware multiply and divide capability, to keep prices competitive. The following routine multiplies two 16-bit words to produce a 16-bit word result (overflow is ignored). It demonstrates combined use of ALU op, shift, and test (skip). Note that when this routine is called by jsr, AC3 holds the return address. This is used by the return instruction jmp 0,3. An idiomatic way to clear an accumulator is sub 0,0. Other single instructions can be arranged to load a specific set of useful constants (e.g. -2, -1, or +1).
mpy:; multiply AC0 <- AC1 * AC2, by Toby Thainsub0,0; clear resultmbit:movzr1,1,szc; shift multiplier, test lsbadd2,0; 1: add multiplicandmovzl2,2,szr; shift and test for zerojmpmbit; not zero, do another bitjmp0,3; returnBinary print accumulator
The following routine prints the value of AC1 as a 16-digit binary number, on the RDOS console. It reveals further quirks of the Nova instruction set. For instance, there is no instruction to load an arbitrary "immediate" value into an accumulator (although memory reference instructions do encode such a value to form an effective address). Accumulators must generally be loaded from initialized memory locations (e.g. n16). Other contemporary machines such as the PDP-11, and practically all modern architectures, allow for immediate loads, although many such as ARM restrict the range of values that can be loaded immediately.
Because the RDOS .systm call macro implements a jsr, AC3 is overwritten by the return address for the .pchar function. Therefore, a temporary location is needed to preserve the return address of the caller of this function. For a recursive or otherwise re-entrant routine, a stack, hardware if available, software if not, must be used instead. The return instruction becomes jmp @ retrn which exploits the Nova's indirect addressing mode to load the return PC.
The constant definitions at the end show two assembler features: the assembler radix is octal by default (20 = sixteen), and character constants could be encoded as e.g. "0.
pbin:; print AC1 on console as 16 binary digits, by Toby Thainsta 3 , retrn ; guardar dirección de retorno lda 2 , n16 ; configurar bucle de contador de bits: lda 0 , chr0 ; cargar ASCII '0' movzl 1 , 1 , szc ; obtener el siguiente bit en acarreo inc 0 , 0 ; aumentar a '1' .systm .pchar ; AC0-2 preservado jmp err ; si hay error inc 2 , 2 , szr ; aumentar contador jmp loop ; repetir si no es cero lda 0 , spc ; imprimir un espacio .systm .pchar jmp err ; si hay error jmp @ retrnspc: " ;eso es un espacio chr0: "0 n16: -20 retrn: 0Aplicaciones
La Canadian Broadcasting Corporation en Montreal utilizó el Nova 1200 para la automatización de la emisión de canales hasta finales de la década de 1980. Posteriormente, fue reemplazado por unidades Nova 4 reacondicionadas, que estuvieron en uso hasta mediados de la década de 1990.
Véase también
- Fairchild 9440 : una implementación en un solo chip de los Nova 2 y 3.
- National Semiconductor IMP-16 : procesador PMOS de 5 chips inspirado en el Nova original.
- National Semiconductor PACE e INS8900 : implementaciones de un solo chip del IMP-16 con capacidad para manejar bytes .
Notas
Referencias
Citas
- ↑ "Museo de Historia de la Computación - Data General Corporation (DG) - El mejor ordenador pequeño del mundo" .
- ↑ Hola, Tony; Hola, Anthony; Pápay, Gyuri (2014). El universo de la computación: Un viaje a través de una revolución . Cambridge University Press. pág. 165. ISBN 9780521766456.
- 1 2 Hendrie 2002 , pág. 40.
- 1 2 3 4 5 Supnik 2004 .
- 1 2 3 4 Hendrie 2002 , pág. 48.
- ↑ Hendrie 2002 , pág. 42.
- ↑ "Cuando un miniordenador se convierte en un microordenador: los DGC microNOVA mN601 y 602" . El Museo CPU Shack . 21 de noviembre de 2014.
- ↑ Hendrie 2002 , pág. 43.
- ↑ Hendrie 2002 , págs. 43-44.
- 1 2 3 Gianluca G. (2017). "Historia de la ALU 74181 en minicomputadoras comerciales" . Archivado del original el 7 de octubre de 2018. Recuperado el 1 de enero de 2023 .
- ↑ Hendrie 2002 , pág. 49.
- ↑ "El mejor ordenador pequeño del mundo" (PDF) . Noviembre de 1968. Archivado (PDF) del original el 11 de diciembre de 2019.
- 1 2 "Frustrados en DEC, prosperando en Data General" . Museo de Historia de la Computación .
- ↑ Jones, Douglas. "The Digital Equipment Corporation PDP-8" . Departamento de Ciencias de la Computación de la Universidad de Iowa .
- ↑ Hendrie 2002 , pág. 50.
- 1 2 "SUPER NOVA" (PDF) . Museo de Historia de la Computación . 1970. Archivado (PDF) del original el 11 de diciembre de 2019.
- ↑ "El negocio que el tiempo olvidó: Data General ha desaparecido. ¿Pero eso convierte a su fundador en un fracaso?" . money.cnn.com . 1 de abril de 2003. Archivado del original el 26 de julio de 2014. Consultado el 27 de julio de 2016 .
- 1 2 Hendrie 2002 , pág. 53.
- ↑ "Historial general de datos / Antecedentes" . Universidad de Clemson .
- ↑ Hendrie 2002 , pág. 54.
- ↑ Hendrie 2002 , pág. 44.
- 1 2 3 4 Hendrie 2002 , pág. 55.
- ↑ Hendrie 2002 , pág. 58.
- ↑ Hendrie 2002 , pág. 60.
- 1 2 Nova 4/S y 4/X (PDF) . Serie de referencia para ingenieros de campo. Datos generales . Junio de 1981.
- 1 2 microNOVA . Datos generales. 1977.
- ↑ "Enterprise: un ordenador empresarial de 16 bits por solo 2300 libras" . Personal Computer World . Octubre de 1983.
- ↑ Charles P. Thacker; Edward M. McCreight (diciembre de 1974). "Alto: Un sistema informático personal" (PDF) . pág. 13. Archivado (PDF) del original el 6 de junio de 2011.
- ↑ Tom Owad (2005). Creación de una réplica del Apple I: De vuelta al garaje . pág. xxi. ISBN 1-931836-40-X.
- ↑ "Restauración general de datos" . Datos generales Nova, Eclipse, MV y AV . Consultado el 20 de agosto de 2021 .
- ↑ "Las grandes y hermosas minicomputadoras generales de datos" . www.chookfest.net . Consultado el 20 de agosto de 2021 .
- ↑ "Cómo mantener el Nova" (PDF) . Data General. 1969.
- ↑ Manual técnico para la Nova 1200 (PDF) . Vol. I. Datos generales. 1971. págs. 1-4 . 015-000002.
- ↑ Principios de funcionamiento del Eclipse MV/6000 (PDF) . Data General. 1980. Apéndice F, Tiempos de ejecución de instrucciones. 014-000648.
Bibliografía
- Hendrie, Gardner (22 de noviembre de 2002). "Historia oral de Edson (Ed) D. de Castro" (PDF) (Entrevista). Archivado (PDF) del original el 27 de diciembre de 2014.
- Supnik, Bob (10 de enero de 2004). "¿Qué era la PDP-X?" (PDF) . Archivado (PDF) del original el 10 de diciembre de 2004.
Enlaces externos
- El proyecto SimH de Bob Supnik incluye un emulador básico de Nova en un paquete modificable por el usuario.
- El compilador C portátil (pcc) incluye un objetivo NOVA ( repositorio de GitHub con una copia de las fuentes originales; otro repositorio de GitHub tiene una copia más actualizada ).
- El sitio web de Novas Are Forever (SimuLogic) intenta archivar todo lo relacionado con DG y ofrecer productos gratuitos y comerciales.
- Un ensamblador cruzado portátil PDP-8 y DG Nova
- Museo de Minicomputadoras de Carl Friend : describe en detalle el conjunto de instrucciones Nova.
- Ordenadores Data General
- computadoras de 16 bits
- Minicomputadoras
- Computadoras que utilizan diseños de segmentación de bits
- Introducciones relacionadas con la informática en 1969