Permiso para... soltarla

Si por algo se caracteriza el Spectrum es por su gran variedad de periféricos (clásicos y modernos)

Moderador: Sir Cilve Sinclair

Permiso para... soltarla

Notapor inacete el Mie May 14, 2008 12:14 am

Hola, desde mi ignoracia voy a soltar un "GORDA". Espero sepais perdonar mi ingenuidad.

En otros proyectos consoleros que estoy metido, he topado con un microcontrolador de la marca microchip modelo 18f4550 (tiene 3 hermanos mas).

http://ww1.microchip.com/downloads/en/D ... 39632D.pdf

Estos microcontroladores son como un pequeño ordenador, cpu, memoria, i/o, etc. todo en uno.

Aqui va la "GORDA"... se pordria intentar emular con uno de estos, si no todo, parte de un zx spectrum 48k. Me explico. he leido que los emuladores menos depurados necesitan mas o menos 10 veces la capacidad de la maquina a emular. El z80 del 48k va a 4 megas, el 18f a 48 megas. En ram tenemos 48k frente a 2048... ¿que os parece? ¿alguien controla de microcontroladores?.

Saludos.
inacete
rst 0
 
Mensajes: 18
Registrado: Lun Abr 28, 2008 11:18 pm

Re: Permiso para... soltarla

Notapor mcleod_ideafix el Mie May 14, 2008 2:25 am

Como mucho, pero mucho mucho, podrás emular un Z80A, es decir, hacer funcionar el PIC como una máquina virtual que decodifique y ejecute instrucciones máquina del Z80A, y además, sólo las podría ejecutar desde la propia flash, porque lo que es RAM, sólo tiene 2K.
Pero te faltaría emular la ULA, y para eso, fundamentalmente, necesitas memoria RAM, al menos 6912 bytes para implementar un frame buffer que se pueda leer 50 veces por segundo.

Y te faltaría velocidad: el microcontrolador tendría que encargarse de leer periódicamente esa RAM y construir una señal de video adecuada. Hay proyectos con PIC que son capaces de generar una señal de video, sí, pero estamos hablando de que debe hacer a la vez: interpretar y ejecutar instrucciones de un Z80A, y generar la señal de video.

Yo lo veo, para un único PIC, muy difícil. Más factible sería usar dos de ellos, uno que hiciera de Z80A y otro que hiciera de ULA. Y aún así, la velocidad a la que hay que enviar píxeles supera mucho a la capacidad de cualquier PIC.

Nosotros hace años que se nos quedaron pequeños. En lugar de ellos, usamos los micros de Silicon Labs: hasta 100 MHz sin necesidad de reloj externo, hasta 8K de RAM en chip, y con la posibilidad de acceder de forma transparente a 64K de RAM externa. Con uno de estos, un C8051F340 me he hecho una pequeña controladora VGA, es decir, que el propio controlador envía una señal compatible VGA de un frame buffer integrado en el propio micro. Claro está que el 341 sólo tiene 4K de RAM, y 48 MHz de velocidad, con lo que unido a la velocidad con la que hay que generar señales de video en VGA, no da tiempo para mucha resolución. Pero sí que da tiempo a alternar entre lo que es generación de pantalla, y otras tareas, con lo que puedes incluso hacer pequeños juegos.

Mira cómo queda:

Esta primera imagen muestra el modo solo-texto que implementé en el F340, en el que uso 40x30 bytes para conseguir 30 filas de 40 columnas cada una, en modo monocromo.
La pantalla muestra un resumen de las posibilidades de esta... peculiar VGA. Hay dos modos gráficos y un modo texto. El modo gráfico más elevado permite 136x240 píxeles. Con el microcontrolador C8051F132, que llega hasta 100 MHz y con 8K de RAM, llego sin problemas a tener 256x240 puntos.
El 341 se encarga, para cada scan de pantalla, de leer los códigos ASCII del frame buffer, buscar la definición del carácter correspondiente en ROM, de cada carácter, leer el scan que corresponde, y serializarlo, bit a bit, por la salida "verde" de la VGA. El resultado, este que ves aquí (la fuente de letras, si no la conoces... ¡¡¡es la del MSX!!!)
Imagen

Esta otra imagen es una demo en la que el microcontrolador va pintando círculos cada vez más grandes. Se usa algo parecido al OVER 1 del Spectrum para ir borrando el mismo círculo antes de pintar el siguiente:
Imagen

Aquí presento el modo de baja resolución, pero con 16 colores, ¡¡y sin "attribute clash"!!
Imagen

La paleta de colores:
Imagen

Un color en cada pixel:
Imagen

Tabla ASCII con la fuente usada en los modos gráficos:
Imagen

Un clásico: el PONG (también versionado en los PIC) pero esta vez a todo color y en VGA.
Imagen

