Re: Desprotección discos +3
Publicado: 30 Sep 2018, 20:13
A ver, mangoneando un poco alguno de los juegos...
Ice-Breaker (original de Topo Soft)
Primero carga la pantalla de la FAD y el logo de Topo Soft. Luego, desde código máquina, se cargan los siguientes bloques:
- Pantalla de carga.
- Un bloque en la página RAM 3, desde la dirección 49152 y que ocupa 2242 bytes.
- El bloque principal (desde 23552, con 41253 bytes de longitud).
- Si el equipo es un 128k, carga otro bloque en la RAM 3, empezando en 51394 y con 10618 bytes de longitud.
Por último, se inicia la ejecución del juego en la dirección 23552.
Posibles arreglos:
Se puede cargar TODO desde BASIC, cambiando algunas cosillas:
- (Opcional): Los logos de la FAD y Topo Soft.
- Se carga el screen$.
- Se carga todo el contenido de la página 3.
- Se cargan los bytes de la dirección 23552 a la 25000 en la página 4.
- Se carga el juego desde la dirección 25000 hasta el final.
- Se salta a c/m. Desde ahí, se rescatan desde la página 4 los bytes entre 23552 y 25000 y se salta al principio del juego.
Lorna (versión portuguesa)
Este tiene algún problemilla más, concretamente (y cómo habías apuntado) la forma de cargar las fases. Afortunadamente, en Topo Soft hicieron las rutinas de la multicarga MUY claras de entender.
Primero se cargan desde BASIC los logos de la FAD y Topo Soft, junto con la pantalla de carga y un programa que nos lleva al menú. De ahí nos metemos a código máquina y no salimos.
Dependiendo de la fase que elijamos, podemos cargar uno de tres bloques de datos. La rutina que selecciona el bloque empieza en la dirección 60963 y acaba (más o menos) en 61077, así que tenemos unos 100 bytes ahí para mangonear y meter una rutina de carga en c/m.
El mayor problema que le veo es que, mientras prepara la carga, machaca 576 bytes a partir de la dirección 23296. Para poder usar el +3DOS se necesita (creo) que el área de variables del sistema esté en orden. Por otra parte, durante la carga el stack está en las últimas direcciones de la RAM... y yo necesito tenerlo por debajo de 49152 para poder usar el +3DOS.
(Vale, mirándolo bien no es tan crítico... puedo hacer malabarismos y meter tanto el stack como los datos en la memoria de pantalla, pero esto requerirá un poquito de esfuerzo)
RAM (versión portuguesa)
Esta versión carga todo desde BASIC. Lo más rápido es usar el tapedisc de Microhobby para pasarlo a cinta y modificar el cargador BASIC para que añadir el nombre de los bloques.
Quizás la única dificultad es que el CLEAR está realmente bajo... puede haber problemas (porque el BASIC se hará más grande al añadir los nombres de los bloques). Lo bueno es que como el Spectrum +3 NO imprime los nombres de los bloques que carga desde disco, podemos "recortar" un buen cacho del cargador (el que define l y k los pokea).
Mad Mix 2 (versión portuguesa)
Aquí hay una mezcla de todo, pero con algunas ventajas de las que aprovecharnos.
Primero, el BASIC carga los logos de la FAD y Topo y un cargador en c/m. Este cargador lee la pantalla de carga y un pequeño bloque de 8800 bytes a partir de la dirección 24576. Se entra al menú y después de elegir las opciones se carga el juego principal en la dirección 24672 (son 31800 bytes). Este bloque nos va a machacar la rutina que ejecuta el menú del juego.
Después (si el equipo es un 128k) se procede a cargar todas las fases en las páginas 3 y 4 de la RAM. El juego se ejecuta en la dirección 24672.
Posibles arreglos (en su día ya lo arreglé):
Cargar TODO desde BASIC, con un par de retoques.
- Se cargan los logos de la FAD y Topo Soft.
- Se cargan los datos de la RAM 3 y 4.
- Se cargan los primeros 8704 bytes del bloque principal en la RAM 6.
- Se carga el resto del bloque principal.
- Se carga en minibloque del menú.
El truco sería hacer un parche para que (después de ejecutar el menú) en vez de cargar el bloque principal se rescaten esos 8704 bytes "perdidos".
Convertir RAM, Ice Breaker y Mad Mix 2 no es muy complicado... puedo preparar versiones en cinta que hagan esos mismo pasos (luego se pueden pasar a disco con el tapedisc). Lorna tiene su truco y parte del cargador de disco estaría en c/m, pero tampoco es excesivamente complicado.
NOTA 1: En Mad Mix 2 y Lorna también hay un par de parches que no he mencionado... el disco va solo, así que nos sobran los mensajes de "pulsa play" y "pulsa stop".
NOTA 2: ¿A que parece que estoy evitando usar la RAM 1? Eso es porque la caché del +3DOS (sí, tiene caché) machaca los datos que haya en los primeros 4k de la página 1. Se puede evitar con un poco de código, nada complicado. Lo complicado es la RAM 7... en un +3 que vaya a cargar de disco esta página es sagrada.
Ice-Breaker (original de Topo Soft)
Primero carga la pantalla de la FAD y el logo de Topo Soft. Luego, desde código máquina, se cargan los siguientes bloques:
- Pantalla de carga.
- Un bloque en la página RAM 3, desde la dirección 49152 y que ocupa 2242 bytes.
- El bloque principal (desde 23552, con 41253 bytes de longitud).
- Si el equipo es un 128k, carga otro bloque en la RAM 3, empezando en 51394 y con 10618 bytes de longitud.
Por último, se inicia la ejecución del juego en la dirección 23552.
Posibles arreglos:
Se puede cargar TODO desde BASIC, cambiando algunas cosillas:
- (Opcional): Los logos de la FAD y Topo Soft.
- Se carga el screen$.
- Se carga todo el contenido de la página 3.
- Se cargan los bytes de la dirección 23552 a la 25000 en la página 4.
- Se carga el juego desde la dirección 25000 hasta el final.
- Se salta a c/m. Desde ahí, se rescatan desde la página 4 los bytes entre 23552 y 25000 y se salta al principio del juego.
Lorna (versión portuguesa)
Este tiene algún problemilla más, concretamente (y cómo habías apuntado) la forma de cargar las fases. Afortunadamente, en Topo Soft hicieron las rutinas de la multicarga MUY claras de entender.
Primero se cargan desde BASIC los logos de la FAD y Topo Soft, junto con la pantalla de carga y un programa que nos lleva al menú. De ahí nos metemos a código máquina y no salimos.
Dependiendo de la fase que elijamos, podemos cargar uno de tres bloques de datos. La rutina que selecciona el bloque empieza en la dirección 60963 y acaba (más o menos) en 61077, así que tenemos unos 100 bytes ahí para mangonear y meter una rutina de carga en c/m.
El mayor problema que le veo es que, mientras prepara la carga, machaca 576 bytes a partir de la dirección 23296. Para poder usar el +3DOS se necesita (creo) que el área de variables del sistema esté en orden. Por otra parte, durante la carga el stack está en las últimas direcciones de la RAM... y yo necesito tenerlo por debajo de 49152 para poder usar el +3DOS.
(Vale, mirándolo bien no es tan crítico... puedo hacer malabarismos y meter tanto el stack como los datos en la memoria de pantalla, pero esto requerirá un poquito de esfuerzo)
RAM (versión portuguesa)
Esta versión carga todo desde BASIC. Lo más rápido es usar el tapedisc de Microhobby para pasarlo a cinta y modificar el cargador BASIC para que añadir el nombre de los bloques.
Quizás la única dificultad es que el CLEAR está realmente bajo... puede haber problemas (porque el BASIC se hará más grande al añadir los nombres de los bloques). Lo bueno es que como el Spectrum +3 NO imprime los nombres de los bloques que carga desde disco, podemos "recortar" un buen cacho del cargador (el que define l y k los pokea).
Mad Mix 2 (versión portuguesa)
Aquí hay una mezcla de todo, pero con algunas ventajas de las que aprovecharnos.
Primero, el BASIC carga los logos de la FAD y Topo y un cargador en c/m. Este cargador lee la pantalla de carga y un pequeño bloque de 8800 bytes a partir de la dirección 24576. Se entra al menú y después de elegir las opciones se carga el juego principal en la dirección 24672 (son 31800 bytes). Este bloque nos va a machacar la rutina que ejecuta el menú del juego.
Después (si el equipo es un 128k) se procede a cargar todas las fases en las páginas 3 y 4 de la RAM. El juego se ejecuta en la dirección 24672.
Posibles arreglos (en su día ya lo arreglé):
Cargar TODO desde BASIC, con un par de retoques.
- Se cargan los logos de la FAD y Topo Soft.
- Se cargan los datos de la RAM 3 y 4.
- Se cargan los primeros 8704 bytes del bloque principal en la RAM 6.
- Se carga el resto del bloque principal.
- Se carga en minibloque del menú.
El truco sería hacer un parche para que (después de ejecutar el menú) en vez de cargar el bloque principal se rescaten esos 8704 bytes "perdidos".
Convertir RAM, Ice Breaker y Mad Mix 2 no es muy complicado... puedo preparar versiones en cinta que hagan esos mismo pasos (luego se pueden pasar a disco con el tapedisc). Lorna tiene su truco y parte del cargador de disco estaría en c/m, pero tampoco es excesivamente complicado.
NOTA 1: En Mad Mix 2 y Lorna también hay un par de parches que no he mencionado... el disco va solo, así que nos sobran los mensajes de "pulsa play" y "pulsa stop".
NOTA 2: ¿A que parece que estoy evitando usar la RAM 1? Eso es porque la caché del +3DOS (sí, tiene caché) machaca los datos que haya en los primeros 4k de la página 1. Se puede evitar con un poco de código, nada complicado. Lo complicado es la RAM 7... en un +3 que vaya a cargar de disco esta página es sagrada.