[Z88DK] - ¿Cuanta RAM me queda?

Software para o relacionado con el core ZX Spectrum / Software for or related to the ZX Spectrum core
Responder
Avatar de Usuario
Hark0
Mensajes: 683
Registrado: 27 Sep 2015, 00:31
Ubicación: Cornellà de Llobregat - BCN
Contactar:

[Z88DK] - ¿Cuanta RAM me queda?

Mensaje por Hark0 » 23 May 2016, 10:10

¿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...? :P
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
chernandezba
Mensajes: 831
Registrado: 02 Oct 2015, 23:35

Re: [Z88DK] - ¿Cuanta RAM me queda?

Mensaje por chernandezba » 23 May 2016, 13:15

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....
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
Hark0
Mensajes: 683
Registrado: 27 Sep 2015, 00:31
Ubicación: Cornellà de Llobregat - BCN
Contactar:

Re: [Z88DK] - ¿Cuanta RAM me queda?

Mensaje por Hark0 » 23 May 2016, 13:41

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.

Avatar de Usuario
chernandezba
Mensajes: 831
Registrado: 02 Oct 2015, 23:35

Re: [Z88DK] - ¿Cuanta RAM me queda?

Mensaje por chernandezba » 23 May 2016, 14:14

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
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Mensajes: 831
Registrado: 02 Oct 2015, 23:35

Re: [Z88DK] - ¿Cuanta RAM me queda?

Mensaje por chernandezba » 23 May 2016, 14:16

Creo que ese getfree utiliza la función heapinfo:

http://www.z88dk.org/wiki/doku.php?id=l ... allocation
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
yombo
Mensajes: 487
Registrado: 05 Oct 2015, 14:10

Re: [Z88DK] - ¿Cuanta RAM me queda?

Mensaje por yombo » 24 May 2016, 04:47

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.

Avatar de Usuario
Hark0
Mensajes: 683
Registrado: 27 Sep 2015, 00:31
Ubicación: Cornellà de Llobregat - BCN
Contactar:

Re: [Z88DK] - ¿Cuanta RAM me queda?

Mensaje por Hark0 » 24 May 2016, 10:27

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?
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
yombo
Mensajes: 487
Registrado: 05 Oct 2015, 14:10

Re: [Z88DK] - ¿Cuanta RAM me queda?

Mensaje por yombo » 24 May 2016, 10:46

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.

Avatar de Usuario
Hark0
Mensajes: 683
Registrado: 27 Sep 2015, 00:31
Ubicación: Cornellà de Llobregat - BCN
Contactar:

Re: [Z88DK] - ¿Cuanta RAM me queda?

Mensaje por Hark0 » 24 May 2016, 11:37

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...
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Responder