Data General Nova

The Data General Nova was a popular 16-bit minicomputer built by the United States company Data General starting in 1969. The Nova packed enough power to do most simple computing tasks and was packaged into a single rack mount case. The Nova became hugely popular in science labs around the world, and eventually 50,000 units were sold. The Nova was followed by the Eclipse, which was similar in most ways but added virtual memory support and other features required by modern operating systems.

deCastro and the Nova’s origin
Edson deCastro was the Product Manager at Digital Equipment Corporation (DEC) of their pioneering PDP-8, a 12-bit computer generally considered by most to be the first true minicomputer. DeCastro was convinced, however, that it was possible to improve upon the PDP-8 by building a 16-bit minicomputer on a single board. Ken Olsen was not supportive of this project, so deCastro left DEC along with another hardware engineer, Richard Sogge, and a software engineer, Henry Burkhardt III, to found Data General (DG) in 1968. The fourth founder, Herbert Richman, had been a salesman for Fairchild Semiconductor and knew the others through his contacts with Digital Equipment.

The next year DG released the 16-bit Nova at a base price of US$3,995, advertising it as “the best small computer in the world.” The basic model was not very useful “out of the box,” and adding RAM in the form of core memory typically brought the price up to $7,995.

In 1969, Data General shipped a total of 50,000 Novas at $8000 each. The Nova was one of the first 16-bit minicomputers and led the way toward word lengths that were multiples of the 8-bit byte. It was first to employ medium-scale integration (MSI) circuits from Fairchild Semiconductor, with subsequent models using large-scale integrated (LSI) circuits. Also notable was that in later models the entire central processor was contained on one 15-inch printed circuit board.

The Nova’s biggest competition was from the newly-born DEC PDP-11 computer series, and to a lesser extent the venerable DEC PDP-8 systems. It has been said that the Nova was pretty crude compared to its competitors; but it was quite effective and very fast for its day, at least at its low-cost end of the market.

Besides offering 16 bits compared to the 12 bits of the PDP-8, another big innovation of the Nova was in packaging. The original Nova CPU was built on only two large 15×15 inch (38×38 cm) printed circuit boards, which could be run off on an assembly line with no manual wiring required. This greatly reduced costs over the rival PDP-8 and PDP-8/I, which consisted of many smaller boards that had to be wired together. The larger-board construction also made the Nova more reliable, which made it especially attractive for industrial or lab settings.

A further improvement on the Nova design followed the next year, the SuperNOVA. The SuperNOVA included a number of improvements that dramatically improved performance over the original. This included the use of ROM for library software that could be run much faster than the same code in the normal core memory, due to the latter’s need to be written immediately after being read. Additionally the system included a new set of core with an 800 ns cycle time, faster than the original’s 1200 ns version. Finally the SuperNOVA also replaced the earlier model’s 4-bits-at-a-time math unit with a new 16-bit parallel version, speeding math by up to four times.

Soon after the introduction of the SuperNOVA, another version featuring semiconductor memory in place of core was introduced, the SuperNOVA SC. The much higher performance memory allowed the CPU, which was synchronous with memory, to be further increased in speed to run at a 300 nanosecond cycle time (3.3 MHz), which made it the fastest minicomputer for over a decade following its introduction.

