Es exactamente lo que parece, un emulador bare-metal para las Raspberry PI. Como dijo Isaac Newton,
si pude ver más lejos es porque me subí a hombros de gigantes. Y así ha sido esta vez. Llevaba tiempo colaborando con el autor de una librería escrita en C++ que permite desarrollar aplicaciones bare-metal para la PI, la librería
Circle. Una vez tuve el core Z80 en C++, ya ha sido cuestión de días. Aún me quedan por acabar algunos detallitos para sacar la versión 1.0, pero lo que va, va bien.
En lo que menos esperanza tenía era en el sonido, principalmente porque absolutamente nadie sabe cómo usar el HDMI para sacar sonido por la tele, que podría ser estéreo a 192 kHz de sampling con muestras de 24 bits, una animalada. Pero, ya que eso es imposible a día de hoy, he tenido que conformarme con el sonido por PWM. Y hasta el autor de la librería está agradablemente sorprendido del buen resultado obtenido, porque el soporte es de lo más básico (y he peleado de lo lindo con ello).
La idea del emulador era, sobre todo, conseguir una precisión muy alta, imposible de conseguir con un S.O. de propósito general como Linux. De hecho, estimo que la precisión en tiempos anda por los +/- 2 o 3 microsegundos por frame. Ojito, que la capa USB es delicada y ella sola te puede quitar la CPU cuando quiere por lo menos un milisegundo.
Parte de eso lo he resuelto en la PI 2/3 dejándole a la CPU-0 manejar las interrupciones y el USB y utilizando la CPU-1 para el núcleo de la emulación. De momento, los núcleos 2 y 3 los dejo durmiendo el sueño de los justos.
Supongo que esto debería ser un proyecto a medio-largo plazo, porque dependiendo de la funcionalidad que se le de, habría mucho o muchísimo trabajo por hacer. Y eso que a nivel de emulación está como mi emulador Java, aunque limitado al 48k: emulación exacta del Z80, memoria contenida, bus flotante, dibujado con precisión tanto del borde como de la pantalla (y sin dobles buffers). Pasa todos los tests que conozco y, para ser bare-metal, funciona durante horas sin colgarse.
Lo que carga son TAP's de forma acelerada (lo que de el núcleo de la PI), así se conserva la pantalla de carga al menos, que siempre mola verla.
En su momento lo avisaré, pero los betatesters que sepan que necesitaré comprobar el acceso a la SD, y puede que más de una se quede inoperativa pá los restos. Esto es bare-metal y los errores se pagan a conciencia.
Si todo va bien, espero sacar la versión 1.0 para finales de mes como mucho. Porque si me ciego a ir añadiéndole cosas, no veréis nada hasta las navidades de 2031...
![Muy Feliz :D](./images/smilies/sc_jgrin.gif)