Tema: Cpu Z80
Ver Mensaje Individual
  #8 (permalink)  
Antiguo 02/07/2003, 08:43
josemi
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 11 meses
Puntos: 16
Hola,

Vale, entonces es que no habia entendido tu duda. Lo que quieres es aprender a hacer un emulador, o por lo menos entender el codigo de los emuladores que tienes.

Aclaro que nunca he hecho un emulador, o sea, todo lo que diga puede estar mal. Asumo cierto nivel de conocimiento de C de como funciona el Z80 (o una CPU) a nivel interno.

Empecemos con las estructuras de datos necesarias.

La mas sencilla seria la memoria, que seria un simple array de unsigned char (lo mas parecido a byte) del tamaño correspondiente al modelo. Se podria complicar mas dividiendo la memoria en RAM y ROM, pero haciendo que ambas se accedan mediante un espacio lineal de direcciones. Traduciendo: tener RAM y ROM en el mismo array, pero si una direccion (indice) esta dentro del rango de direcciones de la ROM, solo se pueda leer. Esto se puede haer facilmente si en lugar de acceder directamente al array de memoria, se usan funciones, en las cuales se valida la direccion en caso de escritura.

La otra estructura seria el propio CPU. Seria una estructura con los registros del CPU, tanto los de datos como los de estado.

El emulador comenzaria inicializando los valores de los registros de la CPU y de la memoria ROM. A partir de ahi comenzaria un bucle infinito (hasta que "apages" el emulador). En ese bucle se ejecutara un ciclo del CPU en cada iteracion. No me acuerdo de los detalles del Z80, pero supongo que el primer ciclo seria leer la direccion de memoria apuntada por el registro IP (instruction pointer) que sera el primer byte de la instruccion. En funcion de ese byte se determina que ciclos son los que se van a ejecutar despues, ya que dependen de la instruccion. Supongo que en tu manual del Z80 tendras los distintos ciclos de cada instruccion.

Las operaciones de la UAL (unidad aritmetico logica) seran funciones que trabajan contra los registros (normalmente).

Esta seria (en mi opinion) la estructura del emulador. Faltaria explicar como deberias poner una funcion sleep para que cada ciclo se ejecute a la frecuencia original de la maquina aunque lo ejecutes en una maquina mucho mas rapida que la original.

Saludos.

PD: Hace siglos que no trabajo con C, asi que no creo que pueda ayudarte con el codigo en concreto.
__________________
Josemi

Aprendiz de mucho, maestro de poco.