Emulador de Am29000 en Javascript

Esta es una conversión a Javascript de mi emulador de Am29000 escrito originalmente en C para un artículo acerca de mi sistema operativo de ventanas de 1997. Esto es posible porque Javascript ahora en su mayoría ha evolucionado en un compilador JIT (Just-In-Time), así que se acerca a las velocidades del lenguaje C.
En su mayor parte es una conversión directa de C, de mi experiencia previa con mi emulador de transputer utilicé el operador >>> 0 (corrimiento lógico a la derecha) para mantener enteros de 32 bits sin signo dentro de la emulación.
También depende de Uint8Array, ya que es más rápido que un arreglo normal y ahorra memoria, ya que hay varios de estos arreglos (dos unidades de disco flexible y la RAM de video). Para las imagenes de disco, encontré un buen truco para reducir el tamaño del código fuente Javascript usando Base64 con mi utilidad bin2c.c para codificar los 1.44 mb. de datos de la imagen de disco flexible, y window.atob obtiene la cadena decodificada que es copiada directamente en el Uint8Array de la unidad.
Finalmente, para la pantalla emula un pequeño subconjunto de un chip de video Cirrus Logic GD-5429, e ilustra 800x600 pixeles con 64k colores convirtiendo la pantalla completa en cada cuadro de 64k colores a RGB 24-bit. No ganaría una prueba de velocidad.
Para la versión de 1999, requirió un nuevo driver de CL-GD5440 escrito en Javascript, junto con ajustes en el núcleo del emulador para manejar acceso PCI, y todavía funcionar con las ROMs de 1997.
Puedes mirar el código fuente Javascript de este emulador en https://github.com/nanochess/Am29000/tree/master/js

Que tenemos aquí (1997)

Debes esperar varios segundos para que las ventanas iniciales aparezcan. Esto se debe a que el sistema operativo construye tres tipos de letra al inicio.
Mueve el cursor con el ratón o el pad. Haz click y sostén en la barra de título para mover ventanas. El botón gris en la parte superior izquierda cerrará las ventanas.
Si haces click derecho en el fondo de la ventana "Arrancador", te dará diferentes esquemas de color.
La ventana "Arrancador" es como un atajo para lanzar un juego de ajedrez, el archivero (puedes arrastra y soltar archivos entre dos ventanas de archivero), edición de color, chequeo de disco y utilidades (puedes arrastra archivos al basurero, o arrastrar un folder para crear un nuevo folder en el archivero)
Mi emulador en C es bastante más rápido que esta demo, pero si tienes una computadora veloz y un buen browser, esta versión Javascript puede ser muy interesante. La versión en C permite generar archivos de impresión, algo que en Javascript no es posible.

Que tenemos aquí (1999)

La fecha se muestra es la esquina superior izquierda de la pantalla (haga click para cambiar la fecha), hay cuatro iconos fijos: Volumen (no funciona), cálculadora, estatus del sistema, y cambio de resolución de pantalla (no funciona). En la esquina superior derecha de la pantalla aparece un botón para activar un menú fijo de programas. Se puede hacer doble click en las barras de título para minimizar las ventanas.
Los únicos programas funcionales son Ajedrez, Archivero, Fénix C, Circuito Impreso, Publivisión, y Bloques (X:/Entorno de desarrollo/Juegos/Bloques.c y hay que compilarlo de fuente usando Fénix C)
En la línea 318 reemplaza case 0x15: con case TECLA_ARRIBA: ya que está diseñado para usar la tecla 5 del pad numérico para rotar piezas. Pero esto no aparece en los teclados de laptop.
También se puede imprimir código fuente a cualquiera de las impresoras admitidas, sin embargo, no hay forma de tener los datos de impresión. Se necesita configurar la impresión en Fénix C en Opciones-Impresión. Ya puse algunos tipos de letra libres (localizados en Sistema/Tipos de letra).
El código fuente del compilador de C y el ensamblador está en la carpeta Entorno de Desarrollo. Si se requiere recompilar el código fuente del compilador de C o el ensamblador, se necesita memoria extra, así que se desactiva el navegador web (seleccione esto al empezar el emulador), y usar la utilidad Promedio para ver la memoria libre. Es muy interesante ver como se compilan las 10,203 líneas de código fuente y se obtiene exactamente el mismo binario.
Publivisión es casi la primera versión del último día de 1998, así que está lleno de bugs, de cualquier forma se pueden crear documentos e imprimirlos. Esta aplicación temprana ya ocupa casi 10,000 líneas de código fuente.
Circuito Impreso es mi editor de PCB y es la aplicación más pulida en ese tiempo. Es bastante fácil de usar, solo experimente con click izquierdo (dibujar) y click derecho (seleccionar). La imagen de los créditos fue escaneada de la cubierta de un manual de AMD. Hay unos pocos errores en el controlador de video cuando se mueven los elementos, pero lo corregiré después.
Para correr el navegador web, abra un Archivero, y haga click en Explorador de Internet. También puse el código fuente de mi primer navegador (más como un visualizador), y no se si se pueda compilar, pero probablemente necesitaría algunos cambios. Debido a las restricciones de seguridad de los navegadores, no se puede conectar mi navegador a Internet. Si quieres experimentarlo, por favor descarga la versión de Windows o Mac de mi emulador.

Código fuente

El código fuente esta liberado en https://github.com/nanochess/Am29000
Si disfrutaste este artículo, por favor apóyame invitándome un café en ko-fi.

Ligas relacionadas

Última actualización: 06-sep-2026