Con BareMach quería saber si me podía llevar un emulador de PC a la Raspberry Pi.

En principio no debería ser muy difícil si conseguía compilarlo: ya había trabajado con Circle, una biblioteca para programar la Raspberry Pi sin sistema operativo. Pero también había que resolver el entorno donde se ejecutaría la emulación: la pantalla, el teclado, el acceso a los medios y el propio arranque de la Pi.

Primer intento: BluMach y el PCS 286

Empecé con la máquina que había desarrollado en BluMach, el Olivetti PCS 286. El primer problema fue el procesador: en PCem, 86Box y BluMach el 286 comparte código con el 386; están tan acoplados que tenía que arrastrar un montón de dependencias. Así que me fui directo a la implementación del 286 de MAME; total, esto era una prueba de concepto. Llegó a arrancar en el entorno Docker que usaba para simular la Raspberry Pi, pero no conseguí que arrancara en la Raspberry Pi física, y ahí paré.

Segundo intento: CoreMach y el PCS 86

La dificultad de separar lo necesario de 86Box y BluMach fue una de las razones para trabajar en CoreMach, el motor portable. BareMach usa el núcleo portable completo: el motor, el tiempo emulado, la CPU, los dispositivos y la máquina PCS 86. Lo que pone BareMach es lo propio de la Pi: la frecuencia de la emulación, el teclado USB, la pantalla HDMI y la tarjeta SD. Separado así, el núcleo tiene muchas menos dependencias y es mucho más fácil llevarlo a la Pi.

También cambió la máquina emulada. En ese momento CoreMach aún no tenía el 286, así que utilicé el Olivetti PCS 86. Otra máquina y otro motor, que pensaba que sería más sencillo. Iluso de mí: el V30 se las trae. (Para CoreMach reescribí con IA el 8088 y el NEC V30 a partir del intérprete heredado de 86Box y, más tarde, el 80286, este en buena parte nuevo, a partir de la documentación de Intel. Todos van guiados por la señal de reloj y con los tiempos documentados de cada instrucción. Es realista, sí, pero consume CPU, mucha CPU).

Esta vez sí conseguí que arrancara en una Raspberry Pi 3 física. Fue un avance, aunque el rendimiento no da: en la Pi 3 va al 20 % de la velocidad real del PC, y en una Pi 4, al 50 %. No tengo una Pi 5 para probar. La emulación usa un solo núcleo y quedan tres libres, pero paralelizarla no parece fácil.

Así queda por debajo, comparado con BluMach en un PC:

Comparación: en un PC, BluMach funciona sobre Qt y Windows o Linux; en la Raspberry Pi, el núcleo portable de CoreMach funciona dentro de BareMach, que usa Circle sin sistema operativo, y la emulación ocupa uno de los cuatro núcleosEn un PC (BluMach)En la Raspberry Pi (BareMach)BluMachaplicación Qt con el motor de 86BoxNúcleo portable (CoreMach)CPU, dispositivos, PCS 86, tiempoBareMachfrecuencia, teclado, pantalla y discosQt, SDL y bibliotecasventanas, sonido, red…CircleHDMI · teclado USB · tarjeta SD · relojWindows o LinuxSin sistema operativoPC x86varios núcleosRaspberry Pi 3 / 4 (ARM)1 núcleo emulando · 3 libres
Lo que hay debajo del emulador: en la Pi no hay sistema operativo; BareMach mueve el núcleo portable sobre Circle.

Que arranque está bien, pero si no se puede usar…

Pues eso: ahora toca ver qué lo frena y cómo hacerlo más rápido. Y ya hay una pista: en una medida de la Pi 3 durante el arranque, dibujar la imagen y sacarla por HDMI se llevaba cerca del 60 % del tiempo, y emular, menos del 40 %. Ni quitando todo el vídeo pasaría, según esa medida, de un 31 % de velocidad: hay que acelerar las dos cosas.

Habrá un tercer intento, seguro, y un cuarto, y un quinto…

El código de BluMach y de CoreMach está en GitHub. El de BareMach todavía es privado; lo enlazaré cuando lo publique.

Fuentes y licencias

  • Circle, de Rene Stange: la biblioteca para programar la Raspberry Pi sin sistema operativo (GPL-3.0 o posterior). El arranque de BareMach parte de dos de sus ejemplos.
  • Primer intento: el 286 venía de MAME; el resto, de BluMach, derivado de 86Box (GPL-2.0 o posterior).
  • Segundo intento: el núcleo portable de BluMach, copiado sin cambios del 23 de septiembre de 2026, cuatro días antes de que ese código se separase como CoreMach. El origen de cada pieza está en las fuentes del artículo de CoreMach.
  • BareMach: su código propio es GPL-3.0 o posterior. No incluye BIOS, imágenes de disco ni el firmware de arranque de la Pi.

No se distribuye ninguna BIOS ni ROM. Olivetti y los nombres de sus máquinas son marcas de sus propietarios; este proyecto no está afiliado a Olivetti.