Página 2 de 2

Re: Sword of Ianna ZX Spectrum 48K + Dandanator :)

Publicado: 08 Ago 2019, 11:44
por Troopa jr
buenas!

lo primero, quiero felicitaros por el trabajo a dandare, spirax, mad3001 y todos los que estáis en el desarrollo y soporte del dandanator.
llevo unos días cacharreando con la placa, creando recopilatorios de juegos, y me gustaría preguntar sobre el formato MLD.
no estoy encontrando mucha información al respecto, salvo los archivos que se van publicando aquí en el foro... ¿podéis dar alguna referencia para estudiar, explicar un poco cómo funciona este formato, o indicar si hay alguna herramienta para generarlo?

gracias!

Re: Sword of Ianna ZX Spectrum 48K + Dandanator :)

Publicado: 08 Ago 2019, 11:56
por Bone
Spirax escribió:
03 Jun 2019, 15:34
...una solo para el Inves+ que es muy especialito...
Ahhh...se me pasó este post!!! :P
Pues sí que es especialito el Inves, sí...Gracias crack!!!! ;)

Re: Sword of Ianna ZX Spectrum 48K + Dandanator :)

Publicado: 08 Ago 2019, 14:43
por Spirax
Troopa jr escribió:
08 Ago 2019, 11:44
buenas!

lo primero, quiero felicitaros por el trabajo a dandare, spirax, mad3001 y todos los que estáis en el desarrollo y soporte del dandanator.
llevo unos días cacharreando con la placa, creando recopilatorios de juegos, y me gustaría preguntar sobre el formato MLD.
no estoy encontrando mucha información al respecto, salvo los archivos que se van publicando aquí en el foro... ¿podéis dar alguna referencia para estudiar, explicar un poco cómo funciona este formato, o indicar si hay alguna herramienta para generarlo?

gracias!
Hola Troopa Jr, gracias por incluirme en el equipo de desarollo y soporte del Dandanator, pero no pertenezco a él. voy por libre :twisted:
Si bien es cierto que con la ayuda inicial de mad3001 he llegado a entender y manejar el formato MLD creo que bastante bien. ;)

Por desgacia, no hay ninguna herramienta que nos haga el trabajo, es todo manual y para cada juego es diferente.
Hace falta conocer el ensamblador del z80 y un poquito del funcionamiento del zx.
Para poder explicar el Formato MLD, hay que empezar por explicar el funcionamiento del Dandanator en si y del gestor de roms muy rapidamente.
Ya que no se hasta donde has llegado ;)

El Dandanator permite paginar un slot o pagina de sus 32 paginas posibles en la posicion $0000 que es donde esta la rom.
y nos permite mediante una serie de comandos cambiar la pagina de rom a voluntad, activar o desactivar el dandanator, poner la rom del sistema original, etc.
una vez que podemos cambiar la pagina de rom , tenemos 32 paginas de 16k , lo que hacen 512k :D
tambien mediante programación podemos cambiar el comportamiento de los botones izquierdo y derecho del dandanator.

Una vez que entendemos que podemos cambiar de ROM , al igual que paginamos RAM en los 128k.

pasamos a explicar lo que hace el generador de roms.
Que es una aplicacion Java creada por Overclock que nos permite generar la imagen rom de 512k para grabar en el dandanator...

pues bien esta imagen rom de 512k se compone de 32 paginas individuales de 16k.. llamadas slots del 0 al 31.
a medida que vamos añadiendo juegos en formato z80, sna, tap , rom, mld, etc, esta aplicacion los descompone en cachitos, comprime y los va colocando en los distintos slot de la rom de 512k, (nota que hay algunos ya prefijados como el slot0 para el menu o el slot 31 para la rom de diagnosticos) pero para nosotros es transparente, el generador hace todo ;)
en la pagina 0 esta el menú que aparece cuando arrancamos el dandanator, dicho menú se encarga de cuando seleccionamos un juego de la lista, buscar la tabla de informacion y hacer lo que corresponda con el.
por ejemplo si es un juego en z80, lo que hace es recopilar todos los cachitos repartidos por las distintos slots de las roms y descomprimirlos en la ram, restaura los registros y salta a la ejecución del juego en su punto de entrada definido por el z80.

si el juego es una rom de IF2 de 16k, lo que hace es paginar la rom y saltar a la posicion 0 que sería reiniciar la rom.

y a partir de ahora vamos con el formato MLD.
este formato simplemente es un conjunto de slots (roms de 16k) ordenados una detras de otra.
el generador de roms, lo que va a hacer es asignarle tantos slots como necesite en la rom de 512k y cuando arranquemos el dandanator y selecionemos este juego lo que va a hacer es paginar el 1er slot en la rom y va a saltar a la posicion 0 y a partir de ahi nos da el control a nosotros.

Por lo que en nuestro MLD una vez nos de el control el generador de roms, ya sera nuestra responsabilidad movernos por el resto de slots.
lo que normalmente se hace es crearnos una tabla de donde tenemos las cosas, y cuando vamos a cargar algo, cojemos la posicion del slot de nuestra tabla y le sumamos el slot inicial que nos ha puesto el generador, (dicha posición de inicio es conocida en una determinado posición que ya detallaremos mas adelante)

