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:
- 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 espera0xFF.
- Copyright OEM: Localización de cadenas de copyright para replicarlas en el segmento
F000.
- INT 18h (ROM BASIC): Extraer el punto de entrada original.
- INT 19h (Bootstrap): Extraer la dirección del cargador de arranque original.
- Extraer valores iniciales y la Palabra de Equipamiento (0040:0010) para reflejar la configuración de hardware de IBM (disqueteras, vídeo, etc.).
- Checksum: Recalcular el byte final en
0xFFFFFtras las modificaciones para que la suma de la ROM (8 KB) sea 0.
BIOS::init() y BIOS::reset() en bios.cpp.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














