Emulador de IBM PC con Lilygo TTgo VGA32

Aunque en nuestra vida cotidiana sigamos usando ordenadores personales, el IBM PC hace tiempo que pasó a la memoria de la retroinformática.

En este artículo vamos a emular un IBM PC sobre un módulo TTgo VGA32 de Lilygo.

Sobre el IBM PC

El tatarabuelo de los PC actuales salió al mercado en agosto de 1981. Se trataba del IBM Personal Computer modelo 5150, basado en un procesador Intel 8088 a 4,77 MHz, con un máximo de 640 KB de RAM y almacenamiento de disquete de 5,25 pulgadas. Por entonces el disco duro, de 10 o 20 MB, era un extra.

Sin embargo, este evolucionó, primero con el sistema operativo MS-DOS, luego con las distintas versiones de Windows y, más tarde, también Linux para llegar a ser lo que es hoy en día.

El modelo 5150 tenía una arquitectura basada en varios integrados de Intel, como el generador de reloj 8284, el controlador de bus 8288, el PIC 8259A, el PIT 8253, el controlador DMA 8237A, el PPI 8255 y los latches de bus de direcciones 8282/8283. Asimismo, integraba una salida gráfica MDA o CGA, permitiendo esta última gráficos en 4 colores.

Entorno e instalación del emulador

Emulador

