Karoshi MSX Community
06 de Julio de 2021, 12:01:16 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: 1 [2]
  Imprimir  
Autor Tema: Gestión de memoria  (Leído 10303 veces)
0 Usuarios y 1 Visitante están viendo este tema.
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #15 : 15 de Noviembre de 2006, 07:13:30 am »

Yo hago unas barbaridades reentrantes con mi función HOOK . .que la pila flipa que no veas .. veo los ojos del Z80 como me miran y me insultan Smiley
En línea

MSX4EVER2GETHER
www.nerlaska.com
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #16 : 15 de Noviembre de 2006, 08:32:10 pm »

Yo hago unas barbaridades reentrantes con mi función HOOK . .que la pila flipa que no veas .. veo los ojos del Z80 como me miran y me insultan Smiley


[nerlaska]  Tongue  :whip: [z80]
En línea

--

Cindy Lauper She Bops!
burguera
Visitante
« Respuesta #17 : 15 de Noviembre de 2006, 10:01:52 pm »

A ver que me aclare, porque estoy un poco espeso... Lo que me ha parecido entender es que la pila empieza en una dirección, llamemosle X, y crece hacia direcciones superiores a X. Por encima de ese X hay variables del sistema y demás, por lo que si la pila crece demasiado, las machaca y el invento se va a tomar por saco. ¿Correcto?

Por otro lado, he entendido que la pila marca el inicio de la zona de trabajo. Es decir, que la RAM con direcciones inferiores a X puedo usarla sin temor ¿Correcto?

Finalmente está el tema de modificar la dirección de inicio de la pila. Para modificarla ¿es suficiente con meter elvalor que quiera en el stack pointer al inicio de mi programa?

Gracias por la ayuda. La verdad es que, inocente de mi, había hecho mis cálculos suponiendo 16KB de RAM y, claro, ahora voy un poco justito. Me alegré ayer al comprobar que podía meter unas quince pantallas más o menos complejas en unos 800 bytes, pero aún así, entre replayer de PT3, músicas y buffers varios se me queda corta.
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #18 : 15 de Noviembre de 2006, 11:05:11 pm »

Citar
A ver que me aclare, porque estoy un poco espeso... Lo que me ha parecido entender es que la pila empieza en una dirección, llamemosle X, y crece hacia direcciones superiores a X. Por encima de ese X hay variables del sistema y demás, por lo que si la pila crece demasiado, las machaca y el invento se va a tomar por saco. ¿Correcto?

Jeje,.....no.....la pila crece hacia "abajo", es decir, hacia direcciones inferiores. Si defines SP como $F380, la primera posición ocupada de la pila será $F37E/$F37F, la siguiente $F37C/$F37D y así sucesivamente. Haciendo CLEAR ,&F380 impides que la pila de BASIC sobrepase esa dirección, eso te permite tener datos a partir de ahí y tener la garantía de que el intéprete no se los va a cargar, algo pareceido vendría a ser un LD SP,$F380.

Citar
Por otro lado, he entendido que la pila marca el inicio de la zona de trabajo. Es decir, que la RAM con direcciones inferiores a X puedo usarla sin temor ¿Correcto?

Tampoco, tampoco Smiley . La pila puede estar situada donde se quiera dentro de lo que se considere zona de trabajo (usualmente la página 3); pero lo suficientemente separada de la zona de código y la zona de datos de tu programa como para que no los machaque. Por supuesto tampoco sería bueno ni definirla dentro del area de variables de sistema (si usas la BIOS) o en una página distinta a la 3 si vas a hacer conmutación de páginas.

Me apropio de un gráfico del MSX THB y lo corrijo un poco :

Código:
0000 --------------------
     | |
     | BIOS |
     | |
4000 -------------------- 
     | BASIC |
     | Interpreter |
     | |
8000 --------------------  <-- (BOTTOM)     --+
     | |       |
     |   User area |      --+      |
     --------------------  <-- (HIMEM)        |      |32K
     | Disk work area |        --+     |16K   |
F380 --------------------   | 8K  |      |
     | System work area |   |     |      |
FFFF --------------------        --+   --+    --+

Ese sería el mapa visible desde el BASIC. Como desde un cartucho el interprete de BASIC desaparece y lo normal es que no activemos la unidad de disco tenemos (para una ROM de 16Kb):

