Emulador de OSI Superboard II con ESP32

Vamos a presentar otra opción para emular el Superboard II de Ohio Scientific Instruments (OSI), al que podremos acceder vía terminal serie.

Sobre el Superboard II

Ohio Scientific lanzó en 1978 la Superboard II, también conocida como Model 600, se basaba en un procesador MOS 6502 a 1 MHz y 4 KB de RAM, aunque podía expandirse a 8 KB. Este modelo fue utilizado por Compukit como base para su UK101. En su ROM incluía Microsoft BASIC.

Emulador

En este caso, vamos a partir del código fuente del emulador UK101RESP32 que desarrollamos en este blog. Puesto que el hardware es muy similar para ambos modelos, los cambios serán mínimos y nos centraremos en el emulador de ACIA, el de la placa base y en las ROM específicas para OSI Superboard II.

Emulador del integrado MC6850 ACIA

Las funciones mc6850_readbyte y mc6850_writebyte ahora llaman directamente a las funciones de terminal.c (read_keyboard() y write_terminal()) en lugar de implementar lógica de teclado matricial.

Emulador de la placa base

A la hora de particularizar la placa base de este ordenador, se ha agregado mapeo del ACIA en las direcciones $FC00-$FC01 (direcciones principales del monitor OSI C3 Serial), además de los mapeos existentes en $F000-$F7FF y $C010-$C011. Además, la entrada del terminal se conecta directamente al ACIA en lugar de pasar por la matriz de teclado, ya que el monitor serie no utiliza el teclado matricial.

ROM

Mantendremos la filosofía de una ROM unificada en un solo archivo. EN este caso, utilizaremos basic-osi-fix.rom y osi-c3-serial-cwm-65ab.rom, siendo esta última una ROM de monitor específica para puerto serie. La particularidad de esta es que no incluye código de entrada al BASIC, sino que depende de rutinas dentro del propio BASIC. Asimismo, la entrada/salida para esta ROM es completamente por puerto serie (ACIA) y no usa teclado matricial ni video RAM local, sino exclusivamente vía serie.

En particular, descargaremos los archivos de ROM a integrar en nuestro emulador desde el repositorio GitHub de osiemu.

$ wget https://github.com/ivop/osiemu/raw/refs/heads/main/basic/basic-osi-fix.rom$ wget https://github.com/ivop/osiemu/raw/refs/heads/main/kernel/osi-c3-serial-cwm-65ab.rom

Para la generación de la ROM unificada, comenzaremos creando un archivo de 32 KB lleno de 0xFF.

$ dd if=/dev/zero bs=32768 count=1 2>/dev/null | tr '\000' '\377' > unified-osi.rom

A continuación, copiaremos la ROM BASIC a partir de la posición 0x2000, que corresponderá a la dirección de memoria 0xA000.

$ dd if=basic/basic-osi-fix.rom of=unified-osi.rom bs=1 seek=8192 conv=notrunc 2>/dev/null

Repetiremos la acción para la ROM de monitor, esta vez en la posición 0x7E00 (dirección 0xFE00).

$ dd if=kernel/osi-c3-serial-cwm-65ab.rom of=unified-osi.rom bs=1 seek=32256 conv=notrunc 2>/dev/null

La estructura resultante sería la siguiente:

Inicio ROMFinal ROMInicio memoriaFinal memoriaContenidoTamaño (KB)0x00000x1fff0x80000x9fff0xFF80x20000x3fff0xa0000xbfffBASIC80x40000x7dff0xc0000xfdff0xFF15,50x7e000x7fff0xfe000xffffKernel0,5

Solo queda convertir la ROM completa a archivo .h.

$ xxd -i unified-osi.rom > osi.rom.h

Editamos la función motherboard_init() en motherboard.cpp para que realice la copia de la ROM que incluimos en nuestro código con el archivo osi.rom.h recién creado.

Instalación

Para instalar el emulador basta con descargar de GitHub los fuentes.

$ git clone https://github.com/RafaGS/osiresp32.git

Podemos compilar y subir el código a nuestro ESP32 mediante el IDE de Arduino o bien desde línea de comando.

$ arduino-cli upload --fqbn esp32:esp32:esp32 --port /dev/ttyUSB0 osiresp32.ino

Este código ha sido probado tanto en una placa DOIT ESP32 DevKit V1 como una MH-ET LIVE ESP32MiniKit.

Emulación

Desde un emulador de terminal accedemos nuestra placa ESP32 con una configuración estándar de 115200 8N1.

Nos aparecerá una cabecera generada por nuestro código para, a continuación, aparecer el mensaje de inicio del monitor. Escribimos «C» y respondemos con sendas pulsaciones de [Intro] a las siguientes preguntas. Ya podemos programar en BASIC.

Vemos que podemos programar con normalidad nuestro emulador.

#6502 #OhioScientific #OrdenadoresDomésticos

@glennf Ok, so I have just one Aardvark newsletter, October 1981 vol 2 no 4.

I also have several of their game and utility programs. 😊

Looking through the catalog I have from Aardvark I am amazed by how prolific they were!
30+ games, and many utility programs.

#OhioScientific #VintageComputing

In which I investigate the curious game of the exact same game being published by two different "authors" with two different publishers

https://bluerenga.blog/2024/07/09/adventure-65-and-adventure/

#retrogaming #adventuregame #commodore64 #ohioscientific #apple #appleII

Adventure-65 and Adventure

I’ve got a slightly different post today, and I think if you take a look at the first screens of the two products (sold by totally different companies, with totally different authors mentione…

Renga in Blue

My repaired & restored Ohio Scientific Challenger-1P 6502 computer. Running again while booting an early version of Microsoft BASIC written personally by Bill Gates & Paul Allen in 1977. The rest is history.

#VintageComputer #100DaysOfCode #Microsoft #BASIC #OhioScientific
[09/05/2021]

Repaired and restored Ohio Scientific Challenger 1P, happy to see it running the 1977 Microsoft Basic interpreter again. #RetroComputing #OhioScientific #Challenger1P #MicrosoftBasic
[04/01/2020]
Would love to play around with an old #SGI computer running #IRIX. I guess I'll dig into free simulators first like I did for the #OhioScientific C1P.
@ntnsndr @mediaarchaeologylab Awesome! Wonder if I could pull this off from an #OhioScientific C1P 👀
@mzedp That's about what I thought in 1979 when I doubled my RAM from 4k to 8k on my #OhioScientific Superboard II.