normalmente este formato erá utilizado en juegos multicarga que necesitan acceder a cinta o disco a cargar mas niveles o grabar avances. digo normalmente porque luego se pude emplear para juegos completos como hice yo con el Ianna :P
en los juegos multicarga es necesario buscar las rutinas de carga a bajo nivel, buscar las tablas de carga que usa, y crearse unas rutinas de carga nuevas que vayan a buscar el nivel a carga a un slot concreto del fichero MLD, por lo que nos creamos unas tablas nuevas indicando los slots, las posiciones, tamaños, etc. por cada nivel a cargar.
y todo esto hay que meterlo en la misma posicion de la rutina de carga de niveles del propio juego....
El problema es que de los juegos no hay fuentes hay que desensamblar, buscar los puntos de carga, modificar las rutinas, probar, etc
por este motivo cada juego es unico y hace falta modificarlo a muy bajo nivel y no hay ninguna aplicacion que lo haga.

para solventar esto, mad3001 creó la nueva funcionalidad del generador de roms para aceptar ficheros TAP directamente, capturando las llamadas a las rutinas de carga standard de cinta de la rom, y ahora nos permite añadir un fichero TAP multicarga al generador de roms y ya no hay que hacer un MLD de dicho juego :) porque cuando el juego vaya a cargar a la rom, se captura la llamada, se va a la tabla que ha creado el generaor de roms de dondes esta cada cosa, se carga lo que se queria cargar ,etc ..... pero este es otro tema que me desvio :-X

Entonces el formato MLD lo que nos permite es crearnos nuestro propio juego modificado para que use mas slots de memoria (roms).

para poder ver de cerca como funciona, te recomiendo usar el emulador de es.pectrum de Habi
http://www.habisoft.com/espectrum/
vete a opciones, resto de hardware y añade una rom de 512k generada para el dandanator.
Activa el dandanator
vete al depurador y pon un breakpoint en la posición $0000 y dale al play (F9)
pulsa F10 que es el boton derecho del dandanator y te saltara el depurador al ejecutar la rom desde la posicion 0 :)
si la rom que has puesto esta generada por el generador de roms, estarás en la rom del menu
en el depurador en la ventanita de la derecha, te pone en que slots del dandanator estas y si esta activo o desactivado.
dale al F9 para continuar y selecciona un juego que este en rom o en MLD y veras que cuando pagine la rom y le de el control te saltara otra vez el breakpoint en la posicion 0, que es donde se va a ejecutar el juego
como decia a partir de la ahi cada juego es un mundo, pero si que hay unas especificaciones que se tienen que emplear al compilarte tu propio MLD para que lo acepte el generador de roms.
dichas especificaciones y un borrador de instruciones las tiene mad3001.
Una vez las tengas, si quieres abrimos otro hilo para dudas y preguntas del formato MLD asi este post se queda para el Ianna.

Saludos
Spirax

Edito:
ahora que caigo, en los fuentes del Ianna que estan en el primer post.
esta para generar el MLD con "make mld"
esta toda la informacion de como pagino las roms ahi, cualquier duda de como compilarlo, podemos tratarla en este hilo ;)

Re: Sword of Ianna ZX Spectrum 48K + Dandanator :)

Publicado: 08 Ago 2019, 18:05
por mad3001
Spirax escribió:
08 Ago 2019, 14:43
Troopa jr escribió:
08 Ago 2019, 11:44
buenas!

lo primero, quiero felicitaros por el trabajo a dandare, spirax, mad3001 y todos los que estáis en el desarrollo y soporte del dandanator.
llevo unos días cacharreando con la placa, creando recopilatorios de juegos, y me gustaría preguntar sobre el formato MLD.
no estoy encontrando mucha información al respecto, salvo los archivos que se van publicando aquí en el foro... ¿podéis dar alguna referencia para estudiar, explicar un poco cómo funciona este formato, o indicar si hay alguna herramienta para generarlo?

gracias!
Hola Troopa Jr, gracias por incluirme en el equipo de desarollo y soporte del Dandanator, pero no pertenezco a él. voy por libre :twisted:
Si bien es cierto que con la ayuda inicial de mad3001 he llegado a entender y manejar el formato MLD creo que bastante bien. ;)
blah blah blah blah ....
No creo que yo lo hubiese explicado mejor....como dice Spirax en otro post podemos tratarlo, la verdad que no he tenido tiempo de hacer un manual y/o explicación técnica del formato MLD... sigo en la "sombra" en proyectos tanto de funcionalidades nuevas como de algun MLD que aprovecha funciones de carga/salvar... pero cosas concretas no hay problema en responderlas.

Este Ianna en 48k es la caña!!!

Re: Sword of Ianna ZX Spectrum 48K + Dandanator :)

Publicado: 08 Ago 2019, 18:49
por Troopa jr
Buenas tardes chicos,

Muchas gracias por las respuestas.

Spirax, con tu explicación me queda clarinete el funcionamiento del MLD :D . El problema que tengo ahora, es que aunque lo entiendo, no tengo tanto conocimiento en ensamblador de Z80 :x :P . Tengo que quitarme las telarañas, no toco ensamblador desde la uni :D
Voy a revisar a fondo el codigo que comentas, y a hacer pruebas con el emulador. Si veo que avanzo, ya os comentaré, y abrimos un hilo nuevo para experimentos :))

De nuevo gracias, ánimo, y seguid adelante!

saludos!