Código:
0000 --------------------
     | |
     | BIOS |
     | |
4000 -------------------- 
     | |
     |   Tu programa |  
     | |        
8000 --------------------   
     | |  
     |   ROM page 2 |
     | |      
C000 --------------------   
     | |  
     |   RAM page 3 |
F380 --------------------  <-- (HIMEM)
     | System work area |
FFFF --------------------        

Esa zona de RAM comprendida entre la dirección $C000 y $F380 estaría disponible para todo, variables, tablas, bufferes.....y la pila. Como crece hacia arriba (geométricamente hablando Wink), es necesario ubicarla lo más baja posible (sigo hablando geométricamente Roll Eyes) y calcular un margen de seguridad entre el final de tus datos y el tamaño teórico que alcanzará la misma, que será pequeño si no se hacen guarreridas españolas como las que hacen los señores Robsy y Nerlaska Grin

Citar
Finalmente está el tema de modificar la dirección de inicio de la pila. Para modificarla ¿es suficiente con meter elvalor que quiera en el stack pointer al inicio de mi programa?

Nada más ni nada menos...

Citar
Gracias por la ayuda. La verdad es que, inocente de mi, había hecho mis cálculos suponiendo 16KB de RAM y, claro, ahora voy un poco justito. Me alegré ayer al comprobar que podía meter unas quince pantallas más o menos complejas en unos 800 bytes, pero aún así, entre replayer de PT3, músicas y buffers varios se me queda corta.

¿Y ya has probado a comprimir con el bitbuster o con el pletter?
« Última modificación: 15 de Noviembre de 2006, 11:08:12 pm por jltursan » En línea

Doom dee doom dee doom
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #19 : 16 de Noviembre de 2006, 04:22:53 am »

Y el PLETTER ese .. comprime mucho más que el BitBuster? o no se aprecia demasiado? alguién sabe dar datos precisos?

PD: MSXScript is near!!! Cheesy
En línea

MSX4EVER2GETHER
www.nerlaska.com
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #20 : 16 de Noviembre de 2006, 08:33:06 am »

Ese nerlaska, haciendo consultas de desarrollo MSXero a las 4.22 AM!!!!  :god: :god: :god:
En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #21 : 16 de Noviembre de 2006, 09:08:25 am »

A quien madruga .. Dios le ayuda ... Smiley .. llevo buenas sesiones de 4:00 AM .. desde que se me ocurrió meterme con lo de la DEV!!! señor!!
Pero que contento estoy!!!
En línea

MSX4EVER2GETHER
www.nerlaska.com
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #22 : 16 de Noviembre de 2006, 10:19:11 am »

¡Que moral!, no me extraña que a esas horas andes preguntando por esas rutinas, ¡¿no me digas que te estás empollando toda la BIOS?!

<Explicación a esas rutinas en el otro hilo>

Citar
Y el PLETTER ese .. comprime mucho más que el BitBuster? o no se aprecia demasiado? alguién sabe dar datos precisos?

Pues algo vi por ahí, era básicamente igual; pero habían proporcionado el código del compresor Wink




En línea

Doom dee doom dee doom
burguera
Visitante
« Respuesta #23 : 16 de Noviembre de 2006, 11:18:45 am »

Gracias por la info, jltursan. Algo espeso si estaba, pero ya lo he pillado. Como no uso disco, he situado la pila en F380 y esos bytes que he ganado me vienen de perlas.

Sobre la compresión, estoy usando bitbuster y abusando de la RAM para ir descomprimiendo cosas. Mi ROM aún no llega a las 16KB, y mi idea es meter un montón de pantallas, enemigos y demás en 16KB más y tener una ROM de 32KB, con lo que el descompresor bitbuster acabará echando humo  Cheesy
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #24 : 16 de Noviembre de 2006, 11:29:56 am »

Pues para el que quiera probar el Pletter, aquí va la dirección :

Página de XL2S

Lo podeis encontrar en la sección de Tools.
En línea

Doom dee doom dee doom
burguera
Visitante
« Respuesta #25 : 16 de Noviembre de 2006, 12:08:28 pm »

Hmmm... le he echado una ojeadilla rápida al pletter... son imaginaciones mías o el descompresor de pletter es mucho más corto que el de bitbuster??
En línea
Páginas: 1 [2]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!