8086tiny, un pequeño emulador de 8086 de código abierto

A día de hoy estamos habituados a tratar con emuladores como VirtualBox que ofrecen un amplio repertorio de instrucciones x86, de forma que sobre ellos se puede ejecutar prácticamente cualquier programa. Pero no todos los desarrollos van por ese camino.

8086tiny es una máquina virtual de código abierto escrita en C que emula el comportamiento de una máquina PC XT. Probablemente se trata de la máquina virtual x86 más reducida que existe cuyo código fuente ocupa tan solo 28000 lineas (casualmente el 8086 está compuesto de 29000 transistores), frente a las casi 6 millones de lineas que ocupa VirtualBox a día de hoy.

tiny8086 linux 0.1.5
Linux 0.1.5 en 8086tiny

A pesar de su reducido tamaño, 8086tiny ofrece la emulación de un procesador 8086 con una gran fidelidad e incluye soporte para periféricos como un teclado XT, disquetera, reloj, temporizadores, audio y gráficos CGA de Hercules. Esta máquina virtual es capaz de ejecutar programas como Autocad, Windows 3.0 y juegos antiguos.

tiny8086 windows 3
Windows 3.0 en 8086tiny

El emulador se puede compilar para ser ejecutado sobre prácticamente cualquier arquitectura de procesador y hasta el momento se ha conseguido ejecutar, no solo en procesadores de 32 y 64 bits x86 sino también en SoCs ARM con Android, el iPad 3 e iPhone 5S sobre iOS y Raspberry Pi.

tiny8086 flight simulator 4
Microsoft Flight Simulator 4 en 8086tiny

Al contrario de otros desarrollos, el camino que se ha decidido tomar para 8086tiny es el de mantener el código lo más reducido posible y mantenerlo abierto y a disposición del público a través de GitHub. De esa forma, los desarrolladores que lo necesiten lo pueden modificar para incluir repertorios de instrucciones que permitan ejecutar código de generaciones posteriores de x86 o nuevos periféricos como soporte para ratón.

tiny8086 lotus 123
Lotus 123 R2.4 en 8086tiny

Las hardware virtual del emulador es:
· Procesador Intel 8086/186.
· 1MB de RAM.
· Controlador de disquetera de 3.5″ para disquetes de 720kB y 1.44MB.
· Controladora de disco duro con soporte para una unidad de hasta 528MB.
· Tarjeta gráfica Hercules CGA con 64kB de memoria gráfica que permiten una resolución de 720×348 a 2 colores o 320×200 con 4 colores. Además admite modo texto con 80×25 lineas y 16 colores.
· Temporizador programable.
· Controlador para teclado de 83 teclas.
· Reloj en tiempo real.
· Altavoz de PC.

tiny8086 msdos
MS-DOS 6.22 en 8086tiny

El software necesario para su ejecución es este:
· Biblioteca con soporte para tiempo de ejecución de C.
· Para para mostrar los gráficos CGA hace falta la biblioteca multimedia SDL 1.2 aunque para el modo texto no es necesaria.

Los requisitos de hardware son realmente ridículos:
· El espacio disponible en disco necesario es de 20kB para el binario compilado, 6kB para la imagen de la BIOS y espacio para la imagen de un disquete que podrá ser de 720kB o 1.44MB.
· El consumo de RAM es de 1.5 MB.

8086tiny se ofrece en una recopilación de componentes que incluye el código fuente en C junto al Makefile, el código fuente de la BIOS junto a su binario, la imagen de un disquete de arranque de 1.44MB con FreeDOS y el juego Alley Cat.

El código fuente está disponible en la página de GitHub del proyecto. Los binarios precompilador y las instrucciones de compilación con gcc están en la web de descargas de 8086tiny.