Proyecto ZDP-80 - Nuestro microordenador desde cero [#01]

BBC, Dragon, Sam Coupé, Oric ...
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: Proyecto ZDP-80 - Nuestro microordenador desde cero [#01

Mensajepor mcleod_ideafix » 04 Oct 2012, 18:42

radastan escribió:...pero prefiero experimentar lo que pasa si usamos sólo las líneas impares por vídeo compuesto.

Míralo tú mismo:

Carga el siguiente programa en un Spectrum real. Este program simula lo que pasaría si el Spectrum sólo mostrara un campo de los dos. El efecto de "apagar" un cuadro se consigue a base de interrupciones. Cuando llega el retrazo vertical mira el valor de una variable que va basculando 0-1-0-1-0-1... Si es 0, la rutina guarda el contenido actual de la memoria de atributos en RAM, y a la vez, la va escribiendo a 0. Además, pone el borde también a 0. Esto tiene como efecto que durante el siguiente campo, la pantalla se verá completamente negra.
Si la variable es 1, entonces se restaura el color del borde a partir de la variable del sistema BORDCL (23624) y el contenido de la memoria de atributos de la copia que se hizo en RAM. El efecto es que en el siguiente campo, la pantalla se verá con su contenido normal.
Dado que esto es sólo una emulación del efecto a base de cambiar manualmente el color de lo que se ve en pantalla, verás que a veces se "deja" basurilla en forma de cuadros que deberían haber cambiado y no lo han hecho, pero aparte de eso, es así como se vería.

Si tienes pinchado el Spectrum a una TV de tubo, al ejecutar el programa verás un parpadeo bastante molesto si el fondo es blanco. Con fondo negro el parpadeo es menor, a menos que tengas un dibujo con muchos píxeles blancos.
Si lo tienes pinchado a una tele LCD o plasma, entonces el efecto que verás en pantalla dependerá de cómo maneje tu tele la señal de video. En la mayoría de los casos la tele hará un desentrelazado de la imagen y pondrá los dos campos superpuestos, cada uno en su sitio, aunque la señal original sea PAL progresiva. Si es así, verás un bonito efecto de scanlines, y nada (o muy poco) de parpadeo.

Si no puedes echar mano de un Spectrum en este momento, puedes ver los efectos que te describo usando el emulador EightyOne (ningún otro conozco que sea capaz de emular la TV como lo hace éste). Configura EightyOne para emular un 48K. Carga el programa y en las opciones de "TV Emulation" (tecla F9) marca todas las casillas excepto la última. Lo que ves sería lo que se ve en una tele de tubo (salvo el tema de que el refresco del emulador no coincide con el refresco de tu pantalla y seguramente se vea que el cambio de blanco a negro no lo hace de forma limpia, sino que parece que cambia a mitad de pantalla). Si marcas la última casilla (Interlaced display) entonces EightyOne se comporta como una tele LCD/plasma y desentrelaza la imagen del Spectrum, mostrándote los mismos scanlines que verías en una tele de estas.

-- 04 Oct 2012, 18:49 --

Joss escribió:(Perdón que me meta en la discusión de vez en cuando, sobre todo si son preguntas muy básicas..... ;) )

Lo que contais de buffer multiplexado es algo que también tiene el Amstrad CPC por ejemplo?:


No sé cómo lo hace el Gate Array en el Amstrad para compartir la memoria de video con el procesador, pero creo recordar que mete un estado de espera a la CPU en todos los ciclos de bus, de forma que en ese ciclo de espera, el Gate Array le "roba" la memoria a la CPU, hace su acceso, y se la devuelve.

En el trozo de esquema que pones no veo ningún bus multiplexado. Lo que hay es un driver triestado para aislar a la CPU del bus de datos de la memoria dinámica cuando el Gate Array tiene que acceder a ella. Probablemente el bus de direcciones que va a la RAM dinámica (lo que estaría más arriba del dibujo) sí que esté multiplexado.
Adjuntos
unsolocampo.zip
(333 Bytes) Descargado 401 veces
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Proyecto ZDP-80 - Nuestro microordenador desde cero [#01

Mensajepor radastan » 04 Oct 2012, 20:08

Vaaaaaaaale, me has abierto los ojos McLeod.

Entonces los pasos son:

1- Diseñar un circuito con todas las señales de reloj a partir de 7 Mhz como el del Jupiter ACE
2- Diseñar un buffer doble que lea la memoria y genere los pixels (256x192 monocromo)
3- Ver lo que se puede hacer con el modo de tonos de gris, si es complicado de implementar o no (idem para otros modos)
4- Ver la posibilidad de hacer que la memoria de vídeo no sea contenida

Voy pasito a pasito, la pega es que seguramente hasta el Lunes no pueda colaborar en el hilo porque mañana voy a pasar el fin de semana a mi tierra.

Me llevaré documentación para repasarla allí.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

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: Proyecto ZDP-80 - Nuestro microordenador desde cero [#01

Mensajepor mcleod_ideafix » 04 Oct 2012, 20:42

radastan escribió:Vaaaaaaaale, me has abierto los ojos McLeod.

Entonces los pasos son:

1- Diseñar un circuito con todas las señales de reloj a partir de 7 Mhz como el del Jupiter ACE


Si lo quieres hacer con los timmings del Jupiter ACE (y copiando por tanto parte del esquemático del ACE), entonces son 6.5MHz, no 7. 7MHz sería como en el Spectrum.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Proyecto ZDP-80 - Nuestro microordenador desde cero [#01

Mensajepor radastan » 04 Oct 2012, 21:09

mcleod_ideafix escribió:7MHz sería como en el Spectrum.


Será 7 MHz, quiero sacarle partido a la CPU para que tengamos potencia para alguna chorrada o experimento.

Mi intención es implementar el esquema de los tiempos la semana que viene en placas de inserción de pruebas y ver el cuadrado de pantalla y el borde. Con eso ya es un pequeño paso exitoso.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

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: Proyecto ZDP-80 - Nuestro microordenador desde cero [#01

Mensajepor mcleod_ideafix » 04 Oct 2012, 21:29

radastan escribió:Mi intención es implementar el esquema de los tiempos la semana que viene en placas de inserción de pruebas y ver el cuadrado de pantalla y el borde. Con eso ya es un pequeño paso exitoso.

Pues yo ya lo estoy viendo ;) Tengo el chip de video prototipado en la Spartan y le he metido, para empezar, que lea siempre el valor 00010001 . Esto generará una pantalla con 64 líneas verticales. Los píxeles activos salen en blanco, y el fondo, negro.

Mira tú mismo (cachis, ha salido un poco movida):

test_chip_video_radastan_1.jpg
test_chip_video_radastan_1.jpg (47.52 KiB) Visto 7218 veces

Yo lo que puedo probar son diferentes mecanismos de contienda, a saber:
- Contienda fácil de implementar, pero burra, al estilo ACE
- Contienda fina, un poco al estilo del Spectrum
- Sin contienda

Mi intención es hacer un prototipo con un Z80, el chip de video, una pequeña ROM donde irá el programa de prueba, y la VRAM. El programa de prueba de la ROM se copiará a VRAM para que se ejecute allí, y consistirá en un scroll horizontal pixel a pixel de los contenidos de la pantalla. Es una operación costosa en accesos de memoria, así que la contienda deberá notarse más o menos según el método empleado.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Proyecto ZDP-80 - Nuestro microordenador desde cero [#01

Mensajepor radastan » 04 Oct 2012, 22:24

mcleod_ideafix escribió:Es una operación costosa en accesos de memoria, así que la contienda deberá notarse más o menos según el método empleado.


Si evitar la contienda no es muy complicado, perfecto, en caso contrario yo prefiero un buffer de lectura para recoger los pixels y poco más, si hay que meterle WAIT a la CPU porque trate de acceder a la misma vez... es lo que hay. En el ZX Spectrum hay contienda y he visto scrolls la mar de majos, y nuestra CPU va a ir al doble de velocidad (incluyendo acceso a memoria, y encima las memorias con menor tiempo de acceso).
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

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: Proyecto ZDP-80 - Nuestro microordenador desde cero [#01

Mensajepor mcleod_ideafix » 04 Oct 2012, 22:34

radastan escribió:...nuestra CPU va a ir al doble de velocidad (incluyendo acceso a memoria, y encima las memorias con menor tiempo de acceso).

Recuerda que el hecho de que uses memorias rápidas no va a hacer que los accesos a memoria de la CPU vayan a ser más rápidos. El tiempo de acceso a la memoria dependerá unicamente de la velocidad de la CPU, y se requerirá en todo caso, que la memoria tenga un mínimo de velocidad, para que le dé tiempo a entregar el dato a la CPU. Para un Z80 a 7MHz, y teniendo en cuenta que el ciclo más corto de memoria es 1 ciclo de reloj (para la escritura de un dato), tienes que necesitas una memoria de al menos 7 MHz, o puesto en nanosegundos, una memoria con un tiempo de lectura/escritura igual o menor que 140ns. Memorias más rápidas que ésta no harán que el micro lea o escriba más rápido.

Eso sí: una memoria el doble o triple de rápida de lo que requiere el micro, te permitirá usar técnicas de multiplexión para dar la ilusión de que tienes dos memorias independientes: una para la CPU y otra para el video (uno de los mecanismos para evitar la contienda que comenté antes)
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Proyecto ZDP-80 - Nuestro microordenador desde cero [#01

Mensajepor radastan » 04 Oct 2012, 23:08

mcleod_ideafix escribió:
radastan escribió:...nuestra CPU va a ir al doble de velocidad (incluyendo acceso a memoria, y encima las memorias con menor tiempo de acceso).

Recuerda que el hecho de que uses memorias rápidas no va a hacer que los accesos a memoria de la CPU vayan a ser más rápidos. El tiempo de acceso a la memoria dependerá unicamente de la velocidad de la CPU, y se requerirá en todo caso, que la memoria tenga un mínimo de velocidad, para que le dé tiempo a entregar el dato a la CPU. Para un Z80 a 7MHz, y teniendo en cuenta que el ciclo más corto de memoria es 1 ciclo de reloj (para la escritura de un dato), tienes que necesitas una memoria de al menos 7 MHz, o puesto en nanosegundos, una memoria con un tiempo de lectura/escritura igual o menor que 140ns. Memorias más rápidas que ésta no harán que el micro lea o escriba más rápido.

Eso sí: una memoria el doble o triple de rápida de lo que requiere el micro, te permitirá usar técnicas de multiplexión para dar la ilusión de que tienes dos memorias independientes: una para la CPU y otra para el video (uno de los mecanismos para evitar la contienda que comenté antes)


1- Evidentemente no va a ir más rápido el micro por tener memoria más rápida que él, pero los tiempos de acceso SI cuentan. Aparte que al ir al doble de frecuencia que el Spectrum significa que irá el doble de rápido el acceso a memoria.
2- Lo de duplicar el reloj de la memoria y que esos 16K sean más rápidos para evitar la contienda sirviendo a los dos a la vez ya lo he comentado, la cuestión es cómo planificarlo (creo que es el método más sencillo).
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

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: Proyecto ZDP-80 - Nuestro microordenador desde cero [#01

Mensajepor mcleod_ideafix » 04 Oct 2012, 23:15

Bueno, pues con esto termino por hoy. Le he conectado una ROM de 16K a la que le metido un bitmap en el formato que maneja el chip de video que tengo hecho. La CPU existe, pero está parada (no tiene reloj), así que lo que hay aquí es el chip de video accediendo a memoria y generando una imagen, que no es poca cosa :D

Para mi primera prueba, he cogido una imagen de un tío feo que me he encontrado por ahí :P

tio_feo.jpg
tio_feo.jpg (60.33 KiB) Visto 7374 veces

Esta será la imagen con la que haga la prueba esta del scroll horizontal para ver la contienda. Eso ya... mañana o pasado.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Proyecto ZDP-80 - Nuestro microordenador desde cero [#01

Mensajepor radastan » 04 Oct 2012, 23:23

Que sepas que se te va a joder el monitor.

:lol: :lol: :lol:

Por cierto, si no es mucha molestia simula después el modo con dos tonos de gris extra (sería dos bits por pixel) para ver cual es la merma de velocidad. Lo gracioso es que ese modo sería gráficamente como la primera Gameboy pero con mucha más resolución (que es otra idea posible, bajar la resolución en ese modo a 160x144 pixels).
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝


Volver a “Otros microordenadores”

¿Quién está conectado?

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