@zx81, me ha surgido alguna duda al leer tu tocho... No he usado Pi de momento pero con lo que te he leido me surge la duda de si los emuladores que hay ahora mismo en la PI no son 100% reales o es solamente el tuyo por estar lastrado por esa librería que comentas?
Me refiero 100% en cuanto a esos tiempos de emulación que comentas y no ya, a que pueda cargar un juego desde cassette, etc...
No es un problema de la librería Circle, ni siquiera de la PI. Es un problema que afecta a todos los emuladores que se ejecutan sobre cualquier sistema operativo, da igual que sea Windows, Linux, Solaris, o el su-sum corda. En un S.O. de propósito general el tiempo que transcurre entre que un proceso pasa al estado de "ejecución" y recibe la CPU es impredecible, depende de docenas de factores. Justo eso es lo que garantizan de diversas formas y con requisitos concretos los sistemas operativos de tiempo real, *predictibilidad*. Dependiendo de cada S.O., de su funcionamiento interno, de la carga de trabajo que tenga en ese momento y de muchas otras variables en juego en las que no voy a entrar ahora para no extenderme hasta el hastío, tu programa puede pedir la CPU y recibirla inmediatamente o algún milisegundo después. Es imposible pretender tener la CPU cada 19,968 ms de manera exacta. Es más, lo normal es conseguir la CPU en periodos múltiplos de algún número como 4 o 10 (o sea, cada 4 ms o cada 10 ms, cada S.O. gestiona sus cosas a su manera).
Y eso nos lleva a otro defecto con peor pronóstico todavía; el 48k genera una imagen, no de 50 Hz, sino de 50,08012821 Hz y el 128k la genera de 50.02115417 Hz. Todo esto sobre el papel y sin tener en cuenta las tolerancias de los componentes de la placa, entre ellos el propio cristal de cuarzo. Huelga decir que es *IMPOSIBLE* conseguir esas frecuencias de refresco en monitores o TV modernas, que suelen ser estándar de 50 o 60 Hz (el ZX-Uno sí genera esa frecuencia exacta en la emulación del 48k siempre y cuando no se conecte por VGA).
Pero en la PI y sin sistema operativo, es posible programar las cosas como te convenga de modo que en el emulador programo un timer con exactamente ese tiempo y dedico una CPU única y exclusivamente al núcleo de la emulación. Aún así hay retrasos ínfimos, hablamos de nanosegundos, que habitualmente andan por debajo de 10 en la PI-2. Y aún así, no se puede conseguir el tiempo exacto de los 128k, que debería ser de 19,991541 ms y con la PI solo puedo llegar a precisión de 3 cifras decimales, lo que significa que queda en 19,991 ms por cuadro que son 96 Hz por segundo más de lo que debería. Ojito, que esto afecta igualmente por un problema relativamente similar al ZX-Uno y los 128k están acelerados por unos 8600 Hz por segundo. Eso sí, lo del refresco de la pantalla, ni la PI ni leches.
Con respecto a los juegos que comentaba @iOtero no sé exactamente a lo que se refiere ya que como he dicho no he probado todavía nada en la PI pero me comprometo tanto a probar este emulador como seguir muy muy muy de cerca el proyecto que comenta @iOtero (tan de cerca que espero hasta quemarme con él, jajajjaa) pero una duda... Es cierto que a lo mejor en su momento no lo había (yo no lo recuerdo al menos) pero a fecha de hoy y desde hace tiempo cuando llevan spectrums a las ferias normalmente lo llevan con un Divide y ahí creo si no me equivoco, que meten los jueguecillos en una SD, te aparece un "cutremenu" (además que suele soportar nombres de 8 caracteres con lo que ese follon implica) y corregirme si me equivoco pero si pulsas intro encima del juego que quieres directamente lo lanza, no?
Lo mismo, podrías añadir en caso de que tu emulador no lo tenga, alguna posibilidad de acceder a una SD (osea, como si tuviera conectado un Divide) y accediendo a esa lista de juegos que tuviera, pues que cuando selecciones uno con el INTRO/ENTER o la tecla en cuestión que se ponga que el juego se lanze sin más (es sólo una idea)...
La víspera de Reyes conseguí terminar el navegador de archivos de la SD y lo tengo en pruebas. O sea, que eso que tú sugieres del DivMMC que ya me habían indicado otros usuarios en otros foros y por e-mail, ya no es necesario. Y los nombres de los archivos se ven completos, nada de 8+3.
@zx81, releyendo tu tocho porque recordaba el otro día haber leído una cosa desde el móvil en tus posts que me interesaba y no la había encontrado ahora...
Resulta que en su día no tuve un spectrum +2A el cual la verdad es que tiene un teclado apañado (sobre todo comparando con un spectrum 48k o plus) y el caso es que se me había ocurrido hacer lo que tu comentas en este post que te habían pedido o incluso otra posiblidad que se me había llegado a cruzar por la cabeza es intentar conectar las fajas del teclado original del Spectrum +2A a un teclado USB... No se si me explico, osea que cuando pulsase una tecla en el teclado del Spectrum +2A sería como si hubiera pulsado una tecla del teclado USB sólo que he cambiado las teclas, jeje! No tengo mucha idea de como hacer esto y he estado buscando info y no he encontrado nada al respecto (encontré creo recordar algo del spectrum 48k pero el teclado no tiene nada que ver). Como ves ese tema? Sería muy complicado?
A mi, todo lo que huela a USB me parece complicado. Para el usuario normal, el USB es un conector que se pincha y a correr. Para el programador es la peor de las pesadillas, se nota que en su concepción estuvo involucrada M$, solo ellos son capaces de idear algo tan absurdo, rebuscado y ridículamente complicado.
En el número 67 de la MagPi (la revista oficial de la raspberry PI, es gratis y te la bajas en PDF) viene un montaje que muestra cómo conectar el teclado del Spectrum a las GPIO de la PI, con poco más que 8 diodos y un pulsador. Ya he tenido varias peticiones de darle soporte a ese sistema, pero veremos cuando puedo intentar hacerme el montaje ese.
La última opción, y casi que la más cómoda y rápida, es conseguir un teclado de esos de Elite, el Recreated ZX Keyboard. La próxima versión lo soporta y si lo que buscas es dar el pego, te aseguro que esto lo da, ya me ha pasado en varias ferias a las que he asistido con él.
Y por tacto, es prácticamente igual al original...