Nuevo pokeador: POKEMON

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Nuevo pokeador: POKEMON

Mensajepor antoniovillena » 26 Feb 2013, 13:50

En este caso es un proyecto conjunto: flopping tuvo la idea original y se va a encargar del hardware, y yo soy el que se encarga del software.

Se trata de un pokeador al que le añadiremos futuras funciones (como hacer un snapshot en cinta) y que lo único que necesita es:
A) Un botón NMI
B) Un reemplazo de ROM u opcionalmente una previa carga en cinta en los modelos +2A/+3

Nota: Por ahora sólo está la versión ROM, la versión RAM +2A/+3 la empezaré cuando esté finalizada la herramienta.

Enlace del proyecto y descarga aquí:

http://retrolandia.net/foro/showthread. ... 306#pid306

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: Nuevo pokeador: POKEMON

Mensajepor mcleod_ideafix » 26 Feb 2013, 14:23

Si el proyecto necesita una ROM de reemplazo... ¿en el hardware se incluye dicha ROM? Si no, ¿en qué consiste el hardware? ¿Sólamente el botón NMI?
¿El software, sería compatible con el pokeador de Microhobby? El DivIDE también tiene lo necesario para hacer esto (tiene NMI y la SRAM puede mapearse en espacio de ROM) con lo que los possedores de un DivIDE no necesitarían hardware extra.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Nuevo pokeador: POKEMON

Mensajepor antoniovillena » 26 Feb 2013, 14:54

mcleod_ideafix escribió:Si el proyecto necesita una ROM de reemplazo... ¿en el hardware se incluye dicha ROM? Si no, ¿en qué consiste el hardware? ¿Sólamente el botón NMI?
¿El software, sería compatible con el pokeador de Microhobby? El DivIDE también tiene lo necesario para hacer esto (tiene NMI y la SRAM puede mapearse en espacio de ROM) con lo que los possedores de un DivIDE no necesitarían hardware extra.


Es que habrá 2 versiones:
1. Sólo ROM. El hardware consiste en un reemplazo de ROM (por ejemplo IF2+cartucho) y en botón NMI. En esta versión no hace falta cargar nada en cinta, y se corrompe algo de la pantalla (5 primeros caracterés y parte de las 2 últimas líneas).

2. RAM. El hardware consiste en sólo botón NMI. Esta versión haría uso de all RAM y sólo funcionaría en +2A/+3. Requiere previa carga en cinta, pero puede emplearse un reset software desde la propia utilidad para no tener que volver a cargarlo si se va a probar un nuevo juego. También habrá otra opción para deshabilitar all RAM y continuar el juego sin problemas de contención. Sólo valdría para juegos de 48K. Lo bueno de esta versión es que no se corrompe la pantalla.

No es compatible con el pokeador de Microhobby, de hecho flopping quería hacer algo parecido. Para hacerlo limpio (sin corromper pantalla ni necesitar previa carga en cinta) se necesita ROM+RAM, pero preferí la opción "sucia". Podría hacer una versión limpia para DivIDE siempre y cuando no haya ya algo similar.

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: Nuevo pokeador: POKEMON

Mensajepor mcleod_ideafix » 26 Feb 2013, 15:03

antoniovillena escribió:No es compatible con el pokeador de Microhobby, de hecho flopping quería hacer algo parecido. Para hacerlo limpio (sin corromper pantalla ni necesitar previa carga en cinta) se necesita ROM+RAM, pero preferí la opción "sucia". Podría hacer una versión limpia para DivIDE siempre y cuando no haya ya algo similar.

No sé si hay algo o no similar... bueno, Fatware permite usar archivos POK para pokear un juego si mal no recuerdo, así que tecnicamente el que tiene un Divide con Fatware (lo más habitual) YA tiene un pokeador, pero independientemente de eso, lo decía precisamente por aprovechar el hardware existente, y no tener que hacer placas ni nada. Simplemente cargarías en el DivIDE un TAP que contendría el software del pokeador, que se metería en la SRAM del DivIDE, la mapearía en ROM y acto seguido resetearía el ordenador, el cual arrancaría con tu ROM modificada. El botón NMI del DivIDE funcionaría con tu rutina NMI. Mientras no apagues la máquina, la ROM seguiría activa. Si la apagas y arrancas de la manera habitual, volver a cargar el TAP desde el DivIDE se hace en un suspiro :)

-- Actualizado 26 Feb 2013, 16:09 --

Además... tienes una ligera ventaja con el DivIDE: en el supuesto caso de que la corrupción en pantalla sea debida a variables que emplea tu pokeador, con el DivIDE en modo MAP-RAM tienes RAM en toda esa parte, así que puedes meter tus variables (y la pila si fuera el caso) en cualquier hueco que tuviera la ROM originalmente. Supongo que es lo mismo que ocurrirá con la versión all-RAM para +2A/+3.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Nuevo pokeador: POKEMON

Mensajepor antoniovillena » 26 Feb 2013, 15:33

Nunca he tenido un DivIDE, pero si no me equivoco el divide tiene una función asignada al botón NMI, que es mostrar el listado de juegos del disco (el FatWare). Quizás la mejor solución sería soportar POKEs a través de nuevos menús en el FatWare, así se podría pokear sin perder funcionalidad ni tener que cargar siempre el mismo TAP. Una pregunta, ¿los archivos .POK se pueden cargar en cualquier momento? Si es así no sé porqué no han hecho lo mismo para introducir pokes directamente.

Sí, lo que comentas del all RAM lo había pensado emplear en el +2A/+3 para no corromper la pantalla. En el divide no tendría sentido la opción de volver a paginación normal, ya que si no me equivoco el modo all RAM del DivIDE usa el mismo esquema de contención que el spectrum.

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: Nuevo pokeador: POKEMON

Mensajepor mcleod_ideafix » 26 Feb 2013, 16:56

antoniovillena escribió:Nunca he tenido un DivIDE, pero si no me equivoco el divide tiene una función asignada al botón NMI, que es mostrar el listado de juegos del disco (el FatWare).

La función asociada al botón NMI depende unicamente de lo que haya en la rutina en 0066h en el firmware actual, y eso es cambiable. Es más, es cambiable incluso sin necesidad de flashear un nuevo firmware en el DivIDE (para eso está el modo MAPRAM del DivIDE).

antoniovillena escribió:Quizás la mejor solución sería soportar POKEs a través de nuevos menús en el FatWare, así se podría pokear sin perder funcionalidad ni tener que cargar siempre el mismo TAP. Una pregunta, ¿los archivos .POK se pueden cargar en cualquier momento? Si es así no sé porqué no han hecho lo mismo para introducir pokes directamente.

Los archivos .POK se cargan de la misma forma que cualquier otro archivo en Fatware: lo eliges en el listado de fichero y le das a ENTER. Un archivo POK, por otra parte, puede tener más de un poke, lo que es una ventaja respecto al sistema de meter pokes manualmente. Por último, en WOS (el TipShop creo que se llama) hay un repositorio de archivos .POK para cada juego.

antoniovillena escribió:En el divide no tendría sentido la opción de volver a paginación normal, ya que si no me equivoco el modo all RAM del DivIDE usa el mismo esquema de contención que el spectrum.

No sé muy bien a qué te refieres con esto. La RAM del DivIDE se mapea en espacio de ROM, así que es memoria que no sufre contención. Obviamente, mientras quieras seguir usando la ROM modificada, tendrás que dejar al DivIDE con el mapeo de RAM permanente. Vamos, exactamente lo mismo que lo que quieres hacer con el +2A/+3, salvo por el detalle de que con el DivIDE cargar un TAP es mucho más rápido.

Es decir, el procedimiento sería:
- En la CF que uses en el DivIDE añades un TAP que sería el cargador para la nueva ROM de POKEMON. Este TAP sería un programa que copia la nueva ROM a dos bancos de la SRAM del DivIDE, activa el modo MAPRAM del DivIDE, y acto seguido, hace un JP 0000 para arrancar esa nueva ROM.
- A partir de ahí, tu Spectrum funciona con esa nueva ROM, y así seguirá siendo mientras tenga alimentación. La funcionalidad de Fatware, obviamente, se pierde. Si pulsas NMI no aparecerá el listado de juegos de Fatware, sino que saldrá el menú que tenga POKEMON.
- Si se quita alimentación y se vuelve a poner, el Spectrum volverá a arrancar con Fatware, y se podrá optar a cargar de nuevo el TAP para volver a tener la ROM del POKEMON como al principio.

En resumen: DivIDE permite tener un entorno "+2A/+3 alike" en un Spectrum 48K, con el añadido de un botón NMI sin rebotes, y con la pequeña ventaja de que la carga inicial que habría que hacer en el +2A/+3, en este caso es más cómoda y rápida.

Creo (no lo he probado) que incluso si en lugar de Fatware se usa ESXDOS, éste permite tener una especie de fichero "autorun" que se lance al arrancar el sistema, por lo que la carga de POKEMON sería completamente automática.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Nuevo pokeador: POKEMON

Mensajepor antoniovillena » 26 Feb 2013, 17:56

mcleod_ideafix escribió:
antoniovillena escribió:En el divide no tendría sentido la opción de volver a paginación normal, ya que si no me equivoco el modo all RAM del DivIDE usa el mismo esquema de contención que el spectrum.

No sé muy bien a qué te refieres con esto. La RAM del DivIDE se mapea en espacio de ROM, así que es memoria que no sufre contención. Obviamente, mientras quieras seguir usando la ROM modificada, tendrás que dejar al DivIDE con el mapeo de RAM permanente. Vamos, exactamente lo mismo que lo que quieres hacer con el +2A/+3, salvo por el detalle de que con el DivIDE cargar un TAP es mucho más rápido.


Pues a eso mismo, que en un DivIDE la contención con modo all RAM es [desactiva, activa, desactiva, desactiva], mientras que en un +2A es [activa, activa, activa, desactiva] que difiere de los timings del 48K. Por eso habrá una opción (irreversible hasta reset) en el POKEMON que pase del modo all RAM al modo normal para hacer jugables determinados juegos. En el DivIDE esta opción no es necesaria. En el resto de los aspectos el programa sería idéntico.

