Página 1 de 1

Emulador ZX Spectrum 48k en un STM32F407 ARM

Publicado: 26 Ene 2013, 20:59
por jepalza
No, no estáis viendo un "doble hilo" ni me he equivocado de título. Este hilo es un complemento perfecto para el otro, primo-hermano, de 16k, pero con un STM32F103 (ver el hiloAQUI).

Me gustó tanto el cacharrín ese del hilo del 16k, que me he comprado otro mucho mas potente (si no me equivoco, es el mas potente de los ARM de desarrollo no comercial).
El primero, es un STM32F103, con 128k de Flash y solo 20k de RAM, con lo que solo pude meter un Spectrum de 16k, pero con su teclado PS2, lector de tarjetas SD y pantalla táctil para cargar los juegos.
Este segundo que me acabo de comprar hace unos días, es original de ST-Microelectronics, y es una plaquita para desarrollo y aprendizaje. Es un modelo ya descatalogado, pero que en Ebay se encuentran aún por 20-30€ (yo lo he comprado en Alemania por 23€ gastos incluidos).
Es el mismo microcontrolador que su hermano pequeño, pero este tiene nada mas y nada menos que 1mega de Flash (la de programas que entran ahí, el Emulador enterito del Spectrum solo ocupa 110k) y de RAM tiene la nada despreciable cifra de 192k, de los cuales, 128k son de usuario (suficientes para un Spectrum 48k y si me lo curro bien, incluso para un 128k). Los otros 64k son para variables, pero sirven para poner la ROM del Spectrum, por ejemplo, y aún sobra sitio.

Su hermano pequeño, el F103 es de 72mhz, que se puede forzar a 128mhz, y este en cambio, el F407, es de 168mhz, y se puede llevar a unos 250mhz. En la versión del peque que hice (lo comento en el hilo), tuve problemas de velocidad y el Spectrum no iba muy fino. En este en cambio, tengo que frenarlo, por que se pasa de velocidad.

He tenido que adaptar la pantalla LCD (que lleva a su vez el táctil y el lector de SD) al nuevo aparato, por que no coincidían los pines, y para ello he tenido que soldar 32 cables de un lado a otro, pero en breve, espero hacerme una plaquita donde conectar todo, y que quede compacto.

Si logro dejar todo acabado (por ahora, la pantalla táctil y el lector SD no me funcionan, no doy con los GPIO necesarios), mi idea es hacer tambien un emulador de C64, de MSX y de CPC, y meter todos juntos, y así, tener todos empaquetados en el chisme.

SI lo consigo, pues olé mis "Buebos", y si no lo consigo, que me quiten lo "bailao" :wtf:

Por cierto, esta plaquita lleva generador de sonidos integrado de Cirrus Logic, ideal para darle sonido al emulador, ademas lleva micrófono integrado, sensor de movimiento, cuatro leds multicolores, para dejarlos bailando mientras el Spectrum funciona, y un USB OTG (de los que al conectar al PC, se detectan como unidad HID, y se puede usar como ratón virtual, con el sensor de movimiento que lleva). Un detalle que me ha gustado sobremanera, es que lleva un pequeño STM32F103, como el que he usado para emular el 16k, pero que aquí se usa como "esclavo" para poder grabar la flash de su hermano mayor y depurar los programas mediante USB.

Re: Emulador ZX Spectrum 48k en un STM32F407 ARM

Publicado: 28 Ene 2013, 20:41
por jepalza
Me "auto subo" el hilo para comentar una actualización. He logrado que funcione a una velocidad "endiablada" el Emulador de Spectrum 48k. Me sobran cuadros por segundo, para poder "frenarlo" y que vaya a su velocidad, no como con el STM32F103, que iba lento y debía saltarme un par de cuadros para adecuar la velocidad.

Objetivo completado. Ahora, a poner teclado, SD y mirar de meter otros emuladores, como el CPC :arcade:


Re: Emulador ZX Spectrum 48k en un STM32F407 ARM

Publicado: 28 Ene 2013, 21:23
por robcfg
Bravo, Maestro!

Una preguntica... Tengo una placa ST32F100, eso da pa hacer algo interesante?

Re: Emulador ZX Spectrum 48k en un STM32F407 ARM

Publicado: 28 Ene 2013, 21:29
por jepalza
robcfg escribió:Bravo, Maestro!

Una preguntica... Tengo una placa ST32F100, eso da pa hacer algo interesante?


