Mensaje
por zup » Mié Mar 18, 2015 3:11 pm
Pues este no es de los sencillos...
El +3DOS tiene dos particularidades con respecto al manejo del disco. La primera es que usa parte de la página 1 para caché, por lo que al cargar datos la corrompe. Esto se puede desactivar mediante una llamada a DOS SET1346.
La segunda es que en la página 7 guarda datos muy importantes acerca de los ficheros. Si machacas algún área que contenga datos del sistema, te quedarás sin poder usar el disco (y probablemente tampoco el BASIC).
Y, en este caso en particular, se cargan más datos una vez lanzado el juego.
En general, para convertir un juego a disco hay que localizar dónde carga los datos y hacer un cargador que los ponga ahí. En el caso más fácil (carga desde BASIC), hay algunas herramientas que pueden pasar los datos a disco y dejarlo listo para que tú edites el BASIC y lo hagas funcionar. Microhobby publicó el programa TAPEDISC que sirve para eso mismo, pero el problema es que los juegos de Spectrum que cargan solo desde BASIC son raros. En su día la mayoría cargaban desde c/m, pero muchos juegos de nueva hornada cargan desde BASIC (para qué proteger un programa si no lo vas a vender).
Si el juego tiene un cargador en c/m, habría que localizar dónde se cargan los datos, volcarlos nosotros mismos a disco y hacer un cargador. Yo uso un cargador en c/m que escribí hace algún tiempo (empollándome el cargador del Cannon Bubble primero), y solo cambio los datos de nombres de ficheros y dónde cargar.
Si el juego carga datos en la página 1, tendrás que deshabilitar la caché; si el juego carga datos en la página 7 hay que mirar cómo hacer para meterlos sin cargarnos el sistema. El método que uso yo es meterlos en la memoria de pantalla y volcarlos a la página 7 cuando ya no necesite ni BASIC ni disco, aunque esto no siempre es posible (concretamente: en este juego se usa la memoria de pantalla para almacenar el cargador).
En este juego en concreto, como he dicho, se cargan más datos (el final del juego). Así que hay que buscar qué rutina carga eso y parchearla para que llame a una rutina propia que cargue desde disco. Obviamente, habrá que buscar algún hueco donde meterla, y como hemos machacado la página 7 habrá que ver si podemos arreglarlo para que cargue desde disco.
A bote pronto, creo que podré meter la rutina de carga por debajo de la dirección 24576 (posiblemente de 24000 para arriba). Aunque nunca he intentado usar el disco después de machacar la página 7, he hecho algún experimento y parece que la respuesta está en DOS INITIALISE... pero no sé si estropeará alguna cosa más.
El mayor problema que voy a tener va a ser encontrar POKEs para el juego. No puedo comprobar si mis teorías funcionan sin pasarme todo el juego, y eso se me hace complicadillo.
Por ahora tengo la primera parte conseguida y funcionando (he cargado el juego normalmente), pero no he hecho nada para cargar el final del juego.
NOTA: Otra aproximación sería pasar olímpicamente del +3DOS y cargar el juego sector a sector. Esta es la manera que se usaba en los 80, pero creo que es una práctica muy mala y no creo que sea compatible con el +3e.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...