Vamos a utilizar como base el emulador para PC genérico basado en 8086/8088 PCEmulator, que adaptaremos para que funcione lo más parecido posible a un IBM PC modelo 5150 con 256 KB de RAM. Para ello partiremos de una imagen binaria de la ROM de este y la BIOS genérica que utiliza PCEmulator. La idea es construir una arquitectura híbrida que tenga en cuenta estos puntos:

  • Identidad del equipo:
    • Fecha de la BIOS: (8 bytes en 0xFFFF5) en formato MM/DD/YY.
    • Byte de Modelo (Machine ID): (1 byte en 0xFFFFE). Para un 5150 original, se espera 0xFF.
  • Cadenas de Datos:
    • Copyright OEM: Localización de cadenas de copyright para replicarlas en el segmento F000.
  • Velocidad real: el IBM PC original funciona a 4,77 MHz.
  • Vectores de Interrupción (IVT):
    • INT 18h (ROM BASIC): Extraer el punto de entrada original.
    • INT 19h (Bootstrap): Extraer la dirección del cargador de arranque original.
  • Área de Datos de la BIOS (BDA – Segmento 0x40):
    • Extraer valores iniciales y la Palabra de Equipamiento (0040:0010) para reflejar la configuración de hardware de IBM (disqueteras, vídeo, etc.).
  • Integridad:
    • Checksum: Recalcular el byte final en 0xFFFFF tras las modificaciones para que la suma de la ROM (8 KB) sea 0.
  • Arquitectura Híbrida: No se porta lógica de ejecución ni E/S de puertos (8259, 8253, etc.). Todo se maneja mediante interceptores en C++.
  • Alcance: Las modificaciones solo afectan a BIOS::init() y BIOS::reset() en bios.cpp.
  • Inviolabilidad: El vector de reset (0xFFFF0) y el código x86 en biosrom.h no se tocan.
  • La idea es que, mediante el uso de herramientas de la época, como PC Tools o Norton Utilities, podamos obtener la información más fiel posible.

    Elementos

    Vamos a necesitar los siguientes elementos:

    • Placa Lilygo TTgo VGA32 v1.4.
    • Tarjeta microSD de 8 GB mínimo.
    • Monitor con entrada VGA.
    • Teclado con conector PS/2 o, en su defecto, convertidor USB a teclado PS/2.

    Instalación

    Esta versión del emulador se encuentra disponible en GitHub, por lo que comenzaremos por descargar el código fuente del repositorio.

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

    Para evitar los problemas conocidos de FabGL con las últimas versiones de las librerías de Espressif ESP32, usaremos podman para asegurar que trabajamos con versiones compatibles y controladas.

    $ podman run --rm -v ~/Devel:/sketches:Z arduino-cli-fabgl:1.0.9 arduino-cli \ compile --fqbn esp32:esp32:esp32:PartitionScheme=huge_app \ --libraries /arduino/libraries --export-binaries \ --build-property 'compiler.c.extra_flags=-DBIOS_VARIANT=1 \ --build-property 'compiler.cpp.extra_flags=-DBIOS_VARIANT=1 \ /sketches/PCEmulator4Classics

    Conectamos la placa Lilygo TTgo VGA32 a nuestro PC y subimos la aplicación.

    $ podman run --rm -it --device=/dev/ttyACM0 -v ~/Devel:/sketches:Z \ arduino-cli-fabgl:1.0.9 arduino-cli upload --fqbn esp32:esp32:esp32 \ --port /dev/ttyACM0 --input-file /sketches/PCEmulator4Classics/build/esp32.esp32.esp32/PCEmulator4Classics.ino.bin

    También dispondremos de imágenes de disquete en nuestra tarjeta microSD. Para que las reconozca en el arranque, crearemos en el directorio raíz de aquella el archivo A.txt, que incluirá el nombre del archivo IMG a cargar. Podemos opcionalmente crear archivos B.txt y C.txt para las respectivas unidades B y C.

    Emulación

    Una vez realizada la subida, desconectamos la TTgo del PC, le introducimos la microSD y la conectamos a un monitor y teclado.

    Una vez encendida la alimentación, vía microUSB, el emulador se conectará a nuestra Wi-Fi, sincronizará la hora de la placa vía NTP y arrancará el emulador de PC.

    Comenzamos trabajando con una de las primeras versiones estables de PC DOS, la 2.00.

    Podemos realizar operaciones básicas con este sistema operativo.

    Podemos ver como PC Tools reconoce el sistema como un IBM PC, la fecha correcta de la BIOS y los 256 KB de RAM configurados.

    Norton Utilities, además, indica que la velocidad del emulador coincide con la del sistema original.

    Vamos a cambiar el disquete B, para lo que pulsaremos la combinación [Alt][Impr] e iremos a la opción «Mount Disk».

    Seleccionamos la unidad B y el archivo del disco de WordStar.

    Lo arrancamos desde línea de comando.

    B> ws

    Y aparecerá la pantalla de bienvenida del procesador de textos.

    A continuación, tendremos el menú desde donde podremos crear un archivo de prueba.

    Y, finalmente, podremos escribir un «Hola mundo».

    #1981 #ESP32 #IBM #Intel8088 #LilygoTTgoVGA32
    MS-DOS no Apple IIe. É isso mesmo que você leu! - Retrópolis

    Estava eu no meu canto, pensando maldades e procurando itens de MSX para comprar dando uma olhada no Hackaday... Quando encontro essa notícia assaz curiosa. O autor, Seth Kushniryk, detalha como ele fez para subverter as regras não declaradas da decência retrocomputacional e conseguiu obter a execução nativa do MS-DOS 2.0 em um Apple IIe.

    Retrópolis - A cidade dos clássicos

    Look what arrived in the mail last week!

    What a beauty. I haven't turned it on yet. I'll do a deep dive on it in a future video. For now, I'm just admiring it.

    It's got an 8088 CPU, one megabyte of RAM and a PCMCIA interface. I wonder if it will run FreeDOS.

    #RetroComputing #8088 #Intel8088 #Sharp #SharpPC3000 #PC3000 #FreeDOS

    Emulador de arcade Q*bert con HamGeek MiSTer

    En este artículo vamos a emular el histórico arcade Q*bert sobre un sistema MiSTer de HamGeek.

    Sobre Q*bert

    En 1982, Gottlieb lanza un original juego de plataformas sobre una pirámide de cubos de gran jugabilidad. Debido a su éxito, migraría a múltiples plataformas.

    Su arquitectura se basa en un procesador principal 8088 de Intel a 5 MHz combinado con un MOS 6502 a 0,89 MHz para gestión de sonido y un GI SP0250 para síntesis de voz. Asimismo, incluía 2 KB de RAM.

    Entorno e instalación del emulador

    Elementos

    Vamos a necesitar los siguientes elementos:

    • HamGeek MiSTer.
    • Monitor con entrada HDMI.
    • Teclado USB.

    Instalación

    Por defecto, este arcade no está disponible por defecto en la microSD de MiSTer. Si seleccionamos Q’bert del menú de Arcades, veremos un error de falta de archivo.

    En particular, lo que nos pide es la ROM correspondiente, que tendremos que conseguir en alguna web especializada.

    Una vez descargada, en este caso qbert.zip, bastará con copiarla vía FTP al directorio /media/fat/games/mame de MiSTer.

    Emulación

    Una vez realizados los pasos anteriores, podemos arrancar nuestro arcade. El emulador comenzará con la pantalla de presentación del juego.

    Seguidamente, aparecerán las instrucciones del juego.

    Y simplemente nos queda «depositar» la moneda y recordar viejos tiempos.

    #1982 #Gottlieb #HamGeekMiSTer #Intel8088 #MOS6502
    UH-OH.

    Every time I press a key, either it doesn't do anything or it prints a bunch of unrelated characters. It also beeps a lot of times, like if the keyboard's buffer was full, but it still prints characters 🤷‍♂️
    I never debugged a keyboard problem and, honestly, have no idea how an #AT #keyboard works...

    #retrocomputing #dos #intel8088
    I'm not sure if the floppy drive is 720 or 1.44, but for food measure I popped in a 720k floppy from the #amstrad ppc-640 luggable pc.
    ...and it reads it correctly! It's booting DOS!!!
    Let's find a compatible keyboard and play something!

    #retrocomputing #dos #intel8088
    NO. WAY.
    I've got a video output and it's clearly running! It's counting memory!
    It has 640k, as usual

    #retrocomputing #dos #intel8088
    Cleaned all the traces the better I could, it doesn't seem the acid eaten them all the way down... so I tried to follow them and test them for continuity. They seem all to be still connected 🙂

    #retrocomputing #dos #intel8088
    A better #motherboard view before removing the battery

    #retrocomputing #dos #intel8088
    I startes taking it apart to see how's the inside.
    And, #horror ! Can you see it?

    #retrocomputing #dos #intel8088