Efectivamente, estoy de acuerdo contigo @Blackhole...
El caso es que en mi afán por programar un emulador, como ya comenté en el otro hilo, quería partir de una CPU MUY básica... no me sirven los Z80 y demases porque traen un montón de instrucciones, registros, etc...
Gracias al Podcast "El Amuleto de Yendor", oí sobre la especificación DCPU-16 del "famoso" Notch... descargué las especificaciones... y me puse ha realizar test... al empezar a encontrar problemas y/o dudas sobre la implementación de un microprocesador, es cuando inicié mis consultas en el otro hilo...
Hoy he abierto este otro hilo porque he llegado a la conclusión que la pregunta NO era SOLO sobre la CPU comentada, sinó que era una duda que nos podemos encontrar más de un programador que empieza en esto de desarrollar un emulador...
Destripar el código "a medias" o "en medio de la RAM", lleva evidentemente un descontrol sobre lo que estamos descompilando... puede ser que entremos en medio de las datas, o quizás estemos leyendo un "medio paso" de una operación, etc... por eso el motivo del hilo... por lo que voy "descubriendo", una CPU en si misma, es una "especie" de máquina de gestionar datos en una memoria, copias aquí, haces una operación de cálculo allá, asignas unos valores en unos registros/memoria, etc...
Vamos, lo que se ha dicho toda la vida, que la máquina en si misma es TONTA... y que el trabajo duro es el del programador... si no "cierras" bien el programa, éste se puede descontrolar y hacer que la CPU haga cosas que no tocan ¿recordáis los RESET de nuestros amados Z80 tras teclear 5000 códigos de las MH? o era error de imprenta, o error al teclear...
Lógicamente un programa también es "tonto", se copia/carga en una determinada posición de memoria y por si mismo se queda ahí, en espera de que el registro PC alcance su posición (o la de alguna función de la "ristra" de bytes introducidos en RAM).... o sea llamado desde otro programa.
Se me ocurren un montón de preguntas más... todas relativas al control/diseño de una CPU.... ¿porque se incluyen unas instrucciones y no otras? ¿Porque solo hay una pila y no varias? ¿que pasa si PC alcanza la posición de la pila? ¿que pasa si el programa intenta sobreescribir la pila? etc etc etc
Tras algunos días de trabajo, y gracias a la inestimable ayuda del personal de este foro, tengo ya un programa que
empieza a funcionar... y que gracias a los comentarios en el foro más mis propias experiencias programando (y por la documentación que encuentro) he llegado a algunas conclusiones sobre la CPU que intento emular, y que de TAN BASICA que es, creo que le faltan un montón de las cosas que aquí se han comentado.
Por ejemplo, yo también he estado pensando en AÑADIR UNA ESPECIE DE BIOS y/o usar las técnicas del ZX, añadiendo una zona de variables, asignar las zonas de la RAM que se pueden usar, quizás marcar como en el Spectrum las primeras 16Kb de la RAM a los caracteres de video, variables del sistema, control de dispositivos, etc...
Como he comentado antes, tengo la intención de añadir en una zona de la RAM algo parecido a las "variables del sistema" aunque esto provoque que me salga de las especificaciones de la CPU... me interesa más el conocimiento que el emulador funcione al 100%, no se si me explico...
Y nada más, voy a seguir tecleando código un ratito más. Saludos.
