Título: MegaRoms Publicado por: pentacour en 04 de Noviembre de 2015, 01:52:49 pm Buenas!
Pensé que programando en ensamblador nunca llegaría a crear un MegaRom porque para mi, debería estar muy justificado el usar tanta memoria. Bueno, pues lo justifico y me meto en ello :) Estoy bastante perdido con el tema. Siempre he pasado de puntillas con el tema de Slots y subslots, ciñéndome a hacer copy/paste de rutinas de detección de slots o el tema de las ROMS de 48Kb (gracias Ramones). He buscado información, he leído sobretodo el tema de slots/subslots de Konamiman, Ramones, jltursan, y referencias a Megaroms de Nerlaska, Jos'b y más. Me encantaría tener más tiempo para ordenar el follón de conceptos que tengo ahora, pero bueno, ya sabemos todos como vamos de tiempo... Agradecería una guía o unas respuestas a preguntas concretas para ver si puedo acelerar el tema: - Entiendo que hay 4 páginas con 4 slots/página con 4 subslots/slot = 64 paginas * 16Kb/página = 1024Kb posibles. ¿Es así? - No entiendo cómo va montada una ROM usando slots y subslots. Si en 0x4000 tengo mi página 1 del slot 1 donde tengo mi rom y quiero activar mi página 2 en 0x8000, pues lo entiendo. Pero si esta página tiene subslots, ¿cómo van organizados en la ROM? ¿En qué direcciones de memoria las debe poner el ensamblador? - ¿Qué es un mapper? ¿Es un circuito personalizado que permite acceder a una estructura personalizada de slots/subslots? ¿Por eso hay tantos tipos? ¿Por eso los debe soportar el emulador, porque es hardware? - ¿Por qué hay mappers con páginas de menos de 16Kb? Si activo una página, entendía que se activaban los 16Kb... Sé que el excelente asMSX gestion Megaroms y se que hay tutoriales para SDCC. Pero cambiar ahora de ensamblador me llevará tiempo y prefiero ya puestos a gastarlo, que sea para entender el funcionamiento interno de los MegaRom. Gracias por vuestro tiempo. Título: Re:MegaRoms Publicado por: Mortimer en 04 de Noviembre de 2015, 10:03:19 pm Hola, voy a intentar contestar a tus dudas, la verdad que es un tema que parece oscuro y difícil hasta que por fin lo entiendes y piensas que como no lo pillaste antes...
- Entiendo que hay 4 páginas con 4 slots/página con 4 subslots/slot = 64 paginas * 16Kb/página = 1024Kb posibles. ¿Es así? Correcto, si pudiéramos rellenar todos los slots y subslots a tope un MSX podría gestionar de la manera estándar 1 Megabyte de memoria. - No entiendo cómo va montada una ROM usando slots y subslots. Si en 0x4000 tengo mi página 1 del slot 1 donde tengo mi rom y quiero activar mi página 2 en 0x8000, pues lo entiendo. Pero si esta página tiene subslots, ¿cómo van organizados en la ROM? ¿En qué direcciones de memoria las debe poner el ensamblador? En esta te puedo ayudar menos, porque no conozco ningún cartucho que utilice el esquema del mapeo de subslots para meter más de 32K (o 48K), creo que todos usan un mapper externo como el de los Megaroms. - ¿Qué es un mapper? ¿Es un circuito personalizado que permite acceder a una estructura personalizada de slots/subslots? ¿Por eso hay tantos tipos? ¿Por eso los debe soportar el emulador, porque es hardware? Sí, es hardware externo que viene físicamente en el cartucho, y que se encarga de gestionar la memoria de forma distinta a la de los subslots. Por ejemplo, un Megarom típico como Nemesis, de 128Kbytes, viene con una ROM lineal de ese tamaño y un chip auxiliar que es el que se encarga del mapeado. El MSX ve 32KBytes del cartucho en su páginas 1 y 2, como si fuera cualquier cartucho de 32Kbytes, pero podemos hacer que este chip cambie que páginas de los 128KB son visibles. - ¿Por qué hay mappers con páginas de menos de 16Kb? Si activo una página, entendía que se activaban los 16Kb... Porque como la gestión de las páginas se la cocina el chip auxiliar, puede hacer cosas que no podría el mapeador estándar. El mismo Nemeis por ejemplo tiene páginas de 8KBytes, pero el MSX no se entera de nada, simplemente va a leer sus páginas 1 y 2 y el mapeador le redirige a lo que tenga seleccionado. ¿Lo tienes más claro? ::) ¿O tienes más dudas que antes? :D Título: Re:MegaRoms Publicado por: nanochess en 05 de Noviembre de 2015, 03:49:09 am Si vas a utilizar mapeado ASCII 16K (el más sencillo) sólo tienes que encargarte de mapear la zona $8000-$BFFF para que apunte a tu ROM. (sólo tienes que preocuparte de slots y subslots una vez)
O sea como si tu juego fuera de 32K. Después de eso todo es más fácil, escribes en $6000 para cambiar el bloque en $4000-$7fff y en $7000 para cambiar el bloque en $8000-$BFFF. Los números son sencillos, 0 son los primeros 16K, 1 son los siguientes 16K y así hasta completar tu ROM. Por cierto, los bloques de 16K de tu archivo ROM se mapean así exactito. Título: Re:MegaRoms Publicado por: nanochess en 05 de Noviembre de 2015, 03:51:03 am Por cierto mira aquí, en este documento se explica lo básico de los mapper http://problemkaputt.de/portar.htm (http://problemkaputt.de/portar.htm)
Título: Re:MegaRoms Publicado por: pentacour en 05 de Noviembre de 2015, 08:07:22 pm Gracias Mortimer, nanochess! Lo tengo mucho más claro. Aunque hoy tengo un día muy liado y no puedo ponerme a digerir bien la información. Mañana lo miro detenidamente, consulto el enlace y miro si lo tengo claro del todo.
Título: Re:MegaRoms Publicado por: pentacour en 06 de Noviembre de 2015, 01:27:14 pm Entonces, si uso ASCII 16K, escribiendo en $6000 y en $7000 cambio el bloque. Los bloques en la ROM van seguidos. Si es un cartucho real, entiendo que hay un circuito que detecta esas escrituras y hace el cambio de página.
Pero si va en un emulador, hasta ahora un fichero ROM de 32Kb tiene las dos páginas de 16Kb. Un MegaRom de 128Kb tendría los 128Kb seguidos. El mapper lo debe soportar el emulador. ¿Cómo sabe el emulador qué mapper usa mi juego? Título: Re:MegaRoms Publicado por: Mortimer en 06 de Noviembre de 2015, 10:49:46 pm Ajá, si el cartucho es real es su hardware el que de forma transparente cambia las páginas.
Y si es un emulador, el mapper es cuestión además de estar soportarlo tiene que estar activado, ¿Y como "sabe" el emulador cuál es el correcto? pues porque vienen con una base de datos que asocia los hash del los volcados conocidos con su mapper adecuado, te pongo un ejemplo que he sacado del blueMSX. Código: <software> <title xml:lang="en">Gradius - Nemesis</title> <system>MSX</system> <company>Konami</company> <year>1986</year> <country>JP</country> <dump> <original value="false"/> <megarom> <type>ASCII8</type> <hash algo="sha1">50efb7040339632cf8bddbc1d3eaae1fb2e2188f</hash> </megarom> </dump> <dump> <original value="false"/> <megarom> <type>ASCII8</type> <hash algo="sha1">e96888c96c3044ca7ce57dbdf1744df7469f7465</hash> </megarom> </dump>... Y si no está en registrado creo que se lo tienes que especificar, aunque desconozco si algún emulador intenta deducir por sí mismo de algún modo el tipo de mapper. Título: Re:MegaRoms Publicado por: nanochess en 06 de Noviembre de 2015, 11:07:46 pm Casi todos los emuladores incluyen una opción para seleccionar el mapper de la ROM al mismo tiempo que seleccionas la ROM que deseas ejecutar, o al menos una opción de línea de comandos.
En BlueMSX hay detección automática (creo que busca 32 00 60 y 32 00 70 que son los códigos para LD ($6000),A), no estoy seguro de OpenMSX. Título: Re:MegaRoms Publicado por: pentacour en 09 de Noviembre de 2015, 09:22:30 am Genial. Gracias Mortimer, nanochess. Me pongo a probarlo!
|