Emulador de transputer en Javascript
Esta es una conversión Javascript de mi
emulador de transputer escrito originalmente en C para mi serie de artículos acerca del procesador transputer. En los tiempos "antiguos", Javascript era un lenguaje interpretado, pero desde hace varios años se implementa como un compilador JIT (Just-In-Time o al momento), así que alcanza velocidades más cercanas al lenguaje C.
Una limitación de implementación de Javascript es que trata los operadores de bits como si tuvieran un resultado con signo de 32 bits. Esto se evita usando el operador >>> 0 (corrimiento lógico a la derecha) porque genera un entero sin signo de 32 bits. Puede intentar 0x80000000 >> 0 y ver como devuelve un número negativo, mientras que 0x80000000 >>> 0 preserva el valor sin signo.
Otra cosa "nueva" en Javascript es
Uint8Array, que es más rápida que un arreglo normal y
ahorra memoria, ya que hay varios de estos arreglos (incluyendo uno de 40MB para contener el disco duro entero!). Para las imágenes de disco, intenté utilizar un arreglo inicializado pero el código fuente usaba 20 megabyte para un binario de 3 megabytes. Desarrollé un buen truco para reducir el tamaño del código fuente Javascript usando
Base64 en mi utilidad bin2c.c para codificar los 3MB de datos del disco duro, y luego
window.atob obtiene la cadena decodificada que es copiada directamente en el Uint8Array del disco duro.
No esperaba emular el punto flotante, pero descubrí que los tipos
Float32Array y Float64Array (agregados en 2010) y como pueden ser espejo en un Uint32Array, así que el emulador puede trabajar con auténtica matemática de punto flotante, y usa el Uint32Array para obtener los datos binarios del punto flotante que replica en la memoria interna del transputer.
Por último, para la pantalla fui muy afortunado de encontrar
jsTerm por Peter Nitsch con una licencia compatible. Removí la porción de sockets y Telnet. Y como usa un bitmap para el tipo de letra, pude reemplazarlo con mi font original de 1996, así que puedes ver los bordes de línea para las ventanas de texto, y otros caracteres especiales. Mi font estaba basado en ECMA-94 (conjunto 1), también conocido como ISO-8859-1, con los caracteres $00-$1f y $80-$9f usados para gráficos. Está basado en un font de BIOS VGA, y me parece que mejoré algunas letras, pero no recuerdo cuales. Pruebe a ejecutar la orden
C:Conjunto para ver todas las letras y símbolos.
Puedes dar un vistazo al código fuente Javascript de este emulador en
https://github.com/nanochess/transputer/tree/master/js
¿Qué tenemos aquí?
Este emulador no tiene opciones para correr
mi antiguo compilador de Pascal o el
compilador de Small-C, en lugar de eso viene precargado con
mi sistema operativo evolucionado (primavera de 1996), que incluye un montón de características como múltiples archivos (A: es un floppy de 1.44mb, B: es un disco RAM de 512K, C: es un disco duro de 40 MB, D: es un CD-ROM en formato ISO-9660 pero no se puede cargar una imagen).
El compilador de C admite la sintaxis K&R completa (excepto por static y extern, porque no hay linker).
Algunas órdenes que se pueden probar dentro del sistema operativo:
DIR A:
DIR C:
AYUDA
MEM
C:EDITOR
Usa F1 (o Fn+F1 en macOS) para accesar la caja de ayuda del editor de texto visual, y teclea F4 (o Fn+F4 en macOS) para abrir el explorador de directorios para leer archivos de texto.
Usa C:CC para invocar el compilador de C, C:ENS para invocar el ensamblador, C:EJECUTABLE para armar la salida del ensamblador en un ejecutable funcional. Hay instrucciones para compilar los programas en el archivo C:/Documentos/Programas.doc (¡Intenta autocompilar el compilador de C!)
Esta es una compilación de ejemplo de un programa:
C:CC
N
N
C:/C/Hora.c
B:Hora.len
C:ENS
B:Hora.len
C:/Lib/stdio.len
[empty line]
B:Hora.e
C:EJECUTABLE
B:Hora.e
512
0
C:Hora.p
Mi emulador en C es bastante más rápido que esta demo, pero si tienes una computadora veloz y un buen browser entonces esta versión en Javascript puede ser muy interesante.
Modelador 3D
Se puede correr el modelador 3D usando esto:
c:modela
c:dibujo_3d/escena_tetera
Selecciona un modo, oprime Enter, y vuelve a oprimir Enter de nuevo para permitir que dibuje. Hay más escenas en el directorio C:/Dibujo_3D, cada una empieza con el nombre escena_. Puedes listar las escenas con esta orden:
dir c:/dibujo_3d/escena*
Ray tracer
Se puede correr el ray tracer con esto:
c:m3d
c:dibujo_3d/prueba
Solo dos archivos M3D están disponibles en el directorio C:/Dibujo_3D. Debes entrar los nombres sin la extensión M3D.
Multitarea
Hay un pequeño ejemplo de multitarea, se puede tener un reloj en la parte superior derecha de la pantalla. Entra esta orden:
@c:/Desarrollo/Reloj
¡Disfrutalo!
¿Te encantó este artículo? Invitame un café en ko-fi
Ligas relacionadas:
Última actualización: 05-abr-2025