In the Hungarian People’s Republic, the stockpile of unsold Enterprises was sipped-up as hot cocoa. The price was affordable and quite competitive compared to other western computer models of the time. In 1987, when the Elan sold for 16.900 Ft in the Centrum Otthon Áruház, the conversion rate for $1 was 47.48 HUF. Out of curiosity, you can consult the Enterprise catalog and the Otthon Áruház order slip here.
As a consequence, a vibrant and talented Hungarian ecosystem developed over the years. Among their hardware and software productions, we can find SD card readers, replacement power module, the EnterMice mouse interface, graphical & audio demos, games, and of course, they booted SymbOS successfully on the Elan. We are talking 4 MHz Z80A here – sure enough, they also overclocked it (@7.12 MHz).
The excellent design of the Enterprise makes many of these hacks possible in the first place. Think about the Enterprise as the 8-bit computer that rules them all. For example, porting a Spectrum or a CPC game is facilitated by the flexibility of the graphic ASIC (Nick). Even a hardware ZX Spectrum emulator was available for the Enterprise, giving immediate access to Sinclair’s entire software library. For example, the extraordinary graphical capabilities of the machine (672 x 512 pixels in 2 colors, down to 180 x 80 pixels in 256 colors), its video memory layout, and the possibility of mixing various graphic modes on the same screen make the Enterprise a great digital canvas to paint on.
Because of its success there, Hungary remains the best place to find technical information on the Enterprise. Even the historical Videoton company designed a TVC lineup strongly inspired by the Elan. Luckily for you, Hungarians are good English speakers, so most of the material exists in Shakespeare’s dialect. For the other ones, Google translate will do marvels. Nevertheless, I definitively recommend digging deep into this website. And if you have the soul of a historian, the historical section here. It is a gold mine! As an example, the enterprise launch plan can be viewed here. Last but not least, if you happen to drop by Budapest in the future – that is after travels are possible –, you could join one of the six yearly gatherings of the Enterprise Klub here.
If you want to try an Enterprise, you can download and install one of the two main existing emulators: EP21 and EP128emu. The latter, although less intuitive to set-up, suited my needs better. You should try then out both. One cool aspect of EP128emu is its capacity to access your floppy drives and folders under Windows. This access is possible because Elan’s DOSes are compatible with MS-DOS formats. Hereafter, I will give you a few tips to make your experience enjoyable. Once the memory has been tested, and the colorful enterprise invite is displayed, press a key. This should typically land you into IS BASIC (assuming that the IS-BASIC ROM is inserted).
Then you can start typing your code. You can use AUTO to request automatic line numbers (press RETURN on the current blank line to disable AUTO). Once your program is running, STOP it using F11. Note that you can redefine the keyboard mapping as needed (ALT+I). To mount a disk image – you can find several in the sites I linked –, press ALT+D and select one of the drives; let’s say A:. Click on one of the images, then press Apply (and can close the dialog box). You can now switch from BASIC to EXDOS by typing :exdos. Then, you can cd into the drive of your choice by typing B: to access drive B, for example. You can now load a file like a load sldemo.com. If you switch to BASIC again, the current drive will be active. Depending on the configuration, you can also change to the ISDOS and its 80-columns resolution by typing :isdos. Finally, you can type help in any of the DOSes to list the version and the name of the components you can switch to and from. These tips should be enough to start playing with EP128emu. One last point. Because IS BASIC is very rich as we have seen it several times, it has a significant setback. BASIC’s major weakness is slow execution speed, which is, therefore, even more, exacerbated here. Luckily, with an emulator, you can increase the memory size (beware to the boot check duration), add drives, and overclock the CPU. ALT+W activates the no-limit mode (ALT+E to retune at 100%).
As I mentioned earlier, the Enterprise has built-in support for the Intelligent Net, a feature part of the system’s original design in 1982. At the time, schools used ad-hoc networking technologies to exchange files between students and teachers. And, of course, every manufacturer willing to sell to the education market developed its own implementation. You may have heard about the Acorn Econet or the Thomson Nanoréseau. But contrary to these ad-hoc networks that are requiring custom hardware expansions, the Enterprise used the built-in serial interface (RS432) to build a network of up to 31 computers. Within the Enterprise’s OS (EXOS), two different drivers are handling the serial and the network traffic. However, because they are sharing the same hardware, only one can be active at a time.
As a consequence, before being able to use a network channel, the serial port must be closed. All the participant computers must be interconnected and powered-up to make the network work. Note that you can build a specific serial cable to talk to a PC. In which case, you will have to implement a software stack to abide by the EXOS protocol.
As a programmer, to use the Intelligent Net, you first have to pick a numerical ID for your machine (set net number x, with x between 1 and 32). You can query the current ID suing ask net number. To receive data from a system, you used load “net-0:”. To receive a program from a specific machine, replace the 0 with the right network address (load “net-x:”). On the transmitter side, a save “net-0:” suffices. Et voilà! As you may have guessed, ID 0 is the broadcast address of the network.
One can go further and treat the network as a channel. To open two-way communication, let’s say with system ID 5, you could open £110:”net-5:”. 110, is the channel number – or handle in modern lingo. With this handle, your program can use any IO instruction. To me, this level of abstraction is remarkable for the time. A similar concept is available for the graphics, which limits the need for only a few instructions/constructs to use up the computer’s capabilities. Well done, chaps!
OPEN £110:"NET-5:" PRINT £110:"Awaiting Message…" ! sends 5 the invite to send text FLUSH £110 CLEAR £110:NET LINE INPUT £110:A$ ! receives a message from 5 in variable A$ CLOSE £110 ! does a flush, and frees the buffers as well
In the listing above, as the use of flush and clear commands suggests, network communications are buffered. To send data, the buffer needs to be full (256 bytes), or the channel flushed. Similarly, receiving can only happen when the buffer is empty or cleared. Each net channel has two 256-byte buffers, one for transmit and one for receive. The receive buffers associated with different net channels are independent. They can be filled with data simultaneously from various systems (not in parallel though) when they are not full, of course.
Synchronous send and receive are easy to use but doesn’t make sense in a real application. To support background processing, you had to use soft interrupts. In IS BASIC, you used the exceptions and their handling routines. When network interrupts are unmasked (set interrupt net on), an exception is raised if data arrives through a network channel. The associated exception handler is then invoked, and besides disabling first, the network interrupts (set interrupt net off), it could process the message bytes. At the same time, this suspends the flow of the main program. Yeah, it’s a beautiful design, but not an SMP one 😊. A correct exception routine would poll the various network channels (ask net channel) until it gets a return code of 256, a.k.a. buffer empty. Only then, the routine could reenable network interrupts (set interrupt net on) and return.
As expected, interrupts are handled by EXOS behind the scene. EXOS is maintaining several system variables to do so. NET_IRQ can be set 0 or 1 to mask (1) or unmask (0) the interrupts raised by the network driver. To specify the channel information to the routines, EXOS uses the CHAN_NET variable. When the read operation of a buffer is finished, EXOS sets CHAN_NET to the lowest ID of the computers sending data – if any. This means that the lower your network address is, the higher priority is. Good to know! From an interface point of view, the network uses two outputs and two inputs. The output/input ports (maintained @ 0x0b7h for output and @ 0xb6h for input) mapping is as follows: b0: data out, b1: status out, b4: data in, and b5: status in. For networking, b1 is merged with b5, as well as b0 with b4, where they are treated independently for serial communications to achieve half-duplex.
Network packets have a header containing the emitter and receiver address as well at the packet’s length in bytes. Because there are no handshakes while broadcasting a message (target address = 0), the header contains a special so-called synchronization pattern. It is a repeating 4-bytes sequence that makes it possible for receivers to latch onto a packet even if they were busy when the broadcast has started. Noe that this may not work under certain timing conditions. For non-broadcast messages (target address != 0), the Direct Data Protocol is used (DDP). In DDP, acknowledgments can take place, which makes things easier and cleaner. On receive – by the targeted computer – the header is read and acknowledged to the sender (using the DATA line). If this ACK is received under 1ms, the rest of the block is sent. It is the receiver’s responsibility to compute and check the CRC and re-ACK the block. In case of errors, EXOS stipulates a detailed process to follow, which is interesting but out of the scope of this post. However, it suffices to know that if a crash happens in a participant while it is driving the network, then the entire NET is locked. Solution? Press the big red button (STOP). Just saying this sentence makes me smile. Creating an Intelligent Network compatible device, which in turn could talk to a modern computer, is a fun project. Maybe later!
The Elan Enterprise, or however you want to call it, was a bold design incepted by brilliant chess-playing brains during the early ’80s in Great Britain. It was way ahead of its competition, and as his creators wanted, it had obsolescence built out. Unfortunately, the company failed to deliver, and what was expected to be a success story ended as a fiasco. Too bad. At the same time, this makes the Enterprise one of the rarest and most sought-after home computers of the era. Almost 40 years later, I finally own one in my collection. As many legendary 8-bit retro computers, the Enterprise is still kicking and alive in 2020 thanks to a historical twist. If that stock of ~20K machines were not sent to Hungary, the Enterprise would certainly have faded away a long time ago. So, since we are thankful to the Magyars, I could not resist quoting an extract of a recorded QA session with Kemény János: Q: How would you define computer literacy? A: I believe that you are not computer literate unless you have written several programs of your own and have tried to debug them. Any bedroom programmer would agree with that!
Oh, by the way, the first golden rule of business is the one who has the gold rules. Enjoy!