Como prometí en
la entrada sobre la Z1, he desarrollado un mini emulador de la Z1 y de la Z3.
Este no pretende ser un emulador realista, solo se trata de que os hagáis una idea
de lo que podía hacer la máquina, he intentado ser solo realista en lo que podía
ejecutar la máquina y el tiempo que le costaba hacerlo.
La máquina operaba en punto flotante, pero por simplificar he usado coja fija
con 4 posiciones decimales. He reducido las posiciones de memoria de 40 a 10,
para probar no hacen falta mas, he puesto un "perforador" de cinta sencillo,
y por no liar demasiado el tema, he añadido un visualizador del acumulador,
del que no disponía la máquina real.
La Z1 podía ejecutar las 4 operaciones, podía leer una posición de memoria y
guardarla, yo he simplificado estas dos operaciones con el acumulador. Además
a la Z3 se le añadió la posibilidad de calcular raíces cuadradas.
La simulación es realista en cuanto a tiempos, pero como las operaciones son
lentas, he añadido la posibilidad de aumentar la velocidad. Al final del programa
indicará siempre el tiempo real en segundos que hubiese tardado la máquina,
aunque no es exacto al 100% por no haber simulado el hardware real, he usado
los tiempos medios de ejecución de las instrucciones.
Para ejecutarla debéis usar este
enlace. El simulador está echo en HTML y Javascript únicamente, por lo que
podéis ver el código completo en el fuente de la página. No es nada del otro
mundo, pero si tenéis curiosidad lo miráis, y si encontráis problemas o que
el código es mejorable, estoy abierto a sugerencias.
Solo se puede interactuar con la unidad de entrada. A la izquierda está la perforadora
de cinta de papel, en ella elegimos una operación y con que dirección de memoria
se realiza, al darle a "Añadir" la incluye debajo en la cinta. También podemos
cambiar al cinta por una nueva y perforarla, usando "Limpiar".
A la derecha está la unidad de entrada a la memoria. Elegimos la posición de
memoria e introducimos el valor, al darle a "Guardar" almacena el valor en la
posición de memoria indicada. Al darle a "Borrar" inicializa la memoria de la
máquina.
Debajo está la unidad de proceso, a la izquierda el lector de la cinta, con
las instrucciones que hemos ido añadiendo. A la derecha la memoria. En el centro
vemos el acumulador de la máquina, los mandos de velocidad, el indicador del
tiempo aproximado que hubiera tardado en ejecutar el programa en la cinta la
máquina real, y el botón de "ejecución".
Conforme la máquina ejecuta las órdenes, se indica en la cinta por donde va
el programa, y los valores del acumulador, de la memoria y el tiempo se van
actualizando conforme termina la operación en curso.
Espero que sirve de idea de que esto tan super sencillo fue el primer paso hacia
la computación moderna.
Y para los que tengan interés mas técnico, deciros que la Z1 evidentemente no
es una máquina de Turing completa, al carecer de instrucciones de salto, pero
si es un computador limitadamente programable sin alterar sus circuitos, lo
que lo convierte en el primer computador de la historia.
No hay comentarios:
Publicar un comentario