Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Moderador: Fundadores

Avatar de Usuario
mad3001 !Atari
Demonio segundo orden
Demonio segundo orden
Mensajes: 1935
Registrado: 25 Nov 2015, 00:15
Ubicación: Mostoles(Madrid)
Has thanked: 83 times
Been thanked: 115 times

Re: Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Mensaje por mad3001 »

Onlyfordj escribió: 23 Mar 2022, 09:11
mad3001 escribió: 23 Mar 2022, 01:02
Onlyfordj escribió: 22 Mar 2022, 12:46 A este paso ya queda menos para los WANTED:
WANTED: Street Fighter 2, Hostages, Double Dragon 3, Nigel Mansell's World Championship... lilolilolilolilolilolilo....
Hostages y Nigel Mansell's lo tienes en wos en formato dsk para +3
Ok por el Hostages... pero el Nigel Mansell's World Championship no está... (está el Nigel Mansell's Grand Prix).

Pero muchas gracias!!!!!!!!
Cierto, era el grand prix....
El Street Fighter 2 es complicado, se cepilla la ram7, la 4 y la 6 nada más empezar. La 4 para música, la 6 para menús y paneles, y la 7 según el momento, la usa para los datos de los luchadores, objetos, paneles....muchas cosas, pero ciertamente estaría bien tenerlo en disco, en cinta es insufrible ya que tiene muchos bloques y no están en el orden de juego

El Nigel Mansells...championship (esta vez si) efectivamente solo lo he visto en tap y tzx...la cinta de tap que conservo he mirado y veo que es parecido al ssf2... esto es el uso de memoria que hace solo la primera carga:
La rutina de carga inicial y secundaria (usa la misma pero con distinta tabla) está en 0x9483


Tabla en 0x9504, he obviado el reg.A que tiene el flag del bloque a cargar (5..10 para la carga inicial)
Ram 0x11 0x13 0x14 0x16 0x10 0x17
IX 98CD C000 C000 C000 C000 C000
DE 64B3 3D80 3C80 3C80 3D80 3700

y esta el resto de cargas para jugar
Tabla 94D9
Ram 0x11 0x13 0x14 0x16 0x10 0x17 0x17
IX 98CD C000 C000 C000 C000 C000 5B00
DE 6523 3DF0 3DF0 3DF0 3DF0 3DF0 1400

Volviendo a los origenes... programa en assembler
Avatar de Usuario
Spirax !Sinclair 1
Demonio tercer orden
Demonio tercer orden
Mensajes: 715
Registrado: 09 Oct 2017, 17:03
Ubicación: Leganes (Madrid)
Has thanked: 24 times
Been thanked: 46 times

Re: Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Mensaje por Spirax »

Ale.
pues he aqui dos de los mas jodidos que he echo hasta ahora :)

Double Dragon3
https://mega.nz/file/jd0x3aSY#YEmKUPGSl ... 2ZplPfzNh0

Nigel Mansell's World Championship
https://mega.nz/file/6FEkURaQ#Ah7VXbPwz ... _CbDKm06Go

jodidos por que los cargadores son muy muy especificos y tienen que hilar muy fino.
ambos funcionan tanto en disquetera como en disco 0 y disco 1 asi como en A: B: C: D:

ahora unos detalles tecnicos de cada uno: :)
-------------------------------------------
Double Dragon III - The Rosetta Stone.
LOAD "DDRAGON3"
El DSK no cabe en un disco de 3", en un plus3 normal se podra jugar con una gotek o una disquetera de 3,5 con discos de 720Kb
El juego en cada carga el primer bloque que carga se cepilla el banco 7 del buffer del dos asi como la zona de variables de $5b00-$5cff

despues de un analisis completo pude determinar:
que el banco 4 era usado como buffer para descomprimir los sprites que iva a necesitar, asi que pude cargar el bloque 7 en el banco 4 y al terminar de cargar lo paso al banco 7.
y que la zona de variables es pisada por el buffer de video, que se restablece despues de cada carga. osea puedo restablecer las variables desde el backup y al terminar de cargar el juego reinicia el buffer de video.

el proceso de carga es el siguiente
en el programa basic, se inicializa la rutina de carga para guardar para las futuras cargas, la unidad de la cual estamos cargando y el nombre de la particion montada si estamos cargando desde +3e
y se hace un backup de la zona de variables en el banco 3 en #fe00 ya no parece que se use ese cacho de memoria durante el juego.

