Cargadores en +3(e)DOS

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
zup
Freddy Hardest
Mensajes: 666
Registrado: Vie Ago 15, 2008 2:43 pm

Cargadores en +3(e)DOS

Mensaje por zup » Mié May 15, 2013 3:54 pm

Aunque no esté dando muchas señales de vida, sigo trabajando en convertir juegos de Spectrum a disco. Los objetivos más o menos son estos:
- Utilizar ficheros normalitos. Nada de cargar sector a sector ni nada de eso, ficheros que puedan ir de un lado a otro con comandos BASIC normales (COPY, MOVE, etc).
- Utilizar (cuando sea posible) cargadores BASIC estándar, para que la gente coloque sus POKEs.

Debido a que todavía me pone los pelos de punta el sistema Alkatraz y el Speedlock, estoy considerando "atacar" los juegos en disco. Las primeras preguntas serían... ¿qué estoy buscando y qué debo empollarme? ¿cómo solían cargar los juegos de +3? Lo que quiero saber es si debo buscar llamadas al +3DOS (tanto si son lectura de ficheros como lectura de sectores) o llamadas directas a la controladora de disco.

Por ahora he estado utilizando cargadores BASIC, pero estoy planteándome crear algunas rutinas de carga desde c/m (respetando, eso sí, que los ficheros deben ser estándar). En ese contexto, tengo dudas sobre cómo debería crear los ficheros, con dos opciones:
- Varios ficheros. Por ahora, el criterio que uso es mantener los contenidos de cada página RAM en ficheros separados, aunque si logro modificar un juego multicarga (como Shadow of the Beast) quizás cada fase iría en un fichero.
- Un único fichero gordo. Aquí hay un pequeño problema... si creo un fichero "grande" (de más de 64k o 128k) ¿puede copiarlo un Spectrum? Me suena que a veces se usa el disco RAM para buffer, pero no sé si el fichero debe caber entero en el buffer o no.

También estaría bien saber cuántos ficheros se pueden crear tanto en los disquetes como en las particiones de un +3. Al final vas metiendo juegos y juegos, y la cosa se va disparando... y me imagino que en alguna parte hay un límite.

Por último, unas cuestiones acerca de las llamadas al +3DOS. La teoría dice que antes de llamar al +3DOS, deben estar paginadas la ROM del +3DOS, y las RAM 5, 2 y 7. La pila debe estar por debajo de 49152 (es decir, fuera de la memoria paginada) pero ¿y el código? ¿podría esconder el cargador en la página 7? Estaba pensando en usar la memoria de la segunda pantalla para esconder el cargador hasta el último momento (salvando los primeros bytes, que están reservados). ¿Debo mantener intacto el buffer de impresora (que contiene la rutina de paginación) y las variables de paginación, o al llamar desde c/m no importaría?

Añado otra pregunta: Tengo algún juego que carga datos en el área del buffer de la impresora, y en estos casos los 128k cascan de inmediato. En muchos juegos lo que hago es copiar estos datos desde otro lado de la memoria y lanzar el juego. El problema es con algunos juegos que mezclan BASIC y c/m... en cuanto retornas al BASIC cascan. Mi idea es mover los datos y después conmutar a modo 48k, pero no funciona. Si mando 48 al puerto 32765 se queda bloqueado. ¿Hay alguna manera de conmutar un programa desde 128k a modo 48k y seguir utilizando el BASIC?

Coloco estas preguntas ambién en WOS en mi inglés chapucero...
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 19 invitados