Acabo de mirar las especificaciones, y como mucho, te da para un ZX81 con 1k de RAM (y no voy en plan broma).
Según leo, el F100 solo lleva 128k de flash (ni tan mal, ya que el F103 lleva lo mismo, y ahí he podido meter un Spectrum 16k), pero en RAM anda "pelado", solo lleva 8k. Si quitas la RAM de vídeo y un par de "k" para variables de sistema, te quedas en "nada". Ademas, según veo, solo es de 24mhz, pero no es un problema para un ZX81, ya que, se pueden forzar unos MHZ (casi un 50% de mas).

Para que te hagas una idea, en el F103 he logrado meter un Spectrum 16k, siendo de 72mhz( forzado a 128) con 128k de flash (gastados unos 110) y 20k de RAM, gastando absolutamente toda, los 20k al completo.

Si me decido a meter el ZX81 en el F407, puedeo mirar de optimizarlo para el F100 y podrías probarlo. Por ahora, quiero intentar un Spectrum 128k y luego en CPC, y si me quedan ganas y tiempo, miraré lo del ZX81.

Edito: deberías mirar bien las características del F100, por que acabo de releer en STMicroelectronics, y hay varias versiones, siendo la peor de ellas de solo 16k de Flash, y a lo mejor esa es la tuya, en cuyo caso, no hay nada que hacer.

Re: Emulador ZX Spectrum 48k en un STM32F407 ARM

Publicado: 28 Ene 2013, 23:39
por robcfg
Pues intentare mirar a ver que trae el mio.

En todo caso, que herramientas usas para programar para el bicho en cuestion? El mio lo pedi como parte de un concurso de ST Microelectronics, y no se muy bien ni que compilador usar ni como pasarle luego el programa, ni ná de ná...

Eso si, prisa ninguna ;)

Re: Emulador ZX Spectrum 48k en un STM32F407 ARM

Publicado: 29 Ene 2013, 06:05
por jepalza
El MDK de Keil uVision. La version de pruebas solo deja 32k de codigo, pero yo uso una version "poco ortodoxa" que venia con el F103 comprado a los chinos, hasta que descubri que no era precisamente "de pago". Existe una version de GCC para ARM que no he probado.
notaÑ siento las faltas de acentos , pero estoy usando un teclado ingles de emergencias. >|

Re: Emulador ZX Spectrum 48k en un STM32F407 ARM

Publicado: 29 Ene 2013, 14:20
por jotego
¿No puedes usar parte de la flash como RAM? ¿No lo haces por velocidad, por consumo o por no deteriorarla?

Re: Emulador ZX Spectrum 48k en un STM32F407 ARM

Publicado: 29 Ene 2013, 18:16
por jepalza
jotego escribió:¿No puedes usar parte de la flash como RAM? ¿No lo haces por velocidad, por consumo o por no deteriorarla?


Entiendo que me preguntas a mi. En la pequeña F103 la ROM la tengo en Flash (16k) mas el emulador, las rutinas de pantalla, de SD del táctil, etc, y en total gastan 110k de los 128k, justito justito. Pero la la RAM es de solo 20k, de los cuales, 4 k apuradíiiiiisimos los empleo en el sistema (tan apurados, que la rutina que lee la raíz de la tarjeta SD solo admite 15 ficheros, no entraban mas en RAM), y los restantes 16k para el Spectrum. Osea, que la peque F103 está aprovechada al límite para un Spectrum de 16k.
La grande, la F407 no tiene ningún problema de espacio, le sobra por todas partes. Tiene 1mega de flash y solo uso 110k (me sobran aún 890k para mas emuladores, y la RAM solo estoy usando los 128k de usuario, de los cuales uso 48k para el Spectrum. Luego, tengo otros 64k para sistema, que solo empleo unos 10k, y aún sobran 54k. Vamos, una pasada, entra de todo. Estoy mas contento que un niño con zapatos nuevos. :burla:

Re: Emulador ZX Spectrum 48k en un STM32F407 ARM

Publicado: 07 Feb 2013, 13:53
por jepalza
Rescato el hilo, para mostrar los avances (mas bien, el final), por que ya funciona el emulador de Spectrum 48k. Me queda el sonido, pero es lo que menos me preocupa por ahora. Lo que mas me ha costado, ha sido implementar un teclado de PC por USB. Es increíble, la poca información que hay por la red de estos chismes, y eso, que son muy empleados por miles de personas (e institutos), pero parece que la gente se reserva los fuentes para ellos. Ves en un vídeo de un tio que ha conseguido sacar vídeo del STM, pero no pone los fuentes... Así que, al final, todo inventado y rebuscando al límite.

En cuanto puedo, voy a tratar de meter un Amstrad CPC, y que convivan los dos emuladores juntos. Mi idea, es meter en este chisme, todos los emuladores que entren y sea posible (por velocidad sobre todo), y hacerme un multisitema portátil.