Ya está la sexta alpha de BluMach, la 0.1.0-alpha.6. Esta vez la novedad es una sola máquina, pero distinta de todas las anteriores: el Olivetti M10, un portátil de 8 bits de 1983. No es un PC y no funciona con el emulador heredado de 86Box, sino con CoreMach, el motor que separé de BluMach.

Como las anteriores, es experimental; en este caso, una prueba de concepto para integrar arquitecturas distintas de x86.

Antes de descargar: BluMach no incluye ROM, BIOS ni sistemas operativos. Tendrás que conseguirlos por tus propios medios; no se distribuyen con el programa.

El Olivetti M10

Olivetti presentó el M10 en 1983 como un ordenador que cabía en un maletín. Funcionaba con cuatro pilas AA, guardaba programas y textos en una RAM de 8 a 32 KB alimentada por batería y traía en ROM un menú con agenda, editor de textos, comunicaciones y Microsoft BASIC. La pantalla es un LCD inclinable de 240 × 64 puntos y el almacenamiento externo era el casete.

No lo diseñó Olivetti desde cero ni es una copia del TRS-80 Model 100. Los fabricó Kyocera, que hizo también el Model 100 de Tandy y una versión para NEC. Comparten origen, procesador (un OKI 80C85) y buena parte del diseño, pero la carcasa, la placa, el teclado, el juego de caracteres y la ROM son distintos. El diseño exterior se atribuye a Perry A. King y Antonio Macchi Cassia.

Ventana del Olivetti M10 en BluMach 0.1.0-alpha.6: el LCD verde muestra el menú principal con BASIC, TEXT, TELCOM, ADDRSS y SCHEDL, la fecha 01 Jan 1900 tras un arranque en frío y 29638 bytes libres con 32 KB de RAM; la barra de estado dice «En marcha · 100 % del tiempo real»

La captura es el menú tras un arranque en frío con 32 KB. La fecha de 1900 no es un error de la emulación: en un arranque en frío la ROM pone el reloj a cero, y hay que ajustarlo desde BASIC con DATE$ y TIME$.

Por qué el M10

Para la primera máquina de CoreMach dentro de BluMach buscaba algo que no se pareciera a un PC. El M10 tiene otra CPU (un 8085 en vez de un x86), otro reloj, una pantalla LCD con sus propios controladores y un teclado leído directamente por la placa. Si CoreMach era capaz de llevarlo sin tocar el núcleo heredado de 86Box, el reparto entre motor e interfaz funcionaba. Las máquinas del M10 no pasan nunca por ese núcleo: se abren en su propia ventana.

La placa está escrita desde el manual de servicio de Olivetti, el esquema de Kyocera y las hojas de datos de cada circuito. MAME lo consulté solo como fuente secundaria, para el orden de los controladores del LCD, los bits del puerto serie y una patilla de la impresora, sin usar su código. Cómo se pasó de esa documentación al código, qué es exacto y qué es aproximado está en la nota de ingeniería, en inglés.

Qué se puede hacer con él en BluMach

  • Crearlo desde el catálogo eligiendo la RAM (8, 16, 24 o 32 KB), el idioma del teclado, que en la máquina real se fijaba con unos puentes (italiano, francés, alemán o británico), y el reloj: la hora del ordenador o un inicio fijo para pruebas que se puedan repetir. La RAM y el reloj se guardan en la carpeta de la máquina, así que los programas siguen ahí al volver a abrirla.
  • Usar el BASIC y las aplicaciones de la ROM en su propia ventana, con escalas enteras y, si se quiere, una imitación del aspecto del LCD.
  • Sonido de BEEP y SOUND.
  • Puerto serie: envía un fichero de texto a la velocidad programada y guarda lo que recibe.
  • Casete: CSAVE y CLOAD con cintas en WAV.
  • Impresora: LPRINT y LLIST guardan cada impresión como un fichero de texto.

Lo que no tiene: el lector de códigos de barras, el módem de la versión estadounidense y el aviso de batería baja. La ventana de Configuración tampoco sirve para el M10; para cambiar la RAM o el teclado hay que crear otra máquina.

Qué está comprobado y qué no

“Comprobado” quiere decir que lo he visto funcionar yo con la ROM original, no que la emulación sea exacta.

ParteComprobadoPendiente
Menú y BASICArrancan con los bytes libres que da el manual para 8, 16, 24 y 32 KBMás programas de la época
RAM y relojSe conservan entre sesiones; apagado automático tras diez minutos sin uso—
SonidoBEEP y SOUNDComparar el tono con una máquina real
Puerto serieSAVE y LOAD por COM: a 9600 bit/sBREAK y las líneas RTS, DTR y CTS
CaseteCSAVE y CLOAD, también con un WAV de 11025 HzUna cinta grabada en un M10 real
ImpresoraLPRINT y LLIST—

El tiempo se calcula por instrucción, no por ciclo de bus. Para lo que hace el M10 basta, pero no es exacto.

Fallos conocidos

  • El reloj en el primer arranque. Aunque al crear la máquina se elija «Hora del ordenador», el primer arranque muestra el 1 de enero de 1900, porque la ROM pone el reloj a cero en el arranque en frío. Basta con ajustarlo una vez con DATE$ y TIME$; a partir de ahí se conserva.
  • Un aviso al arrancar en frío. La barra de estado muestra un momento «operación no admitida (io_read 82h…)». La ROM lee un puerto que la emulación no tiene modelado; no afecta al funcionamiento.

Fotos en las fichas

Las fichas del M10, el M15, el M28, los Prodest PC 1 y PC 1 HD, el Amstrad PC1512 y el Toshiba T3200 muestran ahora una foto con licencia libre, con su autor y su licencia. Al pulsar la imagen se abre la página de donde la saqué.

Paquetes compilados en GitHub

Hasta ahora compilaba cada versión en mi ordenador. Desde esta, el paquete lo compila GitHub a partir de la etiqueta de la versión. Cada ZIP lleva su SHA-256 y un manifiesto con los commits de BluMach y de CoreMach con los que se hizo.

Descarga

La versión está en la página de la alpha.6 en GitHub. De momento solo hay versión para Windows de 64 bits :-( Espero que eso cambie pronto. Se descomprime en una carpeta nueva y se abre BluMach.exe. La guía de la versión explica dónde va la ROM del M10, con su SHA-256, y las limitaciones conocidas.

Si algo falla, abre un aviso en GitHub con la versión, la máquina, la configuración y los pasos para reproducirlo.