una vez empezamos a jugar para cargar los niveles..
uso las rutinas de borrado de zona y la rutina de impresion del juego para imprimir "LOADING"
se restablece la zona de variables desde el banco 3 para poder usar la rom de DOS.
re reinicilaizan los buffers de disco y disquetera desde la ROM
se cargan los bloques que se necesitan, cargando el bloque del banco 7 en el banco 4.
al terminar de cargar muevo lo cargado en el banco 4 al banco 7
pongo a cero el contador de sprites cargados (los que estaban en el banco 4)
y devuelvo el control al juego que borra la zona de impresion y reinicia sus bufferes de sprites y video :)

ojo no lo he terminado, he probado que carga todos los niveles, pero no he conseguido pasar del nivel 6 jugando soy un poco torpe ;)

-------------------------------------------
Nigel Mansen WorldChampion ship.
LOAD ""NIGELMWC"

En este he usado compresion zx0 y este si cabe en un disquete de 3"
este ha sico algo mas complicado, igualmente en cada carga se cepilla el banco 7 y toda la zona de variables de $5b00-$5cff con una tabla de rotacion

ya que incluso se pisa parte del programa principal en cada carga y tiene llamadas cruzadas.....
la solucion, como el bloque 7 se pisa en cada carga, he tenido que partir el bloque 7 en varias partes, cargarlo por los huecos y al finalizar la carga, recolocar y descomprimir todo.
en el analisis pude decubrir la rutina generadora de la tabla de rotacion. asi como las rutinas de borrado de buffer y pantalla que usa el juego
utilizo la pantalla como buffer de carga y alojamiento de la rutin descompresar zx0.

el proceso de carga.
el programa basic reinicia la rutina de carga de disco para guardar la unidad y la particion que estamos usando , hace una copia de la zona de variables en un hueco del banco 4 que no se usa y procede a cargar el main1.
que tiene la intro a la cual le he rebajado los tiempos de pausa a la mitad .....
y despues de la intro carga el juego ya usando el loader.
el loader hace lo siguiente
modifica el nombre del fichero que vamos a cargar
se restablece la zona de variables desde el banco 4 para poder usar la rom de DOS.
se reinicilaizan los buffers de disco y disquetera desde la ROM

carga desde el fichero la tabla de bloques a cargar en un buffer de tabla
y empieza un bucle siguiendo la tabla cargada, para ir cargando los bloques en sus posicions de memoria desde el disco, el ultimo bloque recarga la tabla con una tabla nueva con la tabla de descompresion en el mismo sitio.
una vez terminada la carga se cierra el fichero, y se apaga el motor de la disquetera si estaba en uso.
y se procede con un nuevo bucle siguiendo la tabla de descompresion que ha pisado la tabla anterior.
una vez descomprimido todo.

se llama a la rutina de regeneracion de la tabla de rotacion y borrado de buffer del propio juego.
se coge la variable que usa el juego para almacenar la ultima pagina de memoria mapeada, se restablecen las interrupciones y se devuelve el control al juego en la misma pagina de memoria que estaba.
he usado 508 bytes que he liberado de las tablas originales, mensajes de cinta, rutinas propias del juego para manejar la cinta (tenia una copia de LD_BYTES en ram, etc) dejando las dos entradas que usa el juego para carga el bloque 0 y el bloque 1 en el mismo sitio, para no modificar las llamadas del juego.
No habia mas sitio y tube que cargar las tablas por partes de cada fichero.
poner la rutina zx0 en la pantalla, que se carga de cada fichero, y los atributos de LOADER +3E que tambien se cargan desde cada fichero ;)

no he probado todos los campenatos ni circuitos, he entrado en un campeonato y va cargando los bien los circuitos....

DISCLAIMER:
descartelos y pruebalos bajo tu responsabilidad.
Los juegos han sido probados, pero podria sufrir algun cuelgue por alguna llamada oculta que no haya visto a la zona del cargador de cinta.
en teoria no pasaria gran cosa salvo un cuelgue que se solucione con un reinicio, pero no me hago responsable de ningun daño ocasionado a ningun fichero del disco.

saludos
Avatar de Usuario
napsternds
El infierno es su lugar
El infierno es su lugar
Mensajes: 177
Registrado: 22 Ene 2019, 17:38
Has thanked: 17 times
Been thanked: 17 times

Re: Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Mensaje por napsternds »

Spirax escribió: 29 Mar 2022, 13:38 Ale.
pues he aqui dos de los mas jodidos que he echo hasta ahora :)

Double Dragon3
https://mega.nz/file/jd0x3aSY#YEmKUPGSl ... 2ZplPfzNh0

Nigel Mansell's World Championship
https://mega.nz/file/6FEkURaQ#Ah7VXbPwz ... _CbDKm06Go

jodidos por que los cargadores son muy muy especificos y tienen que hilar muy fino.
ambos funcionan tanto en disquetera como en disco 0 y disco 1 asi como en A: B: C: D:
ES-PEC-TA-CU-LAR. Fantástico trabajo. Esta tarde los pruebo

Ovación de gala puesto en pie.......


EDITO: Probados los dos. Fenomenal. Un lujo. Muchas gracias :D
Última edición por napsternds el 29 Mar 2022, 21:59, editado 1 vez en total.
Avatar de Usuario
Onlyfordj
Demonio segundo orden
Demonio segundo orden
Mensajes: 1025
Registrado: 30 Dic 2016, 09:28
Ubicación: Valencia
Has thanked: 58 times
Been thanked: 28 times

Re: Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Mensaje por Onlyfordj »

Madre mia que me da algo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

FLIPANTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Avatar de Usuario
kik3
Aspirante a demonio
Aspirante a demonio
Mensajes: 201
Registrado: 19 Feb 2018, 23:38
Has thanked: 3 times
Been thanked: 14 times

Re: Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Mensaje por kik3 »

@Spirax ,sabes si loxley esta por algun lado en dsk?
Avatar de Usuario
cacharreo !Sinclair 1
Moderador
Moderador
Mensajes: 5782
Registrado: 09 Ago 2019, 10:17
Ubicación: /home/cacharreo/
Has thanked: 1202 times
Been thanked: 2779 times
Contactar:

Re: Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Mensaje por cacharreo »

En .DSK no lo sé pero en .SCL (convertible a .TRD) lo tienes aquí.
© cacharreo
Avatar de Usuario
Hynreck
El infierno es su lugar
El infierno es su lugar
Mensajes: 162
Registrado: 03 Jul 2014, 11:56
Has thanked: 24 times
Been thanked: 34 times

Re: Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Mensaje por Hynreck »

Spirax escribió: 29 Mar 2022, 13:38 Ale.
pues he aqui dos de los mas jodidos que he echo hasta ahora :)

Double Dragon3
https://mega.nz/file/jd0x3aSY#YEmKUPGSl ... 2ZplPfzNh0

Nigel Mansell's World Championship
https://mega.nz/file/6FEkURaQ#Ah7VXbPwz ... _CbDKm06Go

Brutal!!! Muchas gracias!!! Eres un crack!!!
Avatar de Usuario
Spirax !Sinclair 1
Demonio tercer orden
Demonio tercer orden
Mensajes: 715
Registrado: 09 Oct 2017, 17:03
Ubicación: Leganes (Madrid)
Has thanked: 24 times
Been thanked: 46 times

Re: Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Mensaje por Spirax »

mad3001 escribió: 26 Mar 2022, 00:58 El Street Fighter 2 es complicado, se cepilla la ram7, la 4 y la 6 nada más empezar. La 4 para música, la 6 para menús y paneles, y la 7 según el momento, la usa para los datos de los luchadores, objetos, paneles....muchas cosas, pero ciertamente estaría bien tenerlo en disco, en cinta es insufrible ya que tiene muchos bloques y no están en el orden de juego
bueno pues el p... problema del SF2 es que tiene denegada la distribucion.
eso quiere decir que aunque se puede hacer un loader para +3e, el disco resultante no se puede compartir sin infringir derechos :evil:

y cuando digo que se puede hacer es porque funciona desde A: B: C: y D: sin problemas B-)

si el Double Dragon y el Nigel Mansel fueron complejos este se lleva la palma :P
ya que no solo usa practicamente todos los bloques de memoria, si no que ademas carga en todos ellos directamente incluido la carga directa encima de los bufferes de disco de la pagina 7.

el problema NO era encontrar el punto de entrada de carga, ya que se puede capturar la llamada a la rutina de carga de cinta en ROM.
el problema es que no trabaja con ninguna tabla, si no que dependiento del spriite que haya seleccionado cada jugador carga un fichero u otro en differentes paginas de memoria, no es posible hacerse una tabla de carga ya que el mismo fichero lo carga en diferentes paginas dependiento si es para el jugador uno o para el jugador doos.
Una vez entra a cargar, hay que averiguar que pagina de memoria esta paginada sobre la que va a cargar y el nombre del fichero que tiene que cargar.
y entonces empezar a hacer cambios.......
nada mas entrar al loader desabilito las interrupciones del juego y lo paso a im 1 ya que algunas rutinas de disco activan las interrupciones.
lo primero borra la pantalla y pone unos attributos que me permiten usar los 6144 bytes de la pantalla como buffer temporal para hacer backup de las areas que se van a modificar en la pagina 7. como no hay mucho sitio libre el cargador esta repartido por los huequecitos finales de las paginas 1,3 y 4.
una vez cambiados los atributos recolecto el cargador de los bancos de memoria y lo pongo en #4000 junto con las rutinas de disco, de intercambio de bancos y demas rutinas....
una vez tengo el cargador en su sitio, toca buscar en que pagina de memoria hay que cargar el fichero.
si es en la pagina 7, intercambio los 16k del banco 7 con los 16k del banco 3 y hago que cargue en el banco 3.
si es cualquier otro banco no intercambio nada y carga directamente donde tiene que ir.
ahora toca reiniciar el interface de disco, lo primero es hacer un backup de las areas que el +3dos usa de buffer de disco en la pagina 7 y almacenarlo en la pantalla a partir de #4300
son varias zonas y ocupan unos 5k.
tambien hay que restaurar la zona de variables del 128k y la zona de codigo en #5b00 con las rutinas de paginacion, ya que el juego se las ha cepillado.
para ello el codigo de la zona swap lo copio desde la rutina de inicializacion del zx haciendo un ldir desde la rom ;) y variables solo necesito restaurar 3, FLAGS3, BANKM y BANK678
se restablecen todos los bufferes de disco, si se carga desde disqueta se enciende el motor y se reinician los XMB's de la disquetera, si se carga de disco se reinician los XMB's del IDE y se escanea el disco para buscar la particion que estaba montada (dicha particion la guardo en el primer cargador basic) y se monta temporalmente en D:
se localiza el fichero que quiere cargar el juego, y se carga en su destino final, (si era el banco 7 se cambio por el 3 osea se carga en el 3)
y ahora toca deshacer todo
lo primero restauramos todas las areas de bufferes modificadas, del backup anterior en la zona de pantalla
volviendo a dejar la zona de variables como estaba
si habia que cargar en la pagina 7 se vuelven a intercambiar los bancos 3 y 7 dejandolos en su sitio como tienen que estar.
se localiza la pagina de memoria que tiene que tener paginado el juego para volver, se restablecen las interrupciones a im2 y se devuelve el control al juego ;)

y todo este toston para decir:
lo siento NO lo puedo compartir publicamente :~(
acepto MP's ..... :|
Avatar de Usuario
mad3001 !Atari
Demonio segundo orden
Demonio segundo orden
Mensajes: 1935
Registrado: 25 Nov 2015, 00:15
Ubicación: Mostoles(Madrid)
Has thanked: 83 times
Been thanked: 115 times

Re: Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Mensaje por mad3001 »

Spirax escribió: 05 Abr 2022, 18:44
mad3001 escribió: 26 Mar 2022, 00:58 El Street Fighter 2 es complicado, se cepilla la ram7, la 4 y la 6 nada más empezar. La 4 para música, la 6 para menús y paneles, y la 7 según el momento, la usa para los datos de los luchadores, objetos, paneles....muchas cosas, pero ciertamente estaría bien tenerlo en disco, en cinta es insufrible ya que tiene muchos bloques y no están en el orden de juego
bueno pues el p... problema del SF2 es que tiene denegada la distribucion.
eso quiere decir que aunque se puede hacer un loader para +3e, el disco resultante no se puede compartir sin infringir derechos :evil:

...

y todo este toston para decir:
lo siento NO lo puedo compartir publicamente :~(
acepto MP's ..... :|
Como siempre, eres un mákina
Volviendo a los origenes... programa en assembler
Avatar de Usuario
kik3
Aspirante a demonio
Aspirante a demonio
Mensajes: 201
Registrado: 19 Feb 2018, 23:38
Has thanked: 3 times
Been thanked: 14 times

Re: Convirtiendo juegos TAP a DSK para +3 y +3e o +2e

Mensaje por kik3 »

cacharreo escribió: 04 Abr 2022, 15:26 En .DSK no lo sé pero en .SCL (convertible a .TRD) lo tienes aquí.
Pues no he manejado nunca ni scl ni trd, lo quería para la gotek
Responder

Volver a “Sinclair”