En resumen, que haré una versión que funcione en DivIDE con todas tus sugerencias. Primero tengo que acabar la versión ROM y luego la versión all RAM +2A/+3. El único añadido al que le veo sentido a la versión ROM es salvar el snapshot actual (memoria y registros) en cinta, para así poder continuar la partida en otro momento, tanto en el mismo spectrum como en otro que no tenga la ROM parcheada. Como capturador de pantalla no le veo mucha utilidad porque en la versión ROM siempre habrá zonas que se corrompan.

Estoy abierto a sugerencias, pero tened en cuenta que tiene que ser algo realmente útil en un spectrum real, y el poco espacio ROM que queda (ya llevo casi 1/3 de la zona libre). Por ejemplo un visor/editor hexadecimal de memoria sería posible, un ensamblador no.

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Nuevo pokeador: POKEMON

Mensajepor antoniovillena » 03 Mar 2013, 16:23

Ya está lista la versión RAM, con la que se puede pokear (y hacer un snapshot) sin necesidad de modificar la ROM. Tan sólo necesitamos un +2A/+3 que tenga el botón NMI. Por cierto, ¿alguien sabe cómo hacer el MOD de una forma sencilla y sin emplear muchos componentes? (y por supuesto que no haya problemas con los rebotes)

http://retrolandia.net/foro/showthread. ... 329#pid329

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 3012
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 86 veces
Gracias recibidas: 356 veces
Contactar:

Re: Nuevo pokeador: POKEMON

Mensajepor zup » 03 Mar 2013, 17:07

antoniovillena escribió:Pues a eso mismo, que en un DivIDE la contención con modo all RAM es [desactiva, activa, desactiva, desactiva], mientras que en un +2A es [activa, activa, activa, desactiva] que difiere de los timings del 48K.


Bonita cagada del diseño del +2A/+3 en la que no había caído... desde luego les habría caído mejor hacer una configuración que fuera equivalente a la del 48k original. Estaba pensando en hacer un "emulador de IF2", con las intenciones de:
- Poder cargar desde disco juegos de IF2.
- Hacer un emulador de 48k con OpenSE.

Para todo ello, la idea era "tomar prestada" la rutina que usa el cargador de "Shadow of the Unicorn" para +2A/+3, pero ahora las dudas son...
- ¿Es mucho problema que la ROM esté afectada por la contención? Sé que es un problema que la contención afecte a partir de 32k (todo el mundo asume que las rutinas que necesiten temporizaciones estrictas deben ir ahí), pero ¿hay mucho problema con las ROMs de IF2? Personalmente creo que no, ya que casi todos estos juegos estaban diseñados para cargar en la RAM de un 16k... donde TODO es memoria contenida.
- ¿Hay información sobre cómo afecta la contención a los juegos de 48k? Creo recordar que había una especie de "cargador" para juegos de 48k que usaba este truco junto con una ROM "real" de Spectrum para evitar incompatibilidades producidas por la ROM "modificada" de los 128k.
- ¿Qué sentido tiene un modo donde no hay memoria de pantalla? En el modo 0123 no hay contención en ninguna parte... pero lo que tampoco hay es RAM de video. ¿Se utilizó alguna vez este modo?
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

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: Nuevo pokeador: POKEMON

Mensajepor mcleod_ideafix » 03 Mar 2013, 17:40

zup escribió:- ¿Qué sentido tiene un modo donde no hay memoria de pantalla? En el modo 0123 no hay contención en ninguna parte... pero lo que tampoco hay es RAM de video. ¿Se utilizó alguna vez este modo?

Tiene sentido: te permite tener un programa que ocupe 64K de RAM sin "manchar" la pantalla. Cuando quieras pintar algo, llamas a una rutina de tu propio programa que cambia momentáneamente el mapa para que aparezca la página 5 (la pantalla principal). Se actualiza dicha página, y acto seguido, se restaura el mapa original. El mecanismo recuerda un poco al MSX, en donde la memoria de pantalla está "fuera" del espacio direccionable de la CPU.

De hecho, si te fijas, para hacer esto has de pasar necesariamente del esquema 0123 el esquema 4563. Es decir, que la página común a ambos mapas es la página 3, que se ubica en los últimos 16K de RAM. Es en esta página donde deberá estar la rutina que cambie de mapa, pinte en la pantalla en las posiciones usuales, y vuelva a cambiar de mapa. La pila puede estar o no en esa página, aunque lo habitual es que sí.

¿Y qué pasa con que esté todo en esa última parte de memoria? Pues que es en esa zona donde suele ubicarse la BIOS y el BDOS del CP/M. Así, es posible implementar un CP/M en el +3 que permita usar 64K de RAM para toooooooodo el programa más el kérnel, sin que la memoria de pantalla "estorbe". Estoy convencido de que el esquema de paginación extendida del +3 se pensó principalmente para dar soporte a este S.O.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 13 invitados