Later versions
Further improvements in the line followed in 1970/1 with a pair of machines that replaced the Nova/SuperNOVA, the Nova 1200 and Nova 800 series. The 1200 used the original’s slower 1200ns core while the 800 featured the SuperNOVA’s 800ns core, explaining the somewhat confusing naming where the lower number represents the faster machine. Like the earlier models, the 1200 used a 4-bit math unit while the 800 used the SuperNOVA’s 16-bit unit. Both models were offered in a variety of cases, the 1200 with seven slots, the 1210 with four and the 1220 with fourteen. The 840, first offered in 1973, also included a new paged memory system allowing for up to 17-bit addresses. 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.

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″x15″ boards to implement the CPU and its memory, the Nova 2 fit 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, seven and ten slots.

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.

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. However continued demand led to a Nova 4 machine, this time based on four AMD 2901 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 relied on the terminal to emulate a console when needed. There were three different versions of the Nova 4, the Nova 4/C, and the Nova 4/S and Nova 4/X. The Nova 4/C was a single board implementation that included all of the memory (16 or 32 K words) on board. The Nova 4/S and 4/X used separate memory boards. The Nova 4/X had the on board Memory Mapping Unit (MMU) enabled to allow up to 128 Kwords of memory to be used (the MMU actually was on 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 two instructions from memory before they were needed.

microNOVA
Data General also produced a series of single-chip implementations of the Nova processor as the microNOVA. Changes to the bus architecture limited speed dramatically, to the point where it was about one-half the speed of the original Nova. The original microNOVA with the “mN601” processor shipped in 1977. It was followed by the microNOVA MP/100 in 1979, which reduced the CPU to a single VLSI chip, the mN602. A larger version was also offered as the microNOVA MP/200, shipping the same year.

The microNOVA was later re-packaged 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.

Nova’s legacy
The Nova influenced the design of both the Xerox Alto (1973) and Apple I (1976) 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.

As of 2004 there are still 16-bit Novas and Eclipses running in a variety of applications worldwide, including air traffic control. There is a diverse but ardent group of people worldwide who restore and preserve legacy 16-bit Data General systems.

Processor design
The Nova, like the PDP-8 was an accumulator-based architecture. It had four 16-bit accumulator registers, of which two (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. A year after its introduction the processor was upgraded to use a full 16-bit parallel math unit, 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
The first models were available with 4K words of magnetic core memory as an option, one that practically everyone had to buy, bringing the system cost up to $7,995. Even here DG managed to innovate, packing several planes of very small core and the corresponding support electronics onto a single standard 15 x 15 inch 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 0.2 MHz, 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 competitive machines. In addition to its dedicated I/O bus structure, the Nova backplane had wire wrap pins that could be used for non-standard connectors or other special purposes.

Programming model
The instruction format could be broadly categorized into one of three functions: 1) register-to-register manipulation, 2) memory reference, and 3) input/output. Each instruction was contained in one word. The register-to-register manipulation was almost RISC-like in its bit-efficiency; and an instruction that manipulated register data could also perform tests, shifts and even elect to discard the result. Hardware options included an integer multiply and divide unit, a floating-point unit (single and double precision), and memory management.

The earliest Nova came with a BASIC interpreter on paper 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.

Hello world program
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, by Toby Thain ; 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 .txt /Hello, world.<15><12>/ ; that's CR LF 	0 ; flag word to end string .end start

16-bit multiplication
Basic models of the Nova came without built-in hardware multiply and divide capability, to keep prices competitive. The following routine multiplies two 16-bit words to produce a 16-bit word result (overflow is ignored). It demonstrates combined use of ALU op, shift, and test (skip). Note that when this routine is called by jsr, AC3 holds the return address. This is used by the return instruction jmp 0,3. An idiomatic way to clear an accumulator is sub 0,0. Other single instructions can be arranged to load a specific set of useful constants (e.g. -2, -1, or +1).

mpy:	; multiply AC0 <- AC1 * AC2, by Toby 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
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 initialised 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</tt> = sixteen), and character constants could be encoded as e.g. "0</tt>.

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

Emulating a Data General Nova
Nova assembly language programs can be run under Bob Supnik’s SIMH emulator, in RDOS. Of the above examples, only Hello, world is a complete program. It includes the necessary directives for a successful assembly and generation of a runnable program.

Stepwise instructions

Start the Nova emulation and boot RDOS following the instructions under “Nova and Eclipse RDOS” in the file src/simh_swre.txt</tt> of the simh distribution. After booting, RDOS’ command prompt, R</tt>, should appear on the screen.


 * Before the first assembly on a newly setup RDOS system, the macro assembler’s default symbol definitions need to be configured using the following command:  mac/s nbid osid nsid paru</tt>
 * Create the assembly source file under RDOS: xfer/a $tti test.sr</tt> (the xfer</tt> command will accept input at the console and copy it to a disk file named test.sr</tt>; after entering the command, copy and paste (or type in) a complete assembly language program, and finish with control-Z).
 * Next, run the macro assembler on test.sr</tt> to create the object file test.rb</tt>: mac/l test</tt> (the /l</tt> [slash-ell] option enables the listing file test.ls</tt>, which can be copied to the console using the command type test.ls</tt> ).
 * The relocatable loader, rldr</tt>, takes the object file and creates the executable test.sv</tt> : <tt>rldr test</tt>
 * To run the program, type <tt>test</tt>

Before going further with serious experimentation, it can be convenient to check one’s programs at the PC using a suitable cross-assembler, such as the portable PDP-8/DG Nova cross-assembler listed in the External links section, before attempting execution in the RDOS environment.

RDOS hints


 * To have a directory listing of all files with basename <tt>test</tt>, type <tt>list test.-</tt> (note the hyphen, RDOS’ wildcard character)
 * Delete files with <tt>delete</tt> (this might be needed because <tt>xfer</tt> won’t replace an existing file)
 * A running program can usually be interrupted with Control-A
 * To exit RDOS, type <tt>release %mdir%</tt>
 * Quit simh at its prompt with <tt>q</tt>