Trabajo de arquitectura del computador en Python

Tiempo sin escribir, pero bueno.
Resulta que en el semestre que acaba de terminar tuvimos que realizar un pequeño proyecto que emulara un microprocesador en la manera que dado una serie de instrucciones nuestro simulador completara los ciclos de captación y ejecución con sus respectivas microoperaciones.
Teniendo ademas otros proyectos por terminar y las funciones en mi trabajo también full decidí sacar las baterías incluidas de python para poder terminar mas rápido.

A la final resolví primero realizar unas funciones de utilidad que me permitían abrir el archivo de texto con las instrucciones para luego interpretarlas y buscar su equivalente en binario de la siguiente forma:
los primeros 8 bits representan el código de operación y los 12 bits restantes el operando.
Estas luego se almacenarían en una memoria también simulada cuya dirección sería dada en el archivo de texto, total el archivo de texto tendría una seria de lineas de la siguiente manera:
1, LOAD M(3)

lo que indica  que en la dirección 1 de la memoria voy a guardar la instrucción LOAD M(3), esa instrucción indica que cargue en el Acumulador AC lo que se encuentre en la dirección de memoria 3
y su código binario sería 00000001000000000011.

Luego que esta todo cargado en la memoria, procedemos a la ejecución de las instrucciones, siempre comenzando en la dirección 0 de la memoria. Para esto desarrolle una clase que simula el computador, la cual consta de una memoria (a través de un objeto de clase memoria) y los respectivos registros tal como MQ el acumulador AC el registro de instrucciones IR y así sucesivamente. Ahí tenemos también dos métodos que son esencialmente los que realizan el trabajo, el método captaInst() que realiza el ciclo de captación y ejecutaInst() que realiza el ciclo de ejecución.
Cabe destacar que primero hice todo para que los resultados se mostraran vía consola,  luego que la lógica estaba hecha y funcionando decidí crear un GUI. Las opciones eran bastantes (tk, QT, Gtk, WX, swing con jython, windows forms con IronPython, etc…).

Primero comencé con Swing y me fastidie al rato, si estoy usando python  por su simplicidad me pareció que usar Swing llevaba mucho trabajo, al final me decidí por WX con WXPython. El proceso de crear dos diálogos con unos cuantos controles fue sencillo y rápido, era todo lo que necesitaba para este proyecto.

Si quieren pueden descargar o ver el código desde github.

Si el código puede ser mejorado, perfecto! solo enviar la modificación para el beneficio de todos.

You may also like...