Hubbry Logo
Data General NovaData General NovaMain
Open search
Data General Nova
Community hub
Data General Nova
logo
8 pages, 0 posts
0 subscribers
Be the first to start a discussion here.
Be the first to start a discussion here.
Data General Nova
Data General Nova
from Wikipedia
Nova
Data General Nova 1200 front panel
ManufacturerData General
Product familyNova
Operating systemRDOS
A Nova system (beige and yellow, center bottom) and a cartridge hard disk system (opened, below Nova) in a mostly empty rack mount
A Nova 1200, mid-right, processed the images generated by the EMI-Scanner, the world's first commercially available CT scanner.

The Nova is a series of 16-bit minicomputers released by the American company Data General. The Nova family was very popular in the 1970s and ultimately sold tens of thousands of units.

The first model, known simply as "Nova", was released in 1969.[1] The Nova was packaged into a single 3U rack-mount case and had enough computing power to handle most simple tasks. The Nova became popular in science laboratories around the world. It was followed the next year by the SuperNOVA, which ran roughly four times as fast, making it the fastest mini for several years.

Introduced during a period of rapid progress in integrated circuit (or "microchip") design, the line went through several upgrades over the next five years, introducing the 800 and 1200, the Nova 2, Nova 3, and ultimately the Nova 4. A single-chip implementation was also introduced as the microNOVA in 1977, but did not see widespread use as the market moved to new microprocessor designs. Fairchild Semiconductor also introduced a microprocessor version of the Nova in 1977, the Fairchild 9440, but it also saw limited use in the market.

The Nova line was succeeded by the Data General Eclipse, which was similar in most ways but added virtual memory support and other features required by modern operating systems. A 32-bit upgrade of the Eclipse resulted in the Eclipse MV series of the 1980s.

History

[edit]

Edson de Castro and the PDP-X

[edit]

Edson de Castro was the Product Manager of the pioneering Digital Equipment Corporation (DEC) PDP-8, a 12-bit computer widely referred to as the first true minicomputer.[2] He also led the design of the upgraded PDP-8/I, which used early integrated circuits in place of individual transistors.[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

[edit]

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 group of like-minded engineers formed 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

[edit]

Late in 1967, Richman introduced the group to New York-based lawyer Fred Adler, who began canvassing various funding sources for seed capital. By 1968, Adler had arranged a major funding deal with a consortium of venture capital funds from the Boston area, who agreed to provide an initial US$400,000 investment with a second US$400,000 available for production ramp-up. de Castro, Burkhart and Sogge quit DEC and started Data General (DG) on 15 April 1968. Green did not join them, considering the venture too risky, and Richman did not join until the product was up and running later in the year.[5]

Work on the first system took about nine months, and the first sales efforts started that November. They had a bit of luck because the Fall Joint Computer Conference had been delayed until December that year, so they were able to bring a working unit to San Francisco where they ran a version of Spacewar!.[11] DG officially released the Nova in 1969 at a base price of US$3,995 (equivalent to $34,255 in 2024), advertising it as "the best small computer in the world."[12] The basic model was not very useful out of the box, and adding kW (16 kB) RAM in the form of core memory typically brought the price up to US$7,995.[13] In contrast, a PDP-8/I with kW (6 kB) was priced at US$12,800.[14]

The first sale was to a university in Texas, with the team hand-building an example which shipped out in February. However, this was in the midst of a strike in the airline industry and the machine never arrived. They sent a second example, which arrived promptly as the strike had ended by that point, and in May the original one was finally delivered as well.[15]

The system was successful from the start, with the 100th being sold after six months,[16] and the 500th after 15 months.[13] Sales accelerated as newer versions were introduced, and by 1975 the company had annual sales of US$100 million.[17]

SuperNOVA

[edit]

Ken Olsen had publicly predicted that DG would fail, but with the release of the Nova it was clear that was not going to happen. By this time, a number of other companies were talking about introducing 16-bit designs as well. Olsen decided these presented a threat to their 18-bit line as well as 12-bit, and began a new 16-bit design effort.[18] This emerged in 1970 as the PDP-11, a much more complex design that was as different from the PDP-X as the Nova was. The two designs competed heavily in the market.[4]

Rumors of the new system from DEC reached DG shortly after the Nova began shipping. In spring 1970 they hired a new designer, Larry Seligman, to leapfrog any possible machine in the making. Two major changes had taken place since the Nova was designed; one was that Signetics had introduced the 8260, a 4-bit IC that combined an adder, XNOR and AND, meaning the number of chips needed to implement the basic logic was reduced by about three times. Another was that Intel was aggressively talking up semiconductor-based memories, promising 1024 bits on a single chip and running at much higher speeds than core memory.[18]

Seligman's new design took advantage of both of these improvements. To start, the new ICs allowed the ALU to be expanded to full 16-bit width on the same two cards, allowing it to carry out math and logic operations in a single cycle and thereby making the new design four times as fast as the original. In addition, new smaller core memory was used that improved the cycle time from the original's 1,200 ns to 800 ns, offering a further 1/3 improvement. Performance could be further improved by replacing the core with read-only memory; lacking core's read–write cycle, this could be accessed in 300 ns for a dramatic performance boost.[16]

The resulting machine, known as the SuperNOVA, was released in 1970. Although the initial models still used core, the entire design was based on the premise that faster semiconductor memories would become available and the platform could make full use of them. This was introduced later the same year as the SuperNOVA SC, featuring semiconductor (SC) memory. The much higher performance memory allowed the CPU, which was synchronous with memory, to be further increased in speed to run at a 300 ns cycle time (3.3 MHz). This made it the fastest available minicomputer for many years.[19] Initially the new memory was also very expensive and ran hot, so it was not widely used.[20]

1200 and 800

[edit]
Nova 1200 CPU printed circuit board. The 74181 ALU is the large IC center-right.

As a demonstration of the power of their Micromatrix gate array technology, in 1968 Fairchild prototyped the 4711, a single-chip 4-bit ALU.[10][21] The design was never intended for mass production and was quite expensive to produce. The introduction of the Signetics 8260 in 1969 forced their hand; both Texas Instruments and Fairchild introduced 4-bit ALUs of their own in 1970, the 74181 and 9341, respectively. In contrast to the 8260, the new designs offered all common logic functions and further reduced the chip count.[10]

This led DG to consider the design of a new CPU using these more integrated ICs. At a minimum, this would reduce the CPU to a single card for either the basic Nova or the SuperNOVA. A new concept emerged where a single chassis would be able to host either machine simply by swapping out the CPU circuit board. This would allow customers to purchase the lower-cost system and then upgrade at any time.[22]

While Seligman was working on the SuperNOVA, the company received a letter from Ron Gruner stating "I've read about your product, I've read your ads, and I'm going to work for you. And I'm going to be at your offices in a week to talk to you about that."[22] He was hired on the spot. Gruner was put in charge of the low-cost machine while Seligman designed a matching high-performance version.[22]

Gruner's low-cost model launched in 1970 as the Nova 1200, the 1200 referring to the use of the original Nova's 1,200 ns core memory. It featured a 4-bit ALU based on a single 74181 chip, and was thus essentially a repackaged Nova. Seligman's repackaged four-ALU SuperNOVA was released in 1971 as the Nova 800, resulting in the somewhat confusing naming where the lower-numbered model has higher performance.[22] Both models were offered in a variety of cases, the 1200 with seven slots, the 1210 with four and the 1220 with fourteen.

Later models

[edit]

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

[edit]

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

[edit]

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

[edit]
Data General 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

[edit]

It appears that Data General originally intended the Nova 3 to be the last of its line, planning to replace the Nova with the later Eclipse machines.[citation needed] However, continued demand led to a Nova 4 machine introduced in 1978, this time based on four AMD Am2901 bit-slice ALUs. This machine was designed from the start to be both the Nova 4 and the Eclipse S/140, with different microcode for each. A floating-point co-processor was also available, taking up a separate slot. An additional option allowed for memory mapping, allowing programs to access up to 128 kwords of memory using bank switching. Unlike the earlier machines, the Nova 4 did not include a front panel console and instead included a ROM containing machine code that allows a terminal to emulate a console when needed.[25]: 87 

There were three different versions of the Nova 4, the Nova 4/C, the Nova 4/S and the Nova 4/X. The Nova 4/C was a single-board implementation that included all of the memory (16 or 32 kwords). The Nova 4/S and 4/X used separate memory boards. The Nova 4/X had the on-board memory management unit (MMU) enabled to allow up to 128 kwords of memory to be used. The MMU was also installed in the Nova 4/S, but was disabled by firmware. Both the 4/S and the 4/X included a "prefetcher" to increase performance by fetching up to 11 instructions from memory before they were needed.[25]: 5 

microNOVA

[edit]
Data General mN601 microprocessor

Data General also produced a series of microNOVA single-chip implementations of the Nova processor. To allow it to fit into a 40-pin dual in-line package (DIP) chip, the address bus and data bus shared a set of 16 pins. This meant that reads and writes to memory required two cycles, and that the machine ran about half the speed of the original Nova as a result.[26]

The first chip in the series was the mN601, of 1977. This was sold both as a CPU for other users, a complete chipset for those wanting to implement a computer, a complete computer on a single board with 4 kB of RAM, and as a complete low-end model of the Nova.[26] An upgraded version of the design, 1979's mN602, reduced the entire chipset to a single VLSI. This was offered in two machines, the microNOVA MP/100 and larger microNOVA MP/200.

The microNOVA was later re-packaged with a monitor in a PC-style case with two floppy disks as the Enterprise. Enterprise shipped in 1981, running RDOS, but the introduction of the IBM PC the same year made most other machines disappear under the radar.[27]

Legacy

[edit]

The Nova influenced the design of both the Xerox Alto (1973)[28] and Apple I (1976)[29] computers, and its architecture was the basis for the Computervision CGP (Computervision Graphics Processor) series. Its external design has been reported to be the direct inspiration for the front panel of the MITS Altair (1975) microcomputer.

Data General followed up on the success of the original Nova with a series of faster designs. The Eclipse family of systems was later introduced with an extended upwardly compatible instruction set, and the MV-series further extended the Eclipse into a 32-bit architecture to compete with the DEC VAX. The development of the MV-series was documented in Tracy Kidder's popular 1981 book, The Soul of a New Machine. Data General itself would later evolve into a vendor of Intel processor-based servers and storage arrays, eventually being purchased by EMC.

There is a diverse but ardent group of people worldwide who restore and preserve original 16-bit Data General systems.[30][31]

Technical description

[edit]

Processor design

[edit]
Data General Nova registers
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (bit position)
Accumulator registers
0 Register 0
1 Register 1
Index registers
2 Index Register 2
3 Index Register 3
Program counter
  PC Program Counter
Status register
  C Carry flag

The Nova, unlike the PDP-8, was a load–store architecture. It had four 16-bit accumulator registers, two of which (2 and 3) could be used as index registers. There was a 15-bit program counter and a single-bit carry register. As with the PDP-8, current + zero page addressing was central. There was no stack register, but later Eclipse designs would utilize a dedicated hardware memory address for this function.

The earliest models of the Nova processed math serially in 4-bit packets, using a single 74181 bitslice ALU. A year after its introduction, this design was improved to include a full 16-bit parallel math unit using four 74181s, this design being referred to as the SuperNova. Future versions of the system 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, without provision for magnetic-core memory.

Memory and I/O

[edit]

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 K words 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. Semiconductor ROM 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

[edit]

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.

Data General software on punched tape

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

[edit]

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

[edit]

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 — add 1 to the contents of the source accumulator and move to the destination accumulator
  • AND — perform the bitwise AND of the two accumulators and place the result in the destination accumulator

An example arithmetic instructions, with all options utilized, is:

ADDZR#  0,2,SNC

This decoded as: clear the carry bit; add the contents of AC2 (accumulator 2) to AC0; circularly shift the result one bit to the right; test the result to see if the carry bit is set and skip the next instruction if so. Discard the result after performing the test. In effect, this adds two numbers and tests to see if the result is odd or even.

Memory reference instructions

[edit]

The Nova instruction set contained a pair of instructions that transferred memory contents to accumulators and vice versa, two transfer-of-control instructions, and two instructions that tested the contents of a memory location. All memory reference instructions contained an eight-bit address field, and a two-bit field that specified the mode of memory addressing. The four modes were:

  • Mode 0 — absolute addressing. The contents of the address field of the instruction is zero-filled on the left and used as the target address.
  • Mode 1 — relative addressing. The contents of the address field of the instruction is sign extended to the left and added to the current value of the program counter (which, by the time the instruction executes, points to the next instruction). The result is used as the target address.
  • Mode 2 — indexed addressing. The contents of the address field of the instruction is sign extended to the left and added to the current value of accumulator 2. The result is used as the target address.
  • Mode 3 — indexed addressing. The contents of the address field of the instruction is sign extended to the left and added to the current value of accumulator 3. The result is used as the target address.

Obviously, mode 0 was only capable of addressing the first 256 memory words, given the eight-bit address field. This portion of memory was referred to as "page zero". Page zero memory words were considered precious to Nova assembly language programmers because of the small number available; only page zero locations could be addressed from anywhere in the program without resorting to indexed addressing, which required tying up accumulator 2 or 3 to use as an index register. In assembly language, a .ZREL directive caused the assembler to place the instructions and data words that followed it in page zero; an .NREL directive placed the following instructions and data words in "normal" memory. Later Nova models added instructions with extended addressing fields, which overcame this difficulty (at a performance penalty).

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 location
  • JSR ("jump subroutine") — Does the same as the JMP instruction, but additionally loads the return address (the instruction following the JSR instruction 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.

As in the case of the load and store instructions, there was an indirect bit that would perform a single level of indirect addressing. These instructions were odd in that, on the Novas with magnetic core memory, the instruction was executed within the memory board itself. As was common at the time, the memory boards contained a "write-back" circuit to solve the destructive-read problem inherent to magnetic core memory. But the write-back mechanism also contained a mini arithmetic unit, which the processor used for several purposes. For the ISZ and DSZ instructions, the increment or decrement occurred between the memory location being read and the write-back; the CPU simply waited to be told if the result was zero or nonzero. These instructions were useful because they allowed a memory location to be used as a loop counter without tying up an accumulator, but they were slower than performing the equivalent arithmetic instructions.

Some examples of memory reference instructions:

LDA 1,COUNT

Transfers the contents of the memory location labeled COUNT into accumulator 1. Assuming that COUNT is in .NREL space, this instruction is equivalent to

LDA 1,1,(COUNT-(.+1))

where '.' represents the location of the LDA instruction.

JSR@ 0,17

Jump indirect to the memory address specified by the contents of location 17, in page zero space, and deposit the return address in accumulator 3. This was the standard method for making an RDOS system call on early Nova models; the assembly language mnemonic .SYSTM translated to this.

JMP 0,3

Jump to the memory location whose address is contained in accumulator 3. This was a common means of returning from a function or subroutine call, since the JSR instruction left the return address in accumulator 3.

STA 0,3,-1

Store the contents of accumulator 0 in the location that is one less than the address contained in accumulator 3.

DSZ COUNT

Decrement the value in the location labeled COUNT, and skip the next instruction if the result is zero. As in the case above, if COUNT is assumed to be in .NREL space, this is equivalent to:

DSZ 1,(COUNT-(.+1))

I/O instructions

[edit]

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 accumulator
  • DOA — send the contents of the specified accumulator to the A register of the device on the specified channel
  • DIB — move the contents of the device's B register to the specified accumulator
  • DOB — send the contents of the specified accumulator to the B register of the device on the specified channel
  • DIC — move the contents of the device's C register to the specified accumulator
  • DOC — send the contents of the specified accumulator to the C register of the device on the specified channel
  • NIO — "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 set
  • SKPBZ — skip the next instruction if the device's busy flag is clear
  • SKPDN — skip the next instruction if the device's done flag is set
  • SKPDZ — 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

[edit]

These instructions performed various CPU control and status functions. All of them were actually shorthand mnemonics for I/O instructions on channel 63, the CPU's self-referential I/O channel.

  • INTA — interrupt acknowledge. Transferred the channel number of the interrupting device to the specified accumulator.
  • INTDS — disabled all interrupts
  • INTEN — enabled all interrupts
  • IORST — I/O reset. Sent a reset signal on the I/O bus, which stopped all I/O, disabled interrupts and cleared all pending interrupts.
  • MSKO — mask out. Used the contents of the specified accumulator to set up the interrupt mask. How the mask was interpreted was up to the implementation of each I/O device. Some devices could not be masked.
  • READS — transferred the contents of the 16 front panel data switches to the specified accumulator.
  • HALT — stopped the CPU. Once halted, the CPU could be made to start again only by manual intervention at the front panel.

Interrupts and interrupt handling

[edit]

From the hardware standpoint, the interrupt mechanism was relatively simple, but also less flexible, than current CPU architectures. The backplane supported a single interrupt request line, which all devices capable of interrupting connected to. When a device needed to request an interrupt, it raised this line. The CPU took the interrupt as soon as it completed the current instruction. As stated above, a device was expected to raise its "done" I/O flag when it requested an interrupt, and the convention was that the device would clear its interrupt request when the CPU executed a I/O clear instruction on the device's channel number.

The CPU expected the operating system to place the address of its interrupt service routine into memory address 1. When a device interrupted, the CPU did an indirect jump through address 1, placing the return address into memory address 0, and disabling further interrupts. The interrupt handler would then perform an INTA instruction to discover the channel number of the interrupting device. This worked by raising an "acknowledge" signal on the backplane. The acknowledge signal was wired in a daisy-chain format across the backplane, such that it looped through each board on the bus. Any device requesting an interrupt was expected to block the further propagation of the acknowledge signal down the bus, so that if two or more devices had pending interrupts simultaneously, only the first one would see the acknowledge signal. That device then responded by placing its channel number on the data lines on the bus. This meant that, in the case of simultaneous interrupt requests, the device that had priority was determined by which one was physically closest to the CPU in the card cage.

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

[edit]
Running Nova 840 (The front panel has been replaced with one from a 1220.)

As was the convention of the day, most Nova models provided a front panel console to control and monitor CPU functions. Models prior to the Nova 3 all relied on a canonical front panel layout, as shown in the Nova 840 panel photo to the right. The layout contained a keyed power switch, two rows of address and data display lamps, a row of data entry switches, and a row of function switches that activated various CPU functions when pressed. The address lamps always displayed the current value of the program counter, in binary. The data lamps displayed various values depending on which CPU function was active at the moment. To the left of the leftmost data lamp, an additional lamp displayed the current value of the carry bit. On most models the lamps were incandescent lamps which were soldered to the panel board; replacing burned-out lamps was a bane of existence for Data General field service engineers.

Each of the data switches controlled the value of one bit in a 16-bit value, and per Data General convention, they were numbered 0-15 from left to right. The data switches provided input to the CPU for various functions, and could also be read by a running program using the READS assembly language instruction. To reduce panel clutter and save money, the function switches were implemented as two-way momentary switches. When a function switch lever was lifted, it triggered the function whose name was printed above the switch on the panel; when the lever was pressed down, it activated the function whose name appeared below the switch. The switch lever returned to a neutral position when released.

Referencing the Nova 840 photo, the first four switches from the left performed the EXAMINE and DEPOSIT functions for the four accumulators. Pressing EXAMINE on one of these caused the current value of the accumulator to be displayed in binary by the data lamps. Pressing DEPOSIT transferred the binary value represented by the current settings of the data switches to the accumulator.

Going to the right, the next switch was the RESET/STOP switch. Pressing STOP caused the CPU to halt after completing the current instruction. Pressing RESET caused the CPU to halt immediately, cleared a number of CPU internal registers, and sent an I/O reset signal to all connected devices. The switch to the right of that was the START/CONTINUE switch. Pressing CONTINUE caused the CPU to resume executing at the instruction currently pointed at by the program counter. Pressing START transferred the value currently set in data switches 1–15 to the program counter, and then began executing from there.

The next two switches provided read and write access to memory from the front panel. Pressing EXAMINE transferred the value set in data switches 1–15 to the program counter, fetched the value in the corresponding memory location, and displayed its value in the data lamps. Pressing EXAMINE NEXT incremented the program counter and then performed an examine operation on that memory location, allowing the user to step through a series of memory locations. Pressing DEPOSIT wrote the value contained in the data switches to the memory location pointed at by the program counter. Pressing DEPOSIT NEXT first incremented the program counter and then deposited to the pointed-to memory location.

The INST STEP function caused the CPU to execute one instruction, at the current program counter location, and then halt. Since the program counter would be incremented as part of the instruction execution, this allowed the user to single-step through a program. MEMORY STEP, a misnomer, caused the CPU to run through a single clock cycle and halt. This was of little use to users and was generally only used by field service personnel for diagnostics.

PROGRAM LOAD was the mechanism usually used to boot a Nova. When this switch was triggered, it caused the 32-word boot ROM to be mapped over the first 32 words of memory, set the program counter to 0, and started the CPU. The boot ROM contained code that would read 256 words (512 bytes) of code from a selected I/O device into memory and then transfer control to the read-in code. The data switches 8-15 were used to tell the boot ROM which I/O channel to boot from. If switch 0 was off, the boot ROM would assume the device was a polled device (e.g., the paper tape reader) and run a polled input loop until 512 bytes had been read. If switch 0 was on, the boot ROM assumed the device was a DMA-capable device and it initiated a DMA data transfer. The boot ROM was not smart enough to position the device prior to initiating the transfer. This was a problem when rebooting after a crash; if the boot device was a disk drive, its heads had likely been left on a random cylinder. They had to be repositioned to cylinder 0, where RDOS wrote the first-level boot block, in order for the boot sequence to work. Conventionally this was done by cycling the drive through its load sequence, but users who got frustrated with the wait time (up to 5 minutes depending on the drive model) learned how to input from the front panel a drive "recalibrate" I/O code and single-step the CPU through it, an operation that took an experienced user only a few seconds.

The power switch was a 3-way keyed switch with positions marked OFF, ON, and LOCK. In the OFF position all power was removed from the CPU. Turning the key to ON applied power to the CPU. However, unlike current CPUs, the CPU did not start automatically when power was applied; the user had to use PROGRAM LOAD or some other method to start the CPU and initiate the boot sequence. Turning the switch to LOCK disabled the front panel function switches; by turning the switch to LOCK and removing the key, the user could render the CPU resistant to tampering. On systems with magnetic core memory, the LOCK position also enabled the auto power failure recovery function. The key could be removed in the OFF or LOCK positions.

Performance

[edit]

The Nova 1200 executed core memory access instructions (LDA and STA) in 2.55 microseconds (μs). Use of read-only memory saved 0.4 μs. Accumulator instructions (ADD, SUB, COM, NEG, etc.) took 1.55 μs, MUL 2.55 μs, DIV 3.75 μs, ISZ 3.15-4.5 μs.[32] On the later Eclipse MV/6000, LDA and STA took 0.44 μs, ADD, etc. took 0.33 μs, MUL 2.2 μs, DIV 3.19 μs, ISZ 1.32 μs, FAD 5.17 μs, FMMD 11.66 μs.[33]

Assembly language examples

[edit]

Hello world program

[edit]

This is a minimal programming example in Nova assembly language. It is designed to run under RDOS and prints the string “Hello, world.” on the console.

    ; a "hello, world" program for Nova running RDOS
    ; uses PCHAR system call
    .titl hello
    .nrel
    .ent start

 start:
 dochar:
    lda    0,@pmsg  ; load ac0 with next character,
    mov#   0,0,snr  ; test ac0; skip if nonzero (don't load result)
    jmp    done
    .systm
    .pchar          ; print first
    jmp    er       ; skipped if OK
    movs   0,0      ; swap bytes
    .systm
    .pchar          ; print second
    jmp    er       ; skipped if OK
    isz    pmsg     ; point to next character
    jmp    dochar   ; go around again

 done:
    .systm          ; normal exit
    .rtn
 er:
    .systm          ; error exit
    .ertn
    halt

 pmsg:
    .+1             ; pointer to first character of string
                    ; note bytes are packed right-to-left by default
                    ; <15><12> denotes a CR LF pair.
    .txt /Hello, world.<15><12>/
    0               ; flag word to end string

    .end start

16-bit multiplication

[edit]

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 Thain

 	sub 0,0		; clear result
 mbit:	movzr 1,1,szc	; shift multiplier, test lsb
 	add 2,0		; 1: add multiplicand
 	movzl 2,2,szr	; shift and test for zero
 	jmp mbit	; not zero, do another bit
 	jmp 0,3		; return

Binary print accumulator

[edit]

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 Thain

        sta     3,retrn     ; save return addr
        lda     2,n16       ; set up bit counter
 loop:  lda     0,chr0      ; load ASCII '0'
        movzl   1,1,szc     ; get next bit in carry
        inc     0,0         ; bump to '1'
        .systm
        .pchar              ; AC0-2 preserved
        jmp     err         ; if error
        inc     2,2,szr     ; bump counter
        jmp     loop        ; loop again if not zero
        lda     0,spc       ; output a space
        .systm
        .pchar
        jmp     err         ; if error
        jmp     @retrn

 spc:   " ;that's a space
 chr0:  "0
 n16:   -20
 retrn: 0

Applications

[edit]

The Canadian Broadcasting Corporation in Montreal used the Nova 1200 for channel play-out automation up until the late 1980s. It was then replaced with refurbished Nova 4 units and these were in use until the mid-1990s.

See also

[edit]

Notes

[edit]

References

[edit]
[edit]
Revisions and contributorsEdit on WikipediaRead on Wikipedia
from Grokipedia
The Data General Nova was a pioneering series of 16-bit minicomputers introduced in late 1968 by Data General Corporation, a company founded earlier that year by former (DEC) engineers including Edson de Castro, who had led the PDP-8 design team. Designed as a compact, general-purpose system for real-time and on-line applications, the original Nova featured a multi-accumulator architecture with four 16-bit accumulators (two indexable), a load/store design, and medium-scale integration (MSI) TTL logic circuits—making it one of the first minicomputers to incorporate 10 to 100 gates per for enhanced performance and reliability. It supported up to 32K words (64 KB) of core memory with cycle times as low as 2.6 µs, 16 bidirectional I/O data lines capable of addressing up to 62 devices, and a high-speed channel, all housed in a single rack-mount chassis consuming about 400 watts. Priced starting at around $8,000 for a basic 32K configuration, the Nova offered competitive performance for its era, with a 1.8 µs and an extensive instruction set including over 100 operations for arithmetic, logical, shift, and skip functions, appealing to original equipment manufacturers (OEMs) through quantity discounts. The system quickly gained popularity in scientific research, industrial control, , educational settings, and process monitoring due to its , ease of interfacing, and software support including assemblers, debuggers, and real-time operating systems like RDOS. The Nova family evolved through the , spawning models like the Nova 2 (1973), Nova 3 (1975), and Nova 4 (1978), which maintained the core 16-bit architecture while adding features such as memory management units, faster semiconductors, and multiprocessing capabilities, ultimately influencing later personal computing designs including the and . By the late , Data General had delivered over 50,000 Nova systems, cementing its role in the revolution before transitioning to 32-bit and MV lines.

History

Founding and Origins

Data General Corporation was founded on April 15, 1968, by Edson de Castro, Richard Sogge, Henry Burkhardt III, and Herbert Richman, all former employees of (DEC) except Richman from . The company was established in , initially operating out of a rented beauty parlor, with the aim of entering the burgeoning minicomputer market. De Castro, who had served as the product manager for DEC's influential PDP-8 —a 12-bit system introduced in 1965—grew frustrated with DEC's direction. In late 1967, he proposed the PDP-X, a 16-bit designed as a successor to the PDP-8, emphasizing compatibility, upgradability, and the use of emerging medium-scale integration (MSI) technology to capture a larger share of the market. DEC's management rejected the PDP-X proposal, viewing it as too risky and incompatible with their existing product lines, prompting de Castro and his colleagues to leave the company. This rejection directly inspired the conceptual roots of the Nova, positioned as a more advanced 16-bit alternative to the PDP-8, targeting similar applications but with improved performance and cost-efficiency. The founders secured initial funding totaling $800,000, including contributions from and financial backer Frederick Adler, who invested $50,000 personally. Their motivation was to develop a faster and cheaper than DEC's offerings, leveraging monolithic integrated circuits to serve scientific and industrial markets underserved by larger mainframes like IBM's System/360. The early team included de Castro for logic design and leadership, Burkhardt for , Sogge for memory and , and Herb Richman as vice president of sales. Development of the Nova began in April 1968, with the first prototype completed by December 1968 for demonstration at the Fall Joint Computer Conference, and initial shipments occurring in February 1969. The company went public later that year, raising an additional $5 million.

Initial Design and Introduction

The initial design of the Data General Nova stemmed from the engineering team's vision to create a cost-effective, high-performance 16-bit that could outperform contemporaries like the PDP-8 while targeting real-time and on-line applications. Key goals included a load-store with four 16-bit accumulators—two of which could function as index registers—to minimize accesses and enhance programming efficiency for tasks such as process control and . This multi-accumulator approach addressed limitations in single-accumulator designs by allowing temporary without frequent references, enabling faster execution of arithmetic and logical operations. The supported a 15-bit , accommodating up to 32K words of , and prioritized simplicity and reliability for both original equipment manufacturers (OEMs) and direct end-users. The Nova's central processor was implemented using discrete medium-scale integration (MSI) transistor-transistor logic (TTL) circuits, consolidated onto a single 15-inch by 15-inch to reduce costs and improve compactness compared to multi-board rivals. This single-board CPU design fit into a low-profile 5.25-inch-high rack-mount , measuring 19 inches wide and 21.5 inches deep, which facilitated easy integration into industrial environments. utilized magnetic core technology with a cycle time of 2.6 microseconds for access in a 4K configuration, corresponding to an approximate clock speed of 0.4 MHz, allowing basic operations like addition to complete at rates up to 384,615 per second. The architecture's emphasis on TTL avoided more expensive components like transformers in , contributing to the system's economy and efficiency. Data General demonstrated a of the Nova at the 1968 Fall Joint Computer Conference and commercially introduced it in 1969, marking its public debut as a revolutionary priced at approximately $3,950 for the basic unit without memory or peripherals. The company positioned it as an affordable alternative to DEC systems, with full configurations including 4K words of core memory and interfaces costing around $8,000. First units shipped in February 1969, achieving rapid market traction; by 1970, Data General had delivered 700 Novas, demonstrating strong initial sales to OEMs for embedded applications and end-users in scientific and industrial settings. This success validated the design's focus on performance-per-dollar, helping establish Data General as a key player in the industry.

Model Evolution

The SuperNOVA, introduced in 1970, represented the first significant upgrade to the original Nova design, achieving over three times the performance through the use of Schottky TTL logic and supporting (DMA) for improved I/O efficiency. It featured a core memory cycle time of 800 nanoseconds, with optional enabling a 300-nanosecond cycle, and the SuperNOVA SC variant pioneered in commercial minicomputers. In 1971, Data General expanded its lineup with the cost-reduced Nova 1200 and Nova 800 models, targeted at entry-level markets and OEM applications. These systems used slower magnetic core memory cycles of 1.2 microseconds for the Nova 1200 and 800 nanoseconds for the Nova 800, while maintaining compatibility with the original Nova's architecture to support 4K to 32K words of memory. The Nova 2 series, launched in June 1973, incorporated more integrated medium-scale integration (MSI) logic to reduce component count and cost, available in 4-slot (Nova 2/4) and 10-slot (Nova 2/10) chassis configurations. It offered memory cycle times of 1 or 800 nanoseconds with up to 32K words, emphasizing affordability for industrial and laboratory use while preserving binary compatibility with earlier models. Released in October 1975, the Nova 3 family advanced performance with options, including a standard 700-nanosecond cycle time and compatibility across its variants like the 4-slot Nova 3/4, 12-slot Nova 3/12, and protected-memory Nova 3/D. An optional cache-like high-speed memory board provided faster access, expanding capacity to 128K words and introducing for multi-user environments. The Nova 4 series, announced in 1977, further increased integration with models such as the single-board Nova 4/C, higher-performance Nova 4/S, and extended Nova 4/X, supporting up to 1 MB of memory through advanced MOS boards. It achieved a 400-nanosecond memory cycle time on the CPU board, with options for multiply/divide hardware and , while ensuring full with prior Nova software. In 1977–1978, Data General introduced the microNOVA family for embedded applications, featuring single-chip processors like the mN601 (NMOS-based, 8.3 MHz clock) and later mN602 (Nova 4-compatible). These emphasized serial I/O interfaces over parallel buses, with two 8-bit serial ports for simplified connectivity in distributed systems, and supported up to 128K words of . By the early 1980s, the Nova family had sold over 50,000 units worldwide, establishing Data General as a leading vendor during the .

Decline and Legacy

By the late , the Data General Nova faced intensifying competition from Digital Equipment Corporation's VAX line of 32-bit s, introduced in 1977, which offered greater addressable memory and processing power for emerging applications. This shift toward 32-bit architectures contributed to declining sales of the 16-bit Nova, exacerbating Data General's financial difficulties as the market demanded more scalable systems. In response, Data General pivoted to its series, initially launched as a 16-bit successor in 1974 but expanded with the 32-bit MV line by 1980 to directly challenge the VAX. Production of Nova models effectively ceased around this time, marking the end of the line as the company focused on for commercial and scientific . The Nova's legacy endures as a cornerstone of the minicomputer revolution, democratizing access to powerful computing by delivering affordable 16-bit performance that rivaled larger systems at a fraction of the cost. Its innovative single-board and use of medium-scale integration circuits set benchmarks for reliability and compactness, inspiring competitors such as Prime Computer's 16-bit systems and Hewlett-Packard's series in the 1970s market. By enabling widespread adoption in scientific, educational, and industrial settings, the Nova helped transition computing from mainframe dominance to distributed environments. Culturally, the Nova era shaped Data General's high-stakes engineering ethos, which chronicled in his 1981 Pulitzer Prize-winning book The Soul of a New Machine, detailing the intense development of the Eclipse MV/8000 but rooted in the innovative, deadline-driven culture forged during the Nova's rapid evolution. In the , preservation efforts have revitalized interest in the Nova, with hobbyists undertaking restorations such as the 2024 project on a Nova II system deployed in Arctic research environments. channels like Tech Tangents have documented repairs and software revival for the 1975 microNOVA variant, culminating in a functional demonstration video on May 24, 2025. Online resources, including the datageneral.uk archive, provide extensive documentation, schematics, and emulator tools to support community-driven maintenance of Nova hardware. The Nova's accumulator-based , featuring four 16-bit accumulators for efficient data manipulation, influenced early designs by emphasizing compact, versatile register sets that echoed in accumulator-centric chips like the Intel 8080. This conceptual foundation contributed to the transition from minicomputers to personal computing, with Nova-inspired elements appearing in systems like the and early Apple prototypes.

Architecture

Processor Design

The Data General Nova processor employed a 16-bit word , enabling efficient handling of in whole words rather than bytes, which accelerated transfers and arithmetic operations. At its core, the design featured four 16-bit accumulators, designated AC0 through AC3, which served as the primary registers for manipulation and temporary storage. AC2 and AC3 could additionally function as index registers to support indirect addressing modes. The processor also included a 15-bit for sequencing instructions, limiting the initial to 32,768 words (64 KB of storage). The Nova adopted a load-store , distinguishing it from register-memory designs prevalent in contemporaries like the PDP-8; memory access instructions (such as load and store) were separate from arithmetic and logic unit (ALU) operations, promoting a cleaner separation of data movement and computation. This structure required explicit loads to transfer data from memory into the accumulators before ALU processing could occur, enhancing modularity but increasing instruction counts for complex tasks. The ALU supported fundamental operations including , , logical , and XOR, all performed between accumulators or an accumulator and immediate values, with results stored back in the accumulators and a single-bit for overflow detection. Early models relied on hardwired control logic implemented with transistor-transistor logic (TTL) integrated circuits, providing straightforward execution paths for these operations. Later iterations, particularly the Nova 4 introduced in 1978, incorporated horizontally microcoded control to enable instruction prefetching and overlap, improving efficiency through more flexible sequencing of micro-operations. Clock speeds evolved significantly across the Nova family, reflecting advances in semiconductor technology and integration. The original Nova (1969) operated with a basic cycle time of approximately 2.6 microseconds using core , constrained by TTL circuitry. The Nova 1200 (1970) improved to a 1.2-microsecond cycle time, still based on TTL. Subsequent models like the (1970) achieved around 800 nanoseconds, while the Nova 3 (1975) used NMOS technology for cycle times around 700 nanoseconds. The Nova 4 culminated this progression with a 400-nanosecond cycle time, leveraging NMOS and four-way interleaving for sustained high performance. Central to the processor's design was a multiplexed address/ bus in the core, which shared lines for both addressing memory and transferring , optimizing pin count and board space in the compact while supporting (DMA) for I/O devices. This bus structure integrated seamlessly with the load-store paradigm, facilitating efficient communication between the CPU and memory subsystems.

Memory and I/O Systems

The Data General Nova initially featured magnetic core memory, with standard configurations ranging from 4 KB to 16 KB. Later models transitioned to semiconductor RAM for improved speed and reliability, beginning with the SuperNOVA in 1970; the Nova 2 series supported up to 64 KB and expanding to 1 MB in the Nova 4 series. This shift allowed for larger addressable spaces while maintaining compatibility with existing core-based systems in hybrid configurations on select models like the Nova 3/12 and 3/D. Memory addressing in the Nova supported direct access to a 32 KB using 15-bit logical addresses from the processor. For expansion beyond this limit, memory banking was implemented via the (MMU) or Memory Management and Protection Unit (MMPU), which divided memory into 1K-word pages and enabled to access up to 128 K words. Later models, such as the NMOS variants, included optional parity bits—one per 16-bit word—for error detection, while the MMPU in the /D added protection features like memory access validation, I/O safeguards, and runaway deferral to prevent unauthorized or erroneous operations. The Nova's I/O system utilized 6 to 12 direct channels, configurable through the system's slots, allowing programmable interfacing with external devices. A standard (DMA) channel was included across all models for efficient data transfers between memory and peripherals, with enhancements in the and later series providing higher-speed options up to 1 MHz transfer rates in the Nova 4. Standard peripherals connected via these channels included teletypes for console interaction, paper tape readers and punches operating at speeds up to 400 characters per second, and disk drives with capacities such as 25 MB fixed-head units or cartridge-based subsystems akin to the RL01 format offering 10 MB per drive. Custom expansion boards were also supported for industrial control applications, integrating sensors and actuators directly into the I/O framework. System expansion relied on a modular backplane design within 19-inch rack-mountable chassis, accommodating up to 20 slots for memory, I/O, and processor modules, with options for additional chassis to extend capacity in larger configurations like the Nova 3/12's 12-slot base. The processor bus connected these modules, facilitating shared access to memory and I/O resources without requiring extensive rewiring.

Programming Model

The programming model of the Data General Nova centered on a minimalist register set designed for efficient 16-bit operations, emphasizing accumulators for data manipulation and control. The original Nova processors featured four 16-bit accumulator registers (AC0 through AC3), which served as the primary locations for arithmetic, logical, and data transfer operations; AC2 and AC3 could additionally function as index registers for addressing. A 15-bit program counter (PC) managed instruction fetching, while a single-bit carry flag (often denoted as CRY) captured overflow from arithmetic and logical instructions. There was no dedicated skip flag register; instead, skip conditions were handled via conditional instructions that incremented the PC by two, effectively skipping the next instruction based on flags like zero, carry, or sign. Later models, such as the Nova 3 introduced in 1975, extended this set with a 15-bit stack pointer (SP) and frame pointer (FP) to support hardware-managed stacks, maintaining backward compatibility with earlier code. Addressing in the Nova was flexible yet constrained to a 15-bit memory space (32,768 words), with modes optimized for locality and to minimize instruction size. Direct addressing used an 8-bit displacement field (octal 000 to 377, or -128 to +127 in signed interpretation) relative to the current page or page zero, allowing access to 256 words without additional overhead. Indirect addressing enabled deferred resolution by fetching the effective address from , supporting multi-level up to eight levels in some implementations. Autoindexing (or indexed addressing) added the signed displacement to the contents of AC2 or AC3 before accessing , facilitating array traversal; deferred indirect combined with indexing for complex pointer operations. These modes were encoded in the instruction's upper bits, with the X field (bits 13-12) selecting between page zero/relative (00/01) and indexed via AC2/AC3 (10/11). Stack operations relied on software conventions in early Nova models, as there was no hardware stack pointer initially; programmers typically used AC3 or dedicated locations (e.g., 0 and 1 for vectors) for temporary storage and returns. The Jump to Subroutine (JSB) instruction provided hardware support by storing the return address (PC+1) in AC3 and jumping to the target, enabling nested calls through software stack management; interrupts did not automatically use the stack, requiring explicit handler saves. With the , hardware stacks became integral, using the SP to point to the top of a 256-word LIFO region in for operations, while the delimited frames for variables and parameter passing during subroutines—enhancing efficiency without altering base JSB semantics. This evolution preserved subroutine compatibility across the family. The Nova handled data primarily as 16-bit two's-complement signed integers or unsigned logical words, with no native byte operations—bytes were extracted via masking and shifting within words, assuming big-endian layout. Arithmetic and logical instructions operated on these full words, supporting addition, subtraction, AND, OR, and shifts, with the propagating for multi-word operations. was absent in hardware and emulated in software using double-word (32-bit) formats with a 7-bit exponent and 24-bit mantissa, or extended 64-bit versions; such emulation was common in scientific applications but incurred performance overhead. Binary compatibility was a of the Nova design, ensuring that from earlier models (e.g., original Nova or Nova 2) executed unchanged on successors like the or microNOVA, as extensions such as the stack registers and new instructions were optional and did not modify the core 16-bit architecture or base instruction encoding. This allowed seamless upgrades in deployments, with later processors emulating any missing features via where needed.

Instruction Set

The Data General Nova's instruction set is designed for a 16-bit , where each instruction occupies a single 16-bit word. The high three bits (bits 15-13) typically determine the instruction class: 000 for memory reference instructions (with low 13 bits encoding operation, , and an 8-bit displacement), 011 for I/O instructions (with low 13 bits specifying accumulator, transfer type, control action, and a 6-bit device code), and arithmetic/logical instructions identified by bit 0 set to 1 (with bits 15-1 encoding source/destination accumulators, operation, shifts, carry handling, and skip conditions). for memory reference include (page zero or current page), indexed (using AC2 or AC3), and indirect, supporting a 12-bit effective range. The base set comprises approximately 50 instructions through combinations of these fields, without exposure of underlying operations.

Memory Reference Instructions

These instructions handle data movement between memory and the four accumulators (ACs), as well as program flow control and memory modification, operating on the specified effective address computed from the displacement and mode bits (bits 8-10: 00 for page zero unsigned, 01 for current page signed, 10 for AC2 index, 11 for AC3 index; bit 7 for indirect if set). They form the core of load/store and branching operations in the programming model.
MnemonicOctal Opcode PrefixFormat (Bits 15-13 = 000)Behavior
JMP000 [mode] [disp]Bits 12-10 = 000Unconditional jump to effective address; PC set to that location.
JSR001 [mode] [disp]Bits 12-10 = 001Jump to subroutine: PC + 1 stored in AC3, then jump to effective address.
ISZ010 [mode] [disp]Bits 12-10 = 010Increment memory at effective address by 1; skip next instruction if result is zero.
DSZ011 [mode] [disp]Bits 12-10 = 011Decrement memory at effective address by 1; skip next instruction if result is zero.
LDA[AC]00 [mode] [disp]Bits 15-13 = 000, bits 12-10 encode AC and load (e.g., 000 for AC0 LDA), bit 9 = indirect, bits 8-7 = mode (00 page zero, 01 current page, 10 AC2 index, 11 AC3 index), bits 7-0 = 8-bit signed displacementLoad contents of effective address into specified AC; memory unchanged.
STA[AC]01 [mode] [disp]Bits 15-13 = 000, bits 12-10 encode AC and store (e.g., 100 for AC0 STA), bit 9 = indirect, bits 8-7 = mode (00 page zero, 01 current page, 10 AC2 index, 11 AC3 index), bits 7-0 = 8-bit signed displacementStore contents of specified AC into effective address; AC unchanged.
These instructions execute in 2-3 memory cycles, depending on and .

I/O Instructions

I/O instructions manage data transfer and control signals to up to 64 peripheral devices, using three 16-bit buffers (A, B, C) per device. The format specifies the accumulator (bits 12-11), transfer type (bits 10-8), control action (bits 7-6: 00 none, 01 set busy/clear done, 10 clear busy/done, 11 pulse), and device code (bits 5-0, 00-77). Transfers move data between the AC and the selected buffer; skips test device status flags (busy or done). The CPU is treated as device 77 for control functions.
MnemonicOctal PrefixTransfer (Bits 10-8)Behavior
DIA3[AC]1 [ctrl] [dev]001Input data from device buffer A to specified AC.
DOA3[AC]2 [ctrl] [dev]010Output data from specified AC to device buffer A.
DIB3[AC]3 [ctrl] [dev]011Input from buffer B to AC.
DOB3[AC]4 [ctrl] [dev]100Output from AC to buffer B.
DIC3[AC]5 [ctrl] [dev]101Input from buffer C to AC.
DOC3[AC]6 [ctrl] [dev]110Output from AC to buffer C.
SKP3[AC]7 [cond] [dev]111Skip next instruction based on condition: 00 if busy=1 (SKPBN), 01 if busy=0 (SKPBZ), 10 if done=1 (SKPDN), 11 if done=0 (SKPDZ).
These provide asynchronous device handling without dedicated I/O processors.

Arithmetic and Logical Instructions

These operate on the four 16-bit accumulators, performing and bitwise logic between source and destination ACs (bits 1-2 source, bits 3-4 destination). Bit 0 = 1 identifies the class. Additional fields include function (bits 5-7), shift (bits 8-9: 00 none, 01 rotate left 1, 10 rotate right 1, 11 swap bytes), carry control (bits 10-11: 00 ignore, 01 clear to 0, 10 set to 1, 11 complement), skip control (bits 13-15 encoding 8 conditions like always skip, skip if result zero, skip if carry set), and a no-load bit (bit 12=1 to skip loading destination). Results may affect a 1-bit .
MnemonicFunction (Bits 5-7)Behavior
ADD000Destination += source (+ carry if set); supports signed/unsigned.
SUB001Destination -= source (+ carry if set).
AND010Destination = destination AND source.
IOR011Destination = destination OR source (inclusive).
XOR100Destination = destination XOR source.
COM101Destination = ~source (complement).
NEG110Destination = -source ( negate).
MOV111Destination = source (move).
INC011 (variant)Destination += 1 (increment).
CLR000 (with clear)Destination = 0 (clear).
Shifts and skips enhance conditional execution and manipulation efficiency. These execute in one cycle, emphasizing accumulator-centric operations.

Special and Control Instructions

Special instructions are encoded as I/O instructions to the CPU device ( 77) or operate variants, handling control without reference. They include no-operation (NOP, operate with MOV AC0 to AC0 and no skip), halt (HLT: DOC 00 to device 77, stopping execution), and shifts like SHL/SHR (via rotate controls in operate). Interrupt enable/disable (/INTDS: NIO S/C to 77), mask set (MSKO: DOB to 77), and acknowledge (INTA: DIB from 77, loading vector to AC) manage the interrupt . Read switches (READS: DIA from 77 to AC) loads front-panel . These ensure basic management within the base set.

System Features

Interrupts and Handling

The Data General Nova featured a 16-level priority interrupt system designed to handle operations efficiently, with levels numbered 0 through 15. Each level corresponded to a bit in a 16-bit mask register, allowing software to enable or disable selectively by setting or clearing the appropriate mask bits using the MSKO instruction. Devices were assigned to specific levels based on their wiring to the I/O bus positions, ensuring prioritized handling where higher levels (lower numerical values) took precedence. Interrupt requests were managed through a hardware daisy-chain mechanism on the I/O bus, where devices were connected in series to establish priority among those at the same level; the device closest to the processor in the chain gained access first if multiple requests occurred simultaneously. The ION (Interrupt On) and IOFF (Interrupt Off) instructions, encoded as NIO S 0,CPU (octal 060177) and NIO C 0,CPU ( 060277) respectively, controlled the global enable flag, disabling further interrupts upon entry to a handler to prevent nesting until explicitly re-enabled. Upon an occurrence, the hardware automatically saved the (PC) to memory location 0 () and performed an indirect jump through location 1 () to the start of the common routine. For handling across the 16 levels, the common routine dispatched to level-specific handlers using software pointers in page zero, based on the interrupting level determined from the device or mask. The handler then performed a software context save, storing the accumulator registers (AC0-AC3), , and other state to a designated area, as the hardware provided no automatic stacking beyond the PC; restoration occurred symmetrically before returning via a JMP instruction to the saved PC. In the SuperNOVA model, (DMA) operations integrated seamlessly with the system, using dedicated data channels that could request upon transfer completion or error, maintaining priority over standard program while adhering to the same and daisy-chain protocols. Additionally, a non-able power-fail was provided via an optional power monitor circuit, which detected impending power loss and forced an to allow software to perform emergency saves during the brief delay before shutdown, bypassing the standard and daisy-chain. This design, while efficient for its era, imposed limitations such as reliance on software for complete context management in multilevel scenarios, potentially increasing handler latency in complex environments.

Front Panel and Diagnostics

The front panel of early Data General Nova models, such as the Nova 1200, provided a direct physical interface for manual system operation and troubleshooting, featuring a row of 16 LEDs (or incandescent lamps in early models) that displayed memory or register contents in binary format for visual inspection of 16-bit words. Complementing this were 16 toggle sense switches positioned below the grid, used to set specific addresses or data values for entry into the system. These elements allowed operators to interact with the machine at a low level, examining and modifying internal states without external peripherals. Key controls on the panel included push-button switches for EXAM/DEP (examine/deposit), which enabled reading the contents of a selected location or register onto the and writing values from the switches into , respectively; RUN/STEP for initiating continuous program execution or single-stepping through instructions; RESET to halt the processor and clear pending operations; and an enable button to arm the system for external signals. Accumulator selector switches (for AC0 through AC3) worked in conjunction with the deposit and examine functions, directing switch inputs to specific registers or displaying their values on the LEDs. For instance, activating the AC0 deposit switch loaded the sense switch pattern directly into accumulator 0, while the examine counterpart transferred the accumulator's contents to the display. Diagnostics were integrated into the panel through dedicated error lights signaling conditions like parity failures, carry overflow, or direct channel activity, providing immediate visual feedback on hardware issues. Built-in exercisers for and CPU testing could be invoked via panel controls, cycling through read/write patterns to detect faults in core or processor logic without requiring software intervention. User interaction extended to bootstrap loading, where operators manually entered a short loader routine using the sense switches and deposit functions to initialize the system from paper tape readers or ROM-based devices, establishing the initial before full operation. Subsequent models simplified the front panel design to reduce complexity and cost. The , for example, employed a more compact layout with a single row of 16 data LEDs, status indicators for run mode, memory power, parity errors, and conditions, and streamlined toggle switches for essential examine/deposit and step operations, while retaining compatibility with core functions. In the embedded microNOVA variant, the panel became optional, often replaced by a compact hand-held unit featuring only power/reset/run switches, basic indicator lights, and minimal capabilities to suit space-limited applications.

Performance Characteristics

The Data General Nova series exhibited progressive improvements in performance across its models, primarily through reductions in memory cycle times and enhancements in instruction execution efficiency. The original Nova, introduced in 1969, featured a core memory cycle time of 2.6 microseconds per word, enabling basic fixed-point arithmetic operations such as addition in approximately 5.9 microseconds. Subsequent iterations accelerated this: the Nova 1200 series reduced the cycle time to 1.2 microseconds, the Nova 2 series to 1.0 microsecond, and the Nova 800 and Supernova models to 0.8 microseconds for core memory, with bipolar semiconductor options in the Supernova achieving 0.3 microseconds. By the Nova 4, released in 1978, the cycle time reached 400 nanoseconds with four-way memory interleaving, allowing typical instruction executions like stores in 400 nanoseconds and adds in 200 nanoseconds. These advancements translated to effective throughput rates approaching 0.5 million (MIPS) for basic operations in later models, though actual performance varied with memory type and workload. Benchmark results underscored the Nova's capabilities relative to its era. In Whetstone benchmarks, which measure floating-point performance, the original Nova achieved around 0.016 million Whetstone instructions per second (MWIPS) using software-implemented floating-point arithmetic, scaling to 0.068 MWIPS with hardware support in models like the Nova 840. The Nova 3/12 variant performed at 0.014 MWIPS in Fortran single precision, while later Eclipse derivatives (successors to the Nova line) reached 0.45 MWIPS with hardware floating-point, representing roughly a 4x improvement over the original Nova. Direct memory access (DMA) throughput also improved, from 285,500 words per second input in the Nova 800 to 1.25 million words per second in Supernova models with high-speed options. Compared to contemporaries, the Nova series provided superior integer mathematics performance over the DEC PDP-8, benefiting from its 16-bit architecture versus the PDP-8's 12-bit design, which enabled roughly 2-3 times faster processing for equivalent tasks at similar cycle times. It remained cost-competitive with the DEC PDP-11, offering about 40% lower pricing for comparable configurations while delivering equivalent or better price/performance in real-time applications. Key performance factors included initial memory access latencies of 800 nanoseconds in early core-based systems, reduced to 700 nanoseconds in Nova 3 , which minimized bottlenecks in compute-intensive workloads. Later models like the incorporated overlapped fetch-execute cycles, further boosting effective speed by up to 50% over predecessors. Power consumption typically ranged from 175 to 725 watts across configurations, averaging around 500 watts for a fully equipped rack-mounted system, which supported efficient deployment in and industrial environments with standard single-phase power. This heat dissipation, while manageable via rack ventilation, highlighted the trade-offs of TTL-based logic in minicomputers.
ModelMemory Cycle TimeExample Add Time (Fixed-Point)Relative Performance (vs. Original Nova)
Original Nova2.6 μs5.9 μs1.0
Nova 12001.2 μsN/A2.5
Nova 21.0 μs1.0 μs4.5
Supernova (Core)0.8 μs1.6 μs7.0
Nova 40.4 μs0.2 μs~10x (est.)

Software and Applications

Operating Systems and Software Ecosystem

The primary operating system for the Data General Nova was RDOS (Real-Time Disk Operating System), released in 1970 as a real-time multitasking environment supporting up to 32 processes and up to 64K words of . RDOS provided file capabilities for disk drives, including support for multiple controllers and up to four drives per controller, enabling efficient data storage and retrieval in multi-user configurations. It facilitated program development through integration with compilers and utilities, emphasizing low-latency task switching suitable for industrial and scientific applications. Data General developed several programming languages for the Nova, including Extended BASIC, an interpreter based on the Dartmouth BASIC standard with extensions for graphics output and direct I/O operations to peripherals like terminals and plotters. and compilers were available, supporting scientific with features like and compatibility with RDOS file systems for . implementations, such as Interactive COBOL, catered to business applications with indexed sequential access method (ISAM) support for database management. The assembler, featuring macro capabilities and a syntax using directives like .ZREL for page-zero relocation, allowed low-level programming with symbolic tools. Utilities for the Nova ecosystem included text editors for source code management, symbolic debuggers for runtime analysis, and cross-compilers running on host systems like larger Data General machines to generate Nova binaries. A library of supporting programs encompassed sorting routines, data conversion tools, and communications packages for network integration, enhancing productivity in development environments. Third-party efforts have preserved the Nova software ecosystem through emulators, such as the Wild Hare Nova and Eclipse emulator released in 2022, which supports running RDOS and legacy applications on modern Windows and platforms under a hobbyist license. The open-source simulator also emulates the Nova, allowing execution of original software distributions for research and restoration. Preservation sites like Bitsavers.org host scanned manuals and binaries, addressing gaps in historical documentation related to early software ports and bugs by providing access to original artifacts.

Programming Examples

Programming examples for the Data General Nova typically involve low-level to demonstrate core instructions for I/O, arithmetic, and logical operations. These snippets highlight the use of the machine's four accumulators (AC0-AC3), memory reference instructions like LDA and JSR, I/O transfers via device codes, and (ALU) operations. The Nova's assembly format uses representations for , with directives like .OCT for constants and comments for clarity. All examples assume a basic configuration without optional hardware extensions like multiply/divide units. A simple output program, akin to a "Hello World," uses I/O instructions to send characters to the teletype (TTO device code 10 ). This involves loading message bytes into an accumulator, checking device readiness with SKPBZ (skip if busy zero), and outputting with DOA (data out to buffer A), often with wait loops for the slow peripheral. The message can be stored as packed ASCII (two characters per word), unpacked via shifts or masks, and output byte-by-byte until a terminator. For 16-bit unsigned multiplication without hardware support, a software routine implements the shift-and-add (or Booth) algorithm. It uses separate accumulators for multiplicand, multiplier, partial product, and loop counter. The routine initializes the product to zero, then for each bit of the multiplier (starting from LSB), conditionally adds the multiplicand to the product if the bit is set, shifts the multiplier right, and repeats for 16 bits. This leverages ADD, SHR (shift right), and conditional jumps like JCN (jump on condition, e.g., zero or carry). The 17-bit ALU handles carries, but the result is truncated to 16 bits. To print the accumulator contents in binary, a routine copies the value to a working accumulator, then iteratively shifts right to isolate each bit (starting from MSB by using LSH or equivalent for positioning), tests the low bit with AND #1 or carry after SHR, conditionally loads and outputs '0' ( 060) or '1' (061) via an I/O subroutine, and loops 16 times using ISZ for counting. The output uses device skips and data out instructions, with a carriage return terminator. Immediate constants are 8-bit limited, so larger values like 16 () are loaded via LDA #20 ().

Notable Deployments

The Data General Nova found significant application in scientific laboratories for data acquisition and analysis tasks. For instance, NASA employed Nova systems in prototype configurations for processing earth resources data, such as in the Earth Resources Data Analysis System (ERDAS) project, where a Nova 3/12 minicomputer with 32K words of core memory handled image and sensor data integration. Similarly, Nova computers supported remote sensing and computational tasks in NASA facilities, leveraging their compact design and I/O capabilities for real-time data handling. In industrial settings, the Nova was deployed for process control in and sectors, benefiting from its robust I/O interfaces for integration. One early example involved a Nova system intended for Oil's operations in , to manage data processing in oil-related applications, highlighting its suitability for harsh industrial environments. The system's modular enabled custom expansions for analog-to-digital conversion and control loops in refineries and production lines. Educational institutions adopted the Nova for its affordability and accessibility in curricula, particularly in teaching programming and operating system fundamentals. Universities equipped departmental computing centers with Nova systems to support hands-on instruction in and graphics, making it a staple in mid-1970s academic environments. For military and embedded applications, the microNOVA variant was integrated into and under 1970s defense contracts. A notable deployment occurred in the U.S. Air Force's Air Intercept Controller , where the microNOVA processed inputs from trackballs and displays for tactical and control. Key OEM integrations showcased the Nova's versatility in specialized fields. In , EMI's pioneering CT scanners from 1973 utilized the Nova 820 with 32K memory for image reconstruction, enabling scan times of about 7 minutes per slice and revolutionizing diagnostic capabilities. This integration demonstrated the Nova's role in high-impact, real-time computational tasks beyond general computing.

References

Add your contribution
Related Hubs
User Avatar
No comments yet.