Buenas tardes.
Estamos desarrollando nuestro juego en C con el compilador SDCC y estamos teniendo algunos problemas. Hemos llegado a un punto en el que no podemos meter más recursos ya que hemos agotado prácticamente la totalidad de la memoria disponible. Debido a esto no podemos tener más de 2 fondos y eso que no hemos cargado la música. La pregunta es, ¿conocéis alguna rutina para acceder a disco y para poner en disco los recursos?, estamos un poco desesperados porque no sabemos qué hacer. De hecho nos pasan cosas extrañas como que al tener llamadas a collSp de la librería cpcrslib en un fragmento de código que no se está ejecutando en ese momento hay cosas que se descuadran y demás.
Cualquier ayuda es bien recibida.
Un saludo.
Problema con memoria
-
- Keeper of The Forum
- Mensajes: 712
- Registrado: Vie 27 Feb , 2009 12:21 pm
Re: Problema con memoria
Desde donde estas compilando? Yo empece desde &4000 pero logre ganar 4ks bajando a &3000, apurando el superbuffer de la lib.
Exomizas los fondos? Puedes lograr recuperar ram de ahi al almacenarlos comprimidos. Lo mismo concla parte de la partitura de la musica, si es larguita.
Mientras el buffer de descompresion + datos comprimidos sea menos que los datos descomprimidos, eso que ganas. La pantalla la vas copiando de ram a ram? Yo quiero experimentar con plasmar un fondo en pantalla e ir copiqndo a buffers las partes a ensuciar para luego repintarlas a ver que tal va... ideal para desexomizar en pantalla a pelo
Para cargar binarios : http://www.cpctech.org.uk/source/load.html
Exomizas los fondos? Puedes lograr recuperar ram de ahi al almacenarlos comprimidos. Lo mismo concla parte de la partitura de la musica, si es larguita.
Mientras el buffer de descompresion + datos comprimidos sea menos que los datos descomprimidos, eso que ganas. La pantalla la vas copiando de ram a ram? Yo quiero experimentar con plasmar un fondo en pantalla e ir copiqndo a buffers las partes a ensuciar para luego repintarlas a ver que tal va... ideal para desexomizar en pantalla a pelo
Para cargar binarios : http://www.cpctech.org.uk/source/load.html
--------
Carpeta publica [url=https://mega.nz/#F!W5IyhbLa!51JpgZqvyx6j__v12Pr9QA]MEGA Amstrad[/url]
Carpeta proyecto [url=https://github.com/KaosOverride]GitHub[/url]
Carpeta publica [url=https://mega.nz/#F!W5IyhbLa!51JpgZqvyx6j__v12Pr9QA]MEGA Amstrad[/url]
Carpeta proyecto [url=https://github.com/KaosOverride]GitHub[/url]
Re: Problema con memoria
En primer lugar gracias por contestar.
Ahora mismo estábamos en la 3000 y los fondos están comprimidos. El problema creemos que es con la librería ("biblioteca"), que quizá no usamos algo correctamente y estamos comiendo demasiada memoria, bien de datos, bien de código. En cualquier caso estamos probando alguna que otra cosa como lo que comentas al final, si sale algo te lo haré saber.
Gracias nuevamente .
Ahora mismo estábamos en la 3000 y los fondos están comprimidos. El problema creemos que es con la librería ("biblioteca"), que quizá no usamos algo correctamente y estamos comiendo demasiada memoria, bien de datos, bien de código. En cualquier caso estamos probando alguna que otra cosa como lo que comentas al final, si sale algo te lo haré saber.
Gracias nuevamente .
-
- Keeper of The Forum
- Mensajes: 712
- Registrado: Vie 27 Feb , 2009 12:21 pm
Re: Problema con memoria
Si vas a acceder a ficheros desde el firmware con ese codigo mejor que no subas hasta &A000 que por ahi arriba esta el buffer de ficheros Amsdos/cassete y bastantes variables de sistema, pila y demas si pretendes volver al Basic... En la guia del firmware y en la web de antes viene un mapa simpatico de la ram de esa zona.
El codigo de carga para el Marron ennla Euskal me lo tuve que compilar en winampe y guardarlo como .bin ya que no lograba integrarlo en C con directivas ASM con la notacion especifica del SDCC...
Despues lo converti a .h con el bin2asm y retoque notepad, y lo "copio" a la posicion &500 y le hago un call. Eso carga el bin en la posicion &3000 y hace el call ahi.
Uso el superbuffer ya que cuando quiero pasar de un bin al otro no lo estoy usando o he dejado de usarlo. Y al cargar en su sitio lo ejecuto y se inicializa todo limpiamente. Pero en tu caso querras hacer una funcion que cargue el binario de marras y luego haga un ret, no un call...
Echa un vistazo a mis fuentes. Tambien otros juegos con los fuentes disponibles pueden dar un poco mas de inspiracion, como los de los mojon twins etc...
No me has confirmado, o no te he sabido entender, si las pantallas van en crudo a fullscreen o si usas tiling...
El codigo de carga para el Marron ennla Euskal me lo tuve que compilar en winampe y guardarlo como .bin ya que no lograba integrarlo en C con directivas ASM con la notacion especifica del SDCC...
Despues lo converti a .h con el bin2asm y retoque notepad, y lo "copio" a la posicion &500 y le hago un call. Eso carga el bin en la posicion &3000 y hace el call ahi.
Uso el superbuffer ya que cuando quiero pasar de un bin al otro no lo estoy usando o he dejado de usarlo. Y al cargar en su sitio lo ejecuto y se inicializa todo limpiamente. Pero en tu caso querras hacer una funcion que cargue el binario de marras y luego haga un ret, no un call...
Echa un vistazo a mis fuentes. Tambien otros juegos con los fuentes disponibles pueden dar un poco mas de inspiracion, como los de los mojon twins etc...
No me has confirmado, o no te he sabido entender, si las pantallas van en crudo a fullscreen o si usas tiling...
--------
Carpeta publica [url=https://mega.nz/#F!W5IyhbLa!51JpgZqvyx6j__v12Pr9QA]MEGA Amstrad[/url]
Carpeta proyecto [url=https://github.com/KaosOverride]GitHub[/url]
Carpeta publica [url=https://mega.nz/#F!W5IyhbLa!51JpgZqvyx6j__v12Pr9QA]MEGA Amstrad[/url]
Carpeta proyecto [url=https://github.com/KaosOverride]GitHub[/url]
Re: Problema con memoria
El SDCC es un poco jodidillo con algunas cosillas. Si has estado usando el crt0.s que está en todas partes en internet seguramente tengas algún problema con las declaración e inicialización de variables globales y/o estáticas y la zona de memoria que se le asigna.
Lo que dices acerca de que la pantalla se corrompe a veces y demás la mayoría de las veces suele ser por la pila que crece demasiado y te empieza a pisar código.
Por cierto la última versión del SDCC que salió hace que el código del CPC Bros aumente en casi 800 bytes... Yo uso una night build que me bajé el año pasado (v3.2.1 a28 creo...). Con la oficial de esa versión me genera código incorrecto x'D Y parece que ya no es posible conseguirla. Así que la tengo como paño en oro.
¿Usas el firmware? Desde mi punto de vista lo mejor que se puede hacer para tener control total es compilar en 0x0138 y no usar el firmware para nada. Así tienes casi la totalidad de los 64KB para todo.
Si das más datos de lo que estáis haciendo seguramente podríamos echarte un mejor cable.
¡Saludos!
Lo que dices acerca de que la pantalla se corrompe a veces y demás la mayoría de las veces suele ser por la pila que crece demasiado y te empieza a pisar código.
Por cierto la última versión del SDCC que salió hace que el código del CPC Bros aumente en casi 800 bytes... Yo uso una night build que me bajé el año pasado (v3.2.1 a28 creo...). Con la oficial de esa versión me genera código incorrecto x'D Y parece que ya no es posible conseguirla. Así que la tengo como paño en oro.
¿Usas el firmware? Desde mi punto de vista lo mejor que se puede hacer para tener control total es compilar en 0x0138 y no usar el firmware para nada. Así tienes casi la totalidad de los 64KB para todo.
Si das más datos de lo que estáis haciendo seguramente podríamos echarte un mejor cable.
¡Saludos!
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro
La Comunidad Española |