Foros del Web » Programación para mayores de 30 ;) » Programación General »

Cpu Z80

Estas en el tema de Cpu Z80 en el foro de Programación General en Foros del Web. Hola a todos... Nesesito ayuda para emular un procesador Z80.... Claro que lo quiero hacer con C porque assembler no se mucho. Tengo todas las ...
  #1 (permalink)  
Antiguo 24/06/2003, 10:46
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Cpu Z80

Hola a todos...

Nesesito ayuda para emular un procesador Z80....
Claro que lo quiero hacer con C porque assembler no se mucho.

Tengo todas las instrucciones y opcodes de el procesador, si alguien me ayuda a emular este procesador le estare agradecido...

Lo que quiero es que me ayuden a emular una instruccion osea unos pequeños ejemplos.........

Si nesesitan que les pase algun dato sobre el z80 alguna instruccion o opcode solo diganme.....

Saludos
  #2 (permalink)  
Antiguo 24/06/2003, 13:57
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

¿A que nivel lo quieres emular? Porque si lo unico que quieres es que te muestre la informacion de la memoria, registros, etc. como el depurador clasico (ventanitas mostrando los datos), es bastante sencillo. Simplemente muestra en pantalla los datos y "ejecuta" el codigo instruccion a instruccion modificando los valores mostrados segun corresponda.

Si es otro tipo de emulacion, explicala por favor.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 25/06/2003, 13:18
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
OK. Estoy construyendo un emulador de una consola X y esa consola X utiliza un procesador parecido al Z80 con instrucciones de mas y de menos..... Pero como es muy similar al Z80 pues voy a emular el Z80...
Osea quiero que en mi pc windows 98 AMD K6 476 Mhz pueda emular esa consola y para eso nesesito emular el procesador osea que mi procesador trabaje como Z80 pero solo en mi emulador...... Eso es lo que nesesito y pues tengo todas las instrucciones y opcodes del procesador, lo que hace falta es aprender a escribir codigo para emularlo en C claro...Y pues que mejor que con pequeños ejemplos explicados....

Espero me puedan ayudar.....

Saludos
  #4 (permalink)  
Antiguo 29/06/2003, 12:38
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Realmente lo que haces es un progrma que emule el hard, no que convierta tu hard en el que quieras emular. Sobre todo cuando emulas maquinas tan pequeñas como un z80.

Lo que pasa es que ademas del z80, vas a tener que emular el reto de hard de la consola (graficos, sonidos, entrada, ...) y tambien vas a tener que conseguir las ROMs de esa consola (las del sistema, la de los juegos tambien). Esas ROMs del sistema tendran almacenadas las rutinas para trabajar con el hard de la consola.

Sobre lo de emular el z80, seria hacer un programa que ejecutara los ciclos del procesador. Un ciclo seria leer de memoria la instruccion (en codigo maquina), y los siguientes dependerian de la instruccion en concreto.

Asi que para emular el z80 necesitas emular 3 hard: el propio z80, la memoria y el reloj (que indica al z80 cuando realizar un ciclo).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 29/06/2003, 21:07
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Ok se lo que se nesesita emular, graficos, sonido, etc...
Las roms son de gb porque intento emular un GameBoy ya......

Tengo una que otra....


Lo que quiero son pequeños ejemplos concretos de como hacerlo porque la mejor manera de aprender son con ejemplos porque vi un tutorial de como emular el procesador y solo dice algo como lo que dices lo que quiero es un ejemplo basado en algo.....

Espero me puedan ayudar.

Saludos
  #6 (permalink)  
Antiguo 30/06/2003, 13:35
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, una forma por donde empezar seria viendo el codigo de un emulador que ya funcione. Buscando uno rapido, en encontrado gnuboy (http://gnuboy.unix-fu.org/) que tiene la ventaja de que puedes usar su codigo legalmente siempre que cumplas la licencia. Es GPL, asi que basicamente si tu programa va a ser GPL, lo puedes usar (respetando los texto de copyright).

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 30/06/2003, 16:20
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Uffffffffffff

Ok gracias por eso pero no quiero que te ofendas pero tengo mas de 5 codigos de emuladores de gameboy y creeme que pido ejemplos para poder entender a ese codigo.....

solo pequeño ejemplos bien esplicados para que sepa que es lo que se esta haciendo con cada linea de codigo....

espero puedan ayudarme...

Saludos
  #8 (permalink)  
Antiguo 02/07/2003, 08:43
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 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.
  #9 (permalink)  
Antiguo 05/07/2003, 09:11
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Ok ya masomenos entendi, si quieres te puedo pasar los datos del Z80 para una mejor explicacion porque aun quedaron dudas..

Pero gracias esto ya puedso entender lo que hace el emulador.....

Y pues lo de la frecuencia no hay tanto problema la elocidad pero si seria bueno que trabajara a la velocidad normal....

Si puedes hacerte un codigo gracias...sino de todos modos gracias....

Si quieres los datos del Z80 dime....

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:53.