sábado, 14 de julio de 2012

Mini simulador de Z1/Z3



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