Página 1 de 4
Solucionado - Problemas compresión de mapas al pasar a 128K
Publicado: Dom, 09 Mar 2014, 16:37
por elborra
EDITO: Solucionado - El problema era que tenÃa mal configurado el cargador (loader.bas)
Buenas, acabo de darme cuenta que al cambiar al modo 128K un par de pantallas se descomprimen corruptas llegando en ocasiones a resetear el spectrum.
Al ser siempre en las 3 mismas pantallas descartarÃa problemas de descompresión en sà y tampoco del buffer. De hecho lo que he probado a sido la siguiente linea a compress.h al final de la función descomprimir_map $this->bbcode_second_pass_code('', 'ret
.map1 BINARY "mapa_comprimido.bin //<---"
.map BINARY "mapa_comprimido.bin"')para desplazar el binario del mapa comprimido dentro del binario del juego principal y el problema ya no sucede.
Asà que lo que parece es que algo sobreescribe parte del mapa (o de los streams) durante la compilación (es esto posible siquiera?) o en tiempo de ejecución ¿no? ¿Qué puede estar ocurriendo? Las pantallas son la 45, 46 y 47 (NO son las últimas del mapa, y las siguientes en adelante también se ven correctamente). Además como digo el único cambio al pasar del modo 48k a 128k ha sido para un test (libre de otros posibles fallos) donde he activado #define MODE_128K (y los respectivos cambios minimos).
el mapa_comprimido ocupa 1821 bytes (por si sirviera de algo)
Re: Problemas con compresión de mapas al pasar a 128K
Publicado: Dom, 09 Mar 2014, 18:11
por na_th_an
Es muy probable que sea la pila que se mete en el buffer de descompresión. Hay que tener en cuenta que hay que mover la pila a un sitio seguro. Originalmente tiene su propio lugar en la parte alta de la RAM, pero en modo 128K esta RAM es la que cambia al paginar, por lo que hay que moverla más abajo. En el caso de la Churrera, la pila se coloca justo por debajo del binario, o sea, empieza en 24199 y crece hacia abajo. Es posible que haya alguna colisión de datos.
Aún no he tenido tiempo de estudiar la modificación de Antonio para comprimir mapas y no te puedo ser de más ayuda
Re: Problemas con compresión de mapas al pasar a 128K
Publicado: Dom, 09 Mar 2014, 18:54
por elborra
Umm, si la pila crece hacia abajo y empieza justo antes del binario no deberia de afectar a una estructura creada dentro del código, ¿no?.
En mi caso el mapa comrimido empieza en la posicion 642 (decimal) del binario principal (el que serÃa churromain.bin)
Seguiré probando a cambiar cosas al medio tun tun XD a ver que resultados obtengo
Re: Problemas con compresión de mapas al pasar a 128K
Publicado: Dom, 09 Mar 2014, 20:11
por na_th_an
$this->bbcode_second_pass_quote('elborra', 'U')mm, si la pila crece hacia abajo y empieza justo antes del binario no deberia de afectar a una estructura creada dentro del código, ¿no?.
En mi caso el mapa comrimido empieza en la posicion 642 (decimal) del binario principal (el que serÃa churromain.bin)
Seguiré probando a cambiar cosas al medio tun tun XD a ver que resultados obtengo
No tiene por qué. Puedes crear una estructura donde quieras, y me suena que la rutina descompresora usaba un buffer en la parte más baja de la memoria.
Re: Problemas con compresión de mapas al pasar a 128K
Publicado: Dom, 09 Mar 2014, 20:13
por na_th_an
Mirando el código veo esto:
$this->bbcode_second_pass_code('', '#define DMAP_BUFFER 0x5b01')
Es la situación de un buffer, supongo que de descompresión.
0x5b01 es 23297. No sé cuál será el tamaño del buffer, pero si es lo suficientemente grande colisionará con la pila. Aunque podrÃa ser otra cosa. Si he entendido bien como funciona la compresión, el buffer debe permanecer entre descompresión y descompresión ya que necesitas datos anteriores para extraer datos nuevos. Si la pila se lo carga, o se carga parte de él, los datos del buffer necesarios para descomprimir la pantalla X puede que estén corruptos.
Re: Problemas con compresión de mapas al pasar a 128K
Publicado: Dom, 09 Mar 2014, 20:18
por na_th_an
Se me ocurre algo: la rutina que pagina cosas escribÃa el número de la página en ese área. ¿La cambiaste para que no lo hiciera? Aparte de eso, no recuerdo nada más.
Re: Problemas con compresión de mapas al pasar a 128K
Publicado: Dom, 09 Mar 2014, 20:53
por elborra
$this->bbcode_second_pass_quote('na_th_an', 'S')e me ocurre algo: la rutina que pagina cosas escribÃa el número de la página en ese área. ¿La cambiaste para que no lo hiciera? Aparte de eso, no recuerdo nada más.
Si, si que lo hice
. El tema es que sólo ocurre en esas 3 pantallas (no sucede ni con las anteriores ni las posteriores). Si dependiera exclusivamente de la pila sucederÃa aleatoriamente. Moviendo el binario de posición (con parches) las pantallas con error se desplazaban.
El buffer es del tamaño de una pantalla, es decir 150 bytes (o 117 en mi caso)
Por mi parte estoy tratando de hacer algo parecido a compressed_levels, reservando una variable de tamaño máximo vacia tipo mapa[] (el mapa nunca serÃa de más bytes), recomprimir el mapa con apack y pasarlo por librarian.exe. En definitiva luego recuperaria el mapa con get_resource con destino en mapa. Por último serÃa hacer que la rutina de anronio buscara en esa dirección. He hecho los cambios que creia necesarios, pero el resultado no ha sido el deseado (de hecho no me carga siquiera el juego XD)