Retro: a PC/XT emulator

Screen shot

Retro is a PC/XT emulator written in Java. It can boot DOS, Minix and Windows 2.0, and it runs many applications and games from the CGA era.

Getting Retro

Since Retro is written in Java, it is possible to run it from a web browser as a Java Applet. Follow the link below to test the emulator and play some old PC games:

Retro Demo Applet

To run Retro as a normal application, download the source code and/or the compiled JAR file from the table below.

Package File Date
Retro 0.4 source code retro-0.4.tar.gz 2007-12-31
Retro 0.4 JAR file retro-0.4.jar 2007-12-31
Retro 0.3 source code retro-0.3.tar.gz 2007-09-30
Retro 0.2 source code retro-0.2.tar.gz 2007-07-29
Retro 0.1 source code retro-0.1.tar.gz 2006-12-24

Improvements in version 0.4

  • Hardware-level emulation of the floppy disk controller.
  • Bugfixes in DMA, interrupt controller, timer.
  • Retro can now run Minix.


Retro is far from a polished product. Simple DOS programs work on it, but many things do not work at all. If you are looking for a complete and usable PC emulator, this is the wrong place; have a look at Qemu or JPC instead.

Feature Status
8086/8088 CPU done
Color Graphics Adapter (CGA) done, needs more testing
I8254 timer seems to work, needs testing
I8259 interrupt controller seems to work, needs testing
DMA controller seems to work, needs testing
keyboard controller done
custom BIOS code incomplete but seems to work
floppy drive BIOS-level emulation seems to work
floppy drive hardware emulation seems to work, needs more testing
harddisk missing
speaker missing
serial port missing
parallel port missing

Note that Retro emulates an IBM PC/XT, not a modern PC. It will never be possible to run modern (32-bit) operating systems on Retro.


You can start Retro directly from the JAR file:

  java -jar retro.jar --floppyaimg disk.img

where disk.img is a floppy disk image file of exactly 320k, 360k, 720k, 1200k, 1440k, or 2880k. The disk image is opened read-only by default. To override this, add '--floppyareadonly false' to the command line.

Configuration settings can be passed on the command line, as in the above examples, or through a configuration file. The sample file retro.cfg gives an overview of the configurable settings.

For best results, run the emulator on Linux with the Sun Java JRE 1.4.2 or later. Earlier JRE versions and non-Sun Java environments are in general too buggy; in particular there are many problems with keyboard events under X.
The emulator does run on Windows and MacOS, but the screen may look ugly because even the monospaced font tends to be variable width on these systems.


This project is currently not actively developed or maintained. It is just a hobby, not a product.

I plan to implement at least some of the features that are listed as missing in the table above. The long term goal is to get the simulation functionally as close as possible to an actual PC/XT. Efficiency and practical usability are not primary goals; several advanced and usable PC emulators are readily available, so it doesn't make sense to compete in that area.


Comments, suggestions, bug reports are welcome at joris (a)