Dioscuri makes digital objects immortal

Dioscuri takes its name from the Greek myth of the twins Castor and Pollux: one of them is mortal while the other becomes immortal. Symbolically this represents the idea behind emulation and long-term preservation: giving mortal digital objects their immortal equals.


Dioscuri offers a wide range of emulated computer components. The complete list is shown below:
  • 16/32-bit Intel 8086-based CPU (real-address mode only)
  • 1 MB RAM (expandable)
  • Storage devices: floppy, HDD
  • Input devices: XT/AT/PS2 compatible keyboard
  • Output devices: virtual screen
  • VGA video graphics adapter
  • DMA-support
  • IRQ-handling based on a Intel 8259 PIC
  • Timing mechanism based on an Intel 82C54 PIT and Crystal Clock
  • Real-time clock with integrated CMOS
  • System BIOS using Plex86/Bochs BIOS
  • Video BIOS using VGA LGPl’ed BIOS
All components can be configured in an XML-based configuration file. This file can be altered via an easy-to-use graphical user interface (GUI) or directly in the file itself. The emulation process can be started via the same GUI and takes the XML-file as input.


To develop an emulator for digital preservation, two main requirements have to be met: the emulator must be durable and flexible. Durability is essential for keeping the emulator sustainable for the long term. Flexibility is desired to ensure several different computer environments can be emulated with a minimum amount of effort. Based on a unique design that is defined by the Koninklijke Bibliotheek, National Library of the Netherlands in cooperation with emulation-expert Jeff Rothenberg, a Modular Emulator will be developed. The illustration below shows the following basic elements of this design:
  • Modular emulator
  • Universal Virtual Machine (UVM)
  • Controller
  • Module library
  • Emulator specification document (ESD)
Diocuri design

Modular emulator

The emulator is the core element of the design. The task of the emulator is to virtually recreate the hardware of the upper (emulated) platform in such a way that original software can run on it as it used to do on real hardware. Because of the versatility of hardware, system software and applications, the emulator needs to be flexible in its recreation of a particular environment. This can be achieved by designing the emulator in a modular structure. Each module emulates a specific hardware component, like processor, memory, keyboard, etc. The recreation of a platform can then be realized by combining all necessary modules. Changing the emulated platform can simply be done by changing the configuration of the modules. As technology moves forward, new modules can be created based on their analogy with actual hardware components.

Universal Virtual Machine (UVM)

By introducing an intermediate layer (UVM) between the current platform and the emulator, dependency on the underlying system is avoided. This offers more stability and less maintenance of the emulator as changes in the computer platform underneath the UVM do not have any (or have little) effect on the execution of the emulator. In the current implementation, Java has been chosen as the UVM.

Controller, module library and ESD

The controller interconnects all the elements in the model. It configures and controls the emulation process. The Emulator Specification Document (ESD) describes which modules are required to emulate the desired platform. Based on a particular ESD the controller selects the required modules from the module library and configures them. This has now been implemented as part of the GUI and config loaders, but will be extended in the near future.


From 2006 until 2008, development of the modular emulator was lead by software company Tessella Support Services plc. From 2008 onwards, Dioscuri is being further developed by the National Library of the Netherlands within the European project Planets and later on also the European project KEEP.

Although the focus is on building a full 32-bit emulator which is capable of running modern versions of MS Windows, the intermediate result is focused on a 16-bit emulator capable of executing MS DOS and earlier versions of MS Windows (3.x). Furthermore, support is available for (virtual) floppy disks, hard disks, input devices like keyboard, and a screen as output device. Moreover, the emulator can be configured easily to additional user requirements based on an XML file.

Java has been chosen as programming language. The main reason is its possibility to run Java code on a large variety of computer platforms using the Java Virtual Machine (JVM) without the need to recompile the source code. Recompilation is a risk factor since program code is adapted to a specific underlying computer platform. Although today’s compilers are very advanced, it can still result in different functionality of the same emulator compiled for different platforms. By avoiding this step, the emulator will be more stable and portable. Using the JVM instead provides similar results to the use of a UVM as discussed above.

Developing an emulator requires a thorough understanding of the computer platform that is to be emulated. Documentation is crucial. Although much information on computer devices is available, it is widespread over various sources. To ensure this information will not be lost, all documentation is centraly organised. this will be made available under the link documentation in the main menu.

Further reading: