Mi CPU teórica...

Foro dedicado a la emulación de sistemas clásicos en el PC o en otros sistemas.
ZX-81
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 130
Registrado: 04 Ene 2013, 16:43
Sistema Favorito: Spectrum +2
primer_sistema: ZX81
consola_favorita: Nintendo DS/3DS
Primera consola: Sega Genesis/Megadrive
Ubicación: La orilla del mar Mediterráneo
Gracias dadas: 16 veces
Gracias recibidas: 39 veces
Contactar:

Re: Mi CPU teórica...

Mensajepor ZX-81 » 20 Ene 2013, 14:40

Hark0 escribió:
Joss escribió:Yo no lo veo una pérdida de tiempo. Solo comentar que has elegido un método bottom-up para investigar, y no uno top-down, osea coger algo que ya existe e ir mirando como está hecho.


Sobre lo de coger algo que existe... siempre he perseguido hacerme un emulador de ZX... tengo muchos libros sobre el Z80, etc... y hay toda la info que uno quiera... pero, primero me interesaba ENTENDER todo (todo eso sin contar que un ZX tiene un montón de instrucciones, registros, etc), por ejemplo pensé en lo siguiente:


Como prueba de concepto, está bien, no deja de ser interesante. Para mi, emular una Z80 es relativamente sencillo, comparado con otros procesadores mucho más complejos. Que tenga muchas instrucciones solo resulta tedioso a la hora de depurar la emulación de la CPU, especialmente si pretendes ser puntilloso con la exactitud. No es tontería ser puntilloso, al menos para mi, pues quiero tener un grado de certidumbre grande de que me puedo fiar de la emulación de la CPU para que, cuando un programa falla, sospeche de la emulación de la máquina únicamente. Si no, es para volverse tarumba.

Ahora bien, como programador de un modesto emulador de ZX Spectrum te digo que el demonio está en los detalles. Una cosa es emular a la Z80 y otra muy diferente emular a la Z80 de la manera en que está usada en el Spectrum. El 90% de los programas te van a funcionar con una emulación relativamente sencilla. El otro 10% es otro cantar y de ese 10% hay un 2% que te costará la vida que funcionen bien (para mi, el ejemplo palmario es la Paralaktica Demo). No solo hay que emular las instrucciones, sino emular la secuencia exacta de pasos que realiza la CPU en cada instrucción para que todo suceda cuando debe suceder. En el Spectrum, están fuertemente interrelacionados la CPU, la ULA y la memoria, de manera que hacer una implementación limpia es difícil porque es un sistema fuertemente acoplado. Lo que es a mi, me llevó más tiempo comprender decentemente esas interacciones que cualquier otra cosa.

Respecto al lenguaje, da un poco igual. Todo depende de lo que busques y de la ayuda que te proporcione como herramienta de programación, que es de lo que se trata. Después de muchos años pensando en hacer un emulador en C++ usando la librería Qt, opté por hacerlo en Java, no solo para que fuera transportable, sino para que lo fuera sin complicaciones (léase, que no hubiera que compilar docena y media de librerías primero). Gracias a eso, sé que el emulador funciona inmediatamente y sin hacer nada especial en Windows, MacOS-X, Linux, Solaris x86 y zOS/Linux (lo que no significa que no haya tenido que hacer nada para que funcione bien en el de siempre.....). Es más, diría que si tienes en mente aprender algún nuevo lenguaje o plataforma, te plantees escribir tu emulador en ese lenguaje. Matarás dos pájaros de un tiro y, total, tampoco tienes prisa, igual te da tardar 2 meses que 2 años en escribir tu emulador porque, lo que importa,es que lo hagas. :)

Saludo y ánimo con ese emu.
José Luis
Todo espacio de dimensión finita distinta de cero con producto interno tiene una base ortonormal. Tiene sentido, cuando no piensas sobre ello.
Profesor de Matemáticas U.C. Berkeley

Empieza a jugar sin tener que compilar: JSpeccy
Emulador bare-metal para la Raspberry PI 2/3: ZXBaremulator

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Mi CPU teórica...

Mensajepor Hark0 » 21 Ene 2013, 12:08

mcleod_ideafix escribió:Mis alumnos del Grado de Ingeniería Electrónica hacen precisamente como práctica de programación en C un simulador de una CPU virtual. Es una máquina RISC muy simple, pero que les sirve para aprehender muchos conceptos, como por ejemplo, que las operaciones aritméticas más usuales (suma, resta, comparación, incrementar, decrementar, negar) se pueden hacer sólamente sumando, o bien cómo funciona el tema de la decodificación de instrucciones (uso un esquema que se parece bastante a cómo se hace después en Verilog)

Parte del material del curso está publicado aquí:
http://www.atc.us.es/asignaturas/inf/in ... rgas_etron

A partir de la sección "Boletines de prácticas de programación" está la documentación y utilidades relacionadas con el Simulador.

El lunes tienen precisamente el control de esta práctica... :carta:



Gracias mil por los links... los estudio...

@jotego Este fin de semana me he ojeado este PDF... Introducción al lenguaje VHDL (UPM)
http://www.eweb.unex.es/eweb/fisteor/an ... 20VHDL.pdf

Tiene tela el asunto VHDL ;) pero MUY interesante...

-- Actualizado 21 Ene 2013, 13:59 --

mcleod_ideafix escribió:Mis alumnos del Grado de Ingeniería Electrónica hacen precisamente como práctica de programación en C un simulador de una CPU virtual. Es una máquina RISC muy simple, pero que les sirve para aprehender muchos conceptos, como por ejemplo, que las operaciones aritméticas más usuales (suma, resta, comparación, incrementar, decrementar, negar) se pueden hacer sólamente sumando, o bien cómo funciona el tema de la decodificación de instrucciones (uso un esquema que se parece bastante a cómo se hace después en Verilog)

Parte del material del curso está publicado aquí:
http://www.atc.us.es/asignaturas/inf/in ... rgas_etron

A partir de la sección "Boletines de prácticas de programación" está la documentación y utilidades relacionadas con el Simulador.

El lunes tienen precisamente el control de esta práctica... :carta:



:mrgreen: Unos estudiamos como hobby y otros para aprobar... como mola! Descargado practica_inf_electronica_2012-2013.pdf

@Manualeitor ;) Gracias! y muy bueno lo del IBM... cámbialo por la nevera...
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

jepalza

Re: Mi CPU teórica...

Mensajepor jepalza » 21 Ene 2013, 14:19

Hark0 escribió:Tiene tela el asunto VHDL ;) pero MUY interesante...

Es una "kk". Lo he usado para el emulador de Spectrum 16k del OLS (perdón, sintetizado, no emulado), pero es un rollo. Tienes que olvidar todo lo evidente a la hora de programar, y pensar de otro modo, y eso, acostumbrado al Basic, es mortal. Por ejemplo, en VHDL, los procesos son paralelos, no lineales, o sea, que asignar dos variables a la par, haciendo que una dependa de la otra, es un riesgo, por que se puede ejecutar antes la segunda que la primera, y no darle el valor buscado. Ni te cuento si tiene tela.

De todos modos, lo voy a seguir usando, por que me he comprado una Xilinx mas potente, y cuando me llegue, voy a meter un 48k dentro, y todo lo que pueda.

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Mi CPU teórica...

Mensajepor Hark0 » 21 Ene 2013, 16:08

jepalza escribió:
Hark0 escribió:Tiene tela el asunto VHDL ;) pero MUY interesante...

Es una "kk". Lo he usado para el emulador de Spectrum 16k del OLS (perdón, sintetizado, no emulado), pero es un rollo. Tienes que olvidar todo lo evidente a la hora de programar, y pensar de otro modo, y eso, acostumbrado al Basic, es mortal. Por ejemplo, en VHDL, los procesos son paralelos, no lineales, o sea, que asignar dos variables a la par, haciendo que una dependa de la otra, es un riesgo, por que se puede ejecutar antes la segunda que la primera, y no darle el valor buscado. Ni te cuento si tiene tela.

De todos modos, lo voy a seguir usando, por que me he comprado una Xilinx mas potente, y cuando me llegue, voy a meter un 48k dentro, y todo lo que pueda.


Si, por lo que veo en el PDF que descargué, no tiene "nada" que ver con programar (de toda la vida)... aún así me parece interesante...y chungo ;)

-- Actualizado 21 Ene 2013, 17:12 --

mcleod_ideafix escribió:Mis alumnos del Grado de Ingeniería Electrónica hacen precisamente como práctica de programación en C un simulador de una CPU virtual. Es una máquina RISC muy simple, pero que les sirve para aprehender muchos conceptos, como por ejemplo, que las operaciones aritméticas más usuales (suma, resta, comparación, incrementar, decrementar, negar) se pueden hacer sólamente sumando, o bien cómo funciona el tema de la decodificación de instrucciones (uso un esquema que se parece bastante a cómo se hace después en Verilog)

Parte del material del curso está publicado aquí:
http://www.atc.us.es/asignaturas/inf/in ... rgas_etron

A partir de la sección "Boletines de prácticas de programación" está la documentación y utilidades relacionadas con el Simulador.

El lunes tienen precisamente el control de esta práctica... :carta:


Qué bueno... descargo el Simulador de CPU de la Universidad de Oviedo... y windows añade un (1) al nombre... examino mi carpeta de descargas... y resulta que YO ya había pasado por la página que indicas y había descargado ya material (fué estas Navidades)... bendito Gugel... :P

Tan sólo me faltaría el libro "Libro de teoría de la asignatura (Fundamentos de Informática para la Ingeniería Industrial) disponible en versión impresa en la biblioteca de la E.P.S."... hay pdf? :P

-- Actualizado 21 Ene 2013, 17:23 --


En vuestro PDF se comenta esta excepción: "La instruccion (EBFF) en 001C intento saltar a una direccion de memoria ilegal." El simulador se detiene mostrando el mensaje que muestro... ¿en la realidad se cuelga la CPU? ¿qué sucede?

Gracias x adelantado.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Mi CPU teórica...

Mensajepor mcleod_ideafix » 21 Ene 2013, 16:34

Hark0 escribió:Tan sólo me faltaría el libro "Libro de teoría de la asignatura (Fundamentos de Informática para la Ingeniería Industrial) disponible en versión impresa en la biblioteca de la E.P.S."... hay pdf? :P

Sí, pero sólo si eres alumno de mi asignatura ;)

Hark0 escribió:En vuestro PDF se comenta esta excepción: "La instruccion (EBFF) en 001C intento saltar a una direccion de memoria ilegal." El simulador se detiene mostrando el mensaje que muestro... ¿en la realidad se cuelga la CPU? ¿qué sucede?

En una CPU real lo que ocurre es que salta una excepción, y ya depende de cómo trate las excepciones, hará una cosa u otra. Por lo general, en respuesta a una excepción, se salta a un gestor de excepciones que suele ser parte del sistema operativo (que corre en esa CPU). Dado que el curso es de C, y no de SSOO, nos basta con que sean capaces de detectar las situaciones ilegales y las reporten. No tienen que hacer tooooodo lo que hace una CPU de verdad en respuesta a una excepción.
Por la misma razón, esta CPU tampoco admite interrupciones.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Mi CPU teórica...

Mensajepor Hark0 » 21 Ene 2013, 17:13

¿como que no soy alumno? :mrgreen: ¿y que hago yo aqui sino? XD


Lo de las expeciones, OK. ;)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Mi CPU teórica...

Mensajepor mcleod_ideafix » 21 Ene 2013, 21:27

jepalza escribió:
Hark0 escribió:Tiene tela el asunto VHDL ;) pero MUY interesante...

Es una "kk". Lo he usado para el emulador de Spectrum 16k del OLS (perdón, sintetizado, no emulado), pero es un rollo. Tienes que olvidar todo lo evidente a la hora de programar, y pensar de otro modo, y eso, acostumbrado al Basic, es mortal.


Porque tienes que dejar de pensar como un programador "al uso" y pensar como un ingeniero en electrónica. En electrónica es común pensar que hay cosas que se hacen "a la vez". Ejemplo: tú tienes un chip con 4 puertas NAND (el 74HCT00 de toda la vida) y ves como lo más normal del mundo que cada puerta NAND sea independiente de las otras tres, y que las cuatro puedan funcionar a la vez en cuatro circuitos independientes. No se te ocurre pensar que cuando el chip funciona, lo que hace es echar a andar una NAND en cada instante de tiempo.

Un ejemplo de esto de pensar de forma paralela es lo siguiente: hay un problema típico en programación que es el de intercambiar dos variables entre sí. A un novato novatísimo en programación, que te haga esto...
a = b;
b = a;

Le tienes que explicar que eso está mal, porque primero hace una cosa y luego la otra. La solución clásica pasa por usar la típica variable "t":
t = a;
a = b;
b = a;

Sin embargo, en Verilog, intercambiar entre sí el contenido de dos variables (registros) se hace así:
a <= b;
b <= a;
(el <= significa "asignación no bloqueante")

Porque ambas instrucciones se ejecutan a la vez.

-- Actualizado 21 Ene 2013, 22:30 --

Hark0 escribió:¿como que no soy alumno? :mrgreen: ¿y que hago yo aqui sino? XD

Pues.... no sé :P Yo acabo de venir del control de prácticas del Simulador de CPU y no te he visto. :carta: ¿tú has abonado la matrícula pertinente?
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

jepalza

Re: Mi CPU teórica...

Mensajepor jepalza » 21 Ene 2013, 23:30

Como bien sabes, Mcleod:Ideafix, aunque no soy un experto en Xilinx, ya he hecho mis "pinitos" con él (y pienso hacer mas, que me he pedido la "Papilio Pro", y está por llegar), pero a eso voy con el VHDL, que te cambia la forma de pensar. Es como viajar al extranjero, y empezar a pensar en otro idioma, sí o sí. Lo seguiré usando, pero el VHDL queda relegado al último puesto de programaciones conocidas y usadas por mi, justo tras el C++ :-ss

Avatar de Usuario
Metalbrain
MSX Turbo R
MSX Turbo R
Mensajes: 435
Registrado: 22 Nov 2008, 00:30
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Gracias recibidas: 2 veces

Re: Mi CPU teórica...

Mensajepor Metalbrain » 21 Ene 2013, 23:40

mcleod_ideafix escribió:Le tienes que explicar que eso está mal, porque primero hace una cosa y luego la otra. La solución clásica pasa por usar la típica variable "t":
t = a;
a = b;
b = a;


Ejem, ejem... un profesor cometiendo errores, muy bonito [-X ... :meparto:

t = a;
a = b;
b = t;

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Mi CPU teórica...

Mensajepor mcleod_ideafix » 21 Ene 2013, 23:42

Las prisas, hijo... :oops: (y que suelo pensar como Verilog :P )
(Dónde está el emoticono de látigo para fustigarse cuando uno lo necesita...)
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista


Volver a “Emuladores”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados