mcleod_ideafix escribió:Mi problema fue con otro juego, "Where Time Stood Still". Este juego ocupa practicamente todos los 128K de la máquina. El juego original en formato disco tiene un arranque especial protegido. Yo quería hacer una versión que funcionara tanto en disquete como en una Compact Flash usando +3e. Partí de la versión en cinta y logré que funcionara bien si lo arrancaba desde la CF, pero si lo hacía desde el disquete, fallo total.
Te vas a descojonar.
Cuando tuve la fiebre por convertir juegos a +3e, le eché un ojo al WTSS (tengo las notas por ahí). En algún momento de las discusiones sobre este juego ví que alguien ya lo había convertido y como ya había una versión buena pasó a tener prioridad cero.
En fin, creo que la única complicación que tiene es la página 7, pero creo que tengo un plan para restaurarla correctamente.
-- Actualizado 28 Sep 2013, 20:58 --
De mis notas de WTSS:
- El juego carga usa páginas 0, 1, 3, 4 y 6 completas.
- De la página 7 usa 9472 bytes desde la dirección 56064.
- También carga un bloque de código desde 22629 con 22400 bytes de longitud.
He echado una ojeada a tu cargador, lo único raro que veo es cómo mueve los datos. Como sólo he echado un ojo al asm, no tengo mucha idea de qué pretendes hacer. Me suena algo raro que cojas datos de la página 1... esa página la carga completa según mis notas (aunque podría haber algún hueco, eso no lo miré).
Mi plan maestro para la página 7: pasarle el zx7 y si hubiera cabido en 6912 cargarla en memoria de pantalla y descomprimirla. Mala suerte, no cabe.
Lo que he hecho al final:
- Cargo normalmente el bloque de código y las páginas 0, 1, 3, 4, y 6.
- Según mis notas, hay un área de 6636 bytes en la página 7 que podemos usar sin problemas. Este área va de la dirección 49428 a la 56063 y corresponde prácticamente a la segunda memoria de pantalla.
- Cargo 6000 bytes de la página 7 sobre la pantalla, y los muevo a ese área (línea 65 del cargador).
- Cargo el resto de bytes de la página 7 en la memoria de pantalla.
- Meto la página 7, muevo los 6000 primeros bytes a su ubicación definitiva y luego muevo los siguientes 3472 bytes a su sitio.
- Por último meto la página 0 y salto a la dirección de inicio.
El PAUSE de la línea 60 es para que de tiempo a ver la pantalla de presentación; el PAUSE de la línea 70 es para que se pare el motor de disco (vale, debería poner un OUT pero soy muy vago).
Mi versión "+3e friendly":
http://www.mediafire.com/?z6wqfgwkswe1eqhUn consejo para cuando hagas movimientos "raros" con las páginas (compresiones, copias de bloques de una a otra, etc):
- Usa ZXSpin.
- Pon un breakpoint en la dirección de inicio del juego.
- Cuando salte el breakpoint usa tus notas y salva a disco los bloques de datos que ha cargado el programa (opción Save Binary, puedes elegir de la RAM principal o de qué bancos quieres copiar datos).
Con eso tienes una copia literal de lo que ha cargado el juego. Si te metes en problemas, lo primero que deberías hacer es repetir la operación con tu versión del juego y luego usar
fc /b para comprobar si lo que carga el programa es exactamente igual a lo que tienes tú en memoria. De esta manera averiguarás qué es lo que has roto (casi siempre la página 7, hay que planificar mucho las cosas ahí).
EDITO: Acabo de hacer un disco con tu versión... ¿seguro que lo que me has pasado no funciona? En Spectaculator ha arrancado desde disquete; después de analizar lo que carga he visto algunas diferencias en algunas páginas (pero podría ser por haber utilizado una versión diferente del juego). En ZXSpin carga y arranca desde el disco duro. No sé si se corromperá/fallará más adelante, pero parece funcionar.