Demo gráfica usando el acelerómetro ADXL311:
Imagen

Esta última imagen es de un programa para probar el acelerómetro que incluimos en la plaquita de desarrollo donde se está ejecutando todo esto. El acelerómetro tiene dos ejes y con el conversor analógico-digital de la placa se puede leer la inclinación en el eje longitudinal y transversal, de tal forma que si se mantiene la placa horizontal, el circulito blanco no se mueve (como la burbuja de un nivel). Si se inclina la placa en un sentido u otro, la bolita se mueve más rápidamente cuanto más sea la inclinación.

Por lo demás, como alternativa para construir un SoC no sólo no es ninguna burrada gorda, sino que me parece de lo más interesante. Cuando escribi el código para esta pequeña controladora compatible VGA se lo envié a uno de mis compañeros de departamento y el año que viene los alumnos harán este tipo de cosas en las prácticas de la asignatura de microcontroladores que imparte mi compañero.


En resumen: es una buena idea usar PIC's para hacer estas cosas, aunque creo que un Spectrum se sale de lo que puedes llegar a conseguir. Quizá te sea mejor empezar con algo como implementar un juego sencillo, como el Pong, en el propio micro, y usando sus recursos para generar aunque sea una señal de video compuesto monocromática. Hay mucha información en internet sobre este tema. ¡Suerte!
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Permiso para... soltarla

Notapor radastan el Mie May 14, 2008 2:09 pm

Yo no se que manía tiene la gente con los PIC, cuando ATMEL tiene microcontroladores más baratos y mucho más potentes. No obstante, como bien te ha comentado Mc_Leod, los microcontroladores suelen llevar una baja cantidad de RAM, por lo que no servirían para emulador un Spectrum.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2186
Registrado: Lun May 07, 2007 5:34 pm

Re: Permiso para... soltarla

Notapor mcleod_ideafix el Mie May 14, 2008 10:20 pm

De hecho, y por el tema del rendimiento, si lo que quieres es hacer una ULA, o sea, parte de lo que es la arquitectura de un Spectrum, en lugar de "perder el tiempo" con PIC's, usa una CPLD de Altera o Xilinx.

Pero si es la primera vez que te enfrentas a esto de los microcontroladores, los PIC's son un buen punto para empezar: no esperes maravillas de ellos, pero son baratos, y el equipo hard/soft para programarlos se encuentra muy fácilmente, y en el caso de los programadores, muy barato. Además de eso, hay cantidad de información en internet sobre qué hacer con ellos. Quizás sea esa la razón por la que están tan extendidos entre el mundo de la electrónica amateur.

Cuando le cojas el truco, tú mismo verás que se te quedan muy cortos. A partir de ahí tienes los AVR, los micros basados en StrongArm, los Silabs que te comentaba antes... incluso Zilog tiene una familia de microcontroladores, los Z8 Encore, basados en el juego de instrucciones del Z80A, lo que significa que muchos de los que están aquí podrían programarlos desde ya, y con periféricos, timers, memoria RAM, etc. No son los más potentes, ni los más baratos, ni los más versátiles, pero desde luego, para implementar un Spectrum con microcontroladores... son quizás la opción más lógica, ¿no?
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Permiso para... soltarla

Notapor radastan el Mie May 14, 2008 11:20 pm

Por cierto, Mcleod, ¿dónde has sacado la información para componer señales VGA? es que tengo pendiente ciertos experimentos, y no me quiero quedar en señales AV.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2186
Registrado: Lun May 07, 2007 5:34 pm

Re: Permiso para... soltarla

Notapor mcleod_ideafix el Mie May 14, 2008 11:33 pm

Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Permiso para... soltarla

Notapor inacete el Jue May 15, 2008 12:07 am

Como dicen en mi pueblo MAIQUEDAU FLIPAU. :mrgreen:

Una pasada tu microordenador y una pasada tus conocimientos.

Saludos.
inacete
rst 0
 
Mensajes: 18
Registrado: Lun Abr 28, 2008 11:18 pm

Re: Permiso para... soltarla

Notapor radastan el Jue May 15, 2008 9:16 am



Gracia's.

Ahora a sacar tiempo de alguna parte, que tengo ganas de crearme mi propia VGA por capricho.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2186
Registrado: Lun May 07, 2007 5:34 pm

Re: Permiso para... soltarla

Notapor decicoder el Jue May 15, 2008 11:59 am

Precisamente con un modesto pic 18F252 me planteé la posibilidad de hacer un conversor VGA para los Spectrum con salida rgb. Era llevarlo al límite pero por los tiempos teoricos de instrucción quizá podría funcionar.
Basicamente se trata de muestrear con un buffer de 265 bytes (el PIC utiliza paginas ram de solo 256 bytes) una línea del Spectrum y a la vez sacar dos veces ese buffer para el VGA en el mismo tiempo que dura una linea del Spectrum, metiendo un pulso de sincronismo horizontal entre medias.
La frecuencia de sincronismo vertical sería la misma que la del Spectrum 50 Hz. Mi duda era si la tolerancia de los monitores VGA que normalmente tranajan a 60 / 75Hz admitiria 5O HZ
xor a
ld R,a
b1 in f,(c)
jp pe , b1
ld a,R
Avatar de Usuario
decicoder
Jack The Nipper
 
Mensajes: 176
Registrado: Jue Jul 19, 2007 10:37 am

Re: Permiso para... soltarla

Notapor mcleod_ideafix el Jue May 15, 2008 2:38 pm

Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Permiso para... soltarla

Notapor decicoder el Jue May 15, 2008 8:09 pm

Podría valer pero es una poco matar moscas a cañonazos.
Lo bonito de los proyectos para Spectrum es intentar usar componentes de la época ;) o lo más elemental posible.
Encontré un conversor sencillo hecho con una memoria fifo, un duplicador de frecuencia , conversores A/D y poco más para controlar las señales de escritura/lectura de la memoria.
Pero también era demasiado para lo que necesita el Spectrum. Primero te puedes ahorrar la primera parte conversor analogico digital tomando directamente los componentes del color del Gate Array sólo cuatro bits!!. Y luego el conversor digital/analogico de la parte vga lo puedes hacer tan simple como el propio de +2B , seis resistencias y seis diodos.
xor a
ld R,a
b1 in f,(c)
jp pe , b1
ld a,R
Avatar de Usuario
decicoder
Jack The Nipper
 
Mensajes: 176
Registrado: Jue Jul 19, 2007 10:37 am

Re: Permiso para... soltarla

Notapor mcleod_ideafix el Jue May 15, 2008 8:38 pm

decicoder escribió:Podría valer pero es una poco matar moscas a cañonazos.

Hombreeeeeeeeee, tanto como cañonazos... Este integrado, que sale por 9 dólares la unidad, hace exactamente y justamente lo que necesitas. No estamos hablando de hacer un scan doubler usando un BT878 unido a un microcontrolador de 32 bits que haga las veces de master PCI, y que lea el frame buffer que escribe el BT878 para generar una señal VGA.

decicoder escribió:Lo bonito de los proyectos para Spectrum es intentar usar componentes de la época ;) o lo más elemental posible.

Es una opinión. Sobre usar componentes "de época" estaría justificado para cosas que existieran en aquella época, pero las VGA's estaban en pañales. Y sobr e"lo más elemental posible", pues más elemental que un único integrado...

decicoder escribió:Encontré un conversor sencillo hecho con una memoria fifo, un duplicador de frecuencia , conversores A/D y poco más para controlar las señales de escritura/lectura de la memoria.

Y eso... ¿es elemental?

decicoder escribió:Pero también era demasiado para lo que necesita el Spectrum. Primero te puedes ahorrar la primera parte...

Te sigue haciendo falta una memoria y un secuenciador que vaya alternando lecturas con escrituras. Ten en cuenta que mientras estás leyendo dos veces un scan a doble velocidad para generar la señal VGA, tienes que ir escribiendo el siguiente scan que viene de la ULA. Eso significa usar dos memorias independientes, o bien una única memoria alternando ciclos de lectura y escritura, para lo cual, y si quieres hacerlo con suficiente rapidez, o echas mano de electrónica discreta, o bien usas CPLD's. Para lo primero, serán más de 2 y más de 3 integrados. Para lo segundo (que no es de época), te sale más barato el chip del post anterior.

En todo caso, con PIC's, FIFO's, o lo que sea, es un proyecto interesante :)
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Permiso para... soltarla

Notapor radastan el Jue May 15, 2008 11:42 pm

Lo jodido es encontrar el dichoso chip en España, y a un precio razonable.

Quizás sea una solución rápida a mis experimentos, genero una señal PAL y con dicho chip una VGA, doble salida a gusto del consumidor.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2186
Registrado: Lun May 07, 2007 5:34 pm

Re: Permiso para... soltarla

Notapor mcleod_ideafix el Vie May 16, 2008 12:00 am

Hombre, si compras sólo uno te sale mucho más caro los gastos de envío que el propio chip, pero si compras varios distribuyes el coste de envío entre los que compres.
Yo estoy ahora mismo inundado de spam chino (quien me mandaría dar la dirección de email "de verdad" para estas cosas) porque se me ocurrió pedir precio para determinado chip, y ahora tengo como 15-20 propuestas de precios diferentes en menos de dos días. El chip que he pedido, para lo que hace, está tirado de precio, pero con los gastos de envíoooooooooooooo, ufff! Veremos a ver... :\
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Permiso para... soltarla

Notapor decicoder el Vie May 16, 2008 10:05 am

mcleod_ideafix escribió:Hombreeeeeeeeee, tanto como cañonazos... Este integrado, que sale por 9 dólares la unidad, hace exactamente y justamente lo que necesitas. No estamos hablando de hacer un scan doubler usando un BT878 unido a un microcontrolador de 32 bits que haga las veces de master PCI, y que lea el frame buffer que escribe el BT878 para generar una señal VGA.

Exacto y justo no. Es bastante más de lo que se necesita.
Como decía san Francisco de Asis. Necesito poco y lo que necesito lo necesito muy poco.
Que cueste solo 9 dolares no quiere decir que no sea un maquinón. Manejará resoluciones y profuncidad de color que exceden en mucho al modesto Spectrum.
mcleod_ideafix escribió:Es una opinión. Sobre usar componentes "de época" estaría justificado para cosas que existieran en aquella época, pero las VGA's estaban en pañales. Y sobr e"lo más elemental posible", pues más elemental que un único integrado...


También podría verse como más elemental poner una cajanegra con entrada de UHF y salida VGA de esas que venden. Tuve una que apenas me ha durado dos años. Cosas de la electrónica moderna de usar y tirar.

mcleod_ideafix escribió:Te sigue haciendo falta una memoria y un secuenciador que vaya alternando lecturas con escrituras. Ten en cuenta que mientras estás leyendo dos veces un scan a doble velocidad para generar la señal VGA, tienes que ir escribiendo el siguiente scan que viene de la ULA. Eso significa usar dos memorias independientes, o bien una única memoria alternando ciclos de lectura y escritura, para lo cual, y si quieres hacerlo con suficiente rapidez, o echas mano de electrónica discreta, o bien usas CPLD's. Para lo primero, serán más de 2 y más de 3 integrados. Para lo segundo (que no es de época), te sale más barato el chip del post anterior.


Es una pena que haya perdido el link de ese conversor. Si no recuerdo mal era una unica memoria y basicamente lo que hacia era leer (salida vga) al doble frecuencia de la que se escribía (muestreo del RGB). Fue al ver ese circuito cuando se me ocurrió lo del PIC. Un pic era más facil de montar y de conseguir

Me lo planteé para PIC 18F252 porque era el que tenía más a mano Pero sería conveniente elegir uno que llegara 64 MHz para ir más holgados y con al menos un banco de 256 bytes RAM libres. Hay muchos donde elegir y baratos : http://www.microchipdirect.com/Chart.as ... 1&treeid=1
el PIC18F24K20 (sólo $1.44) podría valer

Quizá alguien se pregunte: "Un momento si el Spectrum tiene una resolucion horizontal de 256 pixel + el BORDER, ¿cómo piensas muestrear una linea entera con solo un buffer de 256 bytes?

Bien, es obligatorio hacerlo en un único banco de RAM de 256 porque las operaciones cambio de banco en el PIC son costosas en CPU y no se puede perder tiempo cuando hablamos de video.
Pero con 256 bytes podemos hacer 512 muestras al scan del Spectrum ya que el dato color del Spectrum ocupa solo 4 bites.

Si manejamos nibbles tenemos la ventaja adicional de la instruccion SWAP del PIC. Un SWAP sobre un registro del puerto entrada/salida que es más rápida que poner un byte de memoria en el puerto.

Y para quitar todavía más trabajo a la CPU se me ocurrió un ingenioso truco (que también se podría conisderar como chapucero). Se trata de conseguir que una sola instruccion de lectura del puerto del PIC leer de golpe dos pixels del Spectrum ( el actual en el nibble bajo y el anterior en el nibble alto). ¿Cómo? Metiendo un retardo analogico de exactamente los nanosegundos que dura un pixel. Cosa nada fácil ciertamente.
Como prueba de concepto o prototipo se podría empezar por un conversor RGB -> RGB pero con la imagen del Spectrum regenerada por el PIC desplazada hacia la derecha.
Para hacer el muestro y poner datos en la salida no se pueden hacer bucles ni nada parecido. El programa debe ser a base de fuerza bruta de repetir instrucciones. Habría que desarrollar una programita que en funcion de algunos parametros generase automáticamente el codigo fuente para el PIC. Hacerlo a mano sería trabajo de chinos.

mcleod_ideafix escribió:En todo caso, con PIC's, FIFO's, o lo que sea, es un proyecto interesante :)


A ver si inacete se anima
xor a
ld R,a
b1 in f,(c)
jp pe , b1
ld a,R
Avatar de Usuario
decicoder
Jack The Nipper
 
Mensajes: 176
Registrado: Jue Jul 19, 2007 10:37 am

Siguiente

Volver a Hardware

¿Quién está conectado?

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

cron