[Z88DK] - ¿Cuanta RAM me queda?
- Hark0
- Mensajes: 683
- Registrado: 27 Sep 2015, 00:31
- Ubicación: Cornellà de Llobregat - BCN
- Contactar:
[Z88DK] - ¿Cuanta RAM me queda?
¿Hay alguna forma de saber cuanta RAM me estoy "comiendo"?
He escrito una rutina que genera mapas grandes... primero la he escrito en el móvil tirando de C4Droid... y lo he terminado en el ordenador con Notepad++, ya que el algoritmo lo escribí para que la salida fuera por terminal.
Bien, lo he portado a Z88DK... el código incluye una variable:
mapa[ANCHO*ALTO];
Evidentemente, en función de los valores ANCHO y ALTO la matriz es más o menos grande... y me gustaría poder dar la opción de generar los mapas en tiempo real.... esto es, que el jugador pueda cambiar el tamaño...
Alguien me echa una manopla para saber la memoria libre...?
He escrito una rutina que genera mapas grandes... primero la he escrito en el móvil tirando de C4Droid... y lo he terminado en el ordenador con Notepad++, ya que el algoritmo lo escribí para que la salida fuera por terminal.
Bien, lo he portado a Z88DK... el código incluye una variable:
mapa[ANCHO*ALTO];
Evidentemente, en función de los valores ANCHO y ALTO la matriz es más o menos grande... y me gustaría poder dar la opción de generar los mapas en tiempo real.... esto es, que el jugador pueda cambiar el tamaño...
Alguien me echa una manopla para saber la memoria libre...?
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Re: [Z88DK] - ¿Cuanta RAM me queda?
Pues supongo que el z88dk debe tener alguna directiva para saber en qué dirección acaba el programa...
Sino una manera chapucera es ejecutar el programa en emulador y usando un visor hexadecimal ver "donde empiezan los ceros".... cosa no del todo fiable pues puedes tener alguna zona de ceros que tengas reservada tu para algún array y que no esté usado aún....
Sino una manera chapucera es ejecutar el programa en emulador y usando un visor hexadecimal ver "donde empiezan los ceros".... cosa no del todo fiable pues puedes tener alguna zona de ceros que tengas reservada tu para algún array y que no esté usado aún....
- Hark0
- Mensajes: 683
- Registrado: 27 Sep 2015, 00:31
- Ubicación: Cornellà de Llobregat - BCN
- Contactar:
Re: [Z88DK] - ¿Cuanta RAM me queda?
Es lo que habia pensado... llenar la matriz con un valor X.... y buscarlo a posteriori a ver la ubicación etc etc...
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Re: [Z88DK] - ¿Cuanta RAM me queda?
Supongo que esto te sirve:
http://z88dk.org/previous/old/zcc.html
getfree()
Ten en cuenta que las variables temporales que tu uses en una función, no contarán en la memoria usada, dado que se asignan al entrar en la función y se desasignan al salir de la función. De la misma manera, claro está, como cuando usas malloc(). Yo no he usado nunca z88dk pero vamos, creo que todos los compiladores de C funcionan así.
Saludos
http://z88dk.org/previous/old/zcc.html
getfree()
Ten en cuenta que las variables temporales que tu uses en una función, no contarán en la memoria usada, dado que se asignan al entrar en la función y se desasignan al salir de la función. De la misma manera, claro está, como cuando usas malloc(). Yo no he usado nunca z88dk pero vamos, creo que todos los compiladores de C funcionan así.
Saludos
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Re: [Z88DK] - ¿Cuanta RAM me queda?
Creo que ese getfree utiliza la función heapinfo:
http://www.z88dk.org/wiki/doku.php?id=l ... allocation
http://www.z88dk.org/wiki/doku.php?id=l ... allocation
Re: [Z88DK] - ¿Cuanta RAM me queda?
Yo en mi juego no he usado malloc, todo son variables globales (+variables locales en la pila)
La memoria ocupada me la decía el tamaño del .bin tras compilar, sabiendo esto:
En z88dk la pila por defecto está en FF57 (decimal 65367)
Por lo que tenemos 65367 - 32768 de inicio del programa - 512 bytes de la pila =
32087 bytes libres para codigo
O sea, el bin puede ocupar hasta 32087 bytes, si no cambias los PRAGMA de inicio de programa ni de pila.
Claro, si tu tabla es dinámica no te sirve esto, pero puedes alojarla estáticamente al máximo y sólo usar lo que necesites.
La memoria ocupada me la decía el tamaño del .bin tras compilar, sabiendo esto:
En z88dk la pila por defecto está en FF57 (decimal 65367)
Por lo que tenemos 65367 - 32768 de inicio del programa - 512 bytes de la pila =
32087 bytes libres para codigo
O sea, el bin puede ocupar hasta 32087 bytes, si no cambias los PRAGMA de inicio de programa ni de pila.
Claro, si tu tabla es dinámica no te sirve esto, pero puedes alojarla estáticamente al máximo y sólo usar lo que necesites.
- Hark0
- Mensajes: 683
- Registrado: 27 Sep 2015, 00:31
- Ubicación: Cornellà de Llobregat - BCN
- Contactar:
Re: [Z88DK] - ¿Cuanta RAM me queda?
Creo que finalmente hare un tamaño "máximo" de mapa... y que el usuario se mueva "dentro" de esos parámetros.
Hmmm ¿y usar modo 128 kb?
Actualmente lo tengo así:
#pragma output STACKPTR=65000
hmmm
¿Como puedo acceder al resto de bancos en el caso de querer programarlo para 128?
¿Valdria el mismo pragma?
Hmmm ¿y usar modo 128 kb?
Actualmente lo tengo así:
#pragma output STACKPTR=65000
hmmm
¿Como puedo acceder al resto de bancos en el caso de querer programarlo para 128?
¿Valdria el mismo pragma?
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
Re: [Z88DK] - ¿Cuanta RAM me queda?
Yo estuve preguntándome lo mismo, pero no llegué a resolverlo. Supongo que hay que poner la pila por debajo del último cuarto de memoria, y cambiar esa última página, que no hemos usado en el programa principal.
El modo +3 ya es mucho más complejo.
El modo +3 ya es mucho más complejo.
- Hark0
- Mensajes: 683
- Registrado: 27 Sep 2015, 00:31
- Ubicación: Cornellà de Llobregat - BCN
- Contactar:
Re: [Z88DK] - ¿Cuanta RAM me queda?
Bien, he probado una cosita:
Teniendo esta línea de código:
int mundo[256];
int stack[256];
obtengo un BIN de 11.554 bytes
Si cambio a:
int mundo[1256];
int stack[1256];
el BIN pasa a 15.554 bytes
Voy a ver si avergüo el tema de usar los 128 kb...
Teniendo esta línea de código:
int mundo[256];
int stack[256];
obtengo un BIN de 11.554 bytes
Si cambio a:
int mundo[1256];
int stack[1256];
el BIN pasa a 15.554 bytes
Voy a ver si avergüo el tema de usar los 128 kb...
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.