CursosCrea tus Juegos con 8BP

8BP: Arquitectura y uso de memoria en Amstrad CPC

Curso 8 Bits de Poder

4.9
(16)

Si finalmente te has decidido por aprender a programar una maquina de 1984, ahora veremos como funciona internamente el Amstrad CPC. Este apartado resultara muy útil para posteriormente comprender con mayor facilidad como la librería 8BP hace uso de la memoria.

arquitectura de el amstrad CPC 8BP
Arquitectura de el Amstrad CPC

El AMSTRAD CPC es una computadora basada en el microprocesador Z80, funcionando a 4MHz. Como se aprecia en su diagrama de arquitectura, tanto la CPU como la matriz lógica de video (llamada “gate array”) acceden a la memoria RAM, por lo que para poder “turnarse”, los accesos a la memoria desde la CPU son retrasados, dando como resultado una velocidad efectiva de 3.3Mhz, una mas que suficiente velocidad de proceso.

rutas avanzadas

Pero espera… ¿Es posible que no sepas nada de 8 Bits de Poder? Puedes leer el primer artículo del curso de programación en Amstrad CPC de 8BP.

Arquitectura del Amstrad CPC

La memoria de video representa lo que vemos en la pantalla. Forma parte de las 64KB de memoria RAM, en concreto, son las 16KB situadas en la zona superior de la memoria. La memoria se numera desde 0 hasta 65535 bytes. Pues bien, los 16KB comprendidos entre la dirección 49152 y 65535 es la memoria de video. En hexadecimal se representa como &C000 hasta &FFFF.

identificacion componentes CPC 464 8BP
Identificación de componentes en el Amstrad CPC 464

Esta memoria de video es accedida por el gate array 50 veces por segundo (50Hz) para poder mostrar la imagen a la pantalla. En ordenadores más antiguos (como el Sinclair ZX81) esta labor era encomendada al procesador, restándole potencia.

El Z80 posee un bus de direcciones de 16 bits, por lo que no es capaz de direccionar más de 64KB. Sin embargo, el Amstrad CPC posee 64kB RAM y 32kB ROM. Para poder direccionarlas, el es capaz de “conmutar” entre unos bancos y otros, de modo que, por ejemplo, si se invoca a un comando BASIC, se conmuta al banco de ROM donde se almacena el intérprete BASIC, que esta solapado con las 16KB de pantalla. Este mecanismo es sencillo y efectivo.

Además de la ROM que contiene el intérprete BASIC de 16KB situado en la zona de memoria alta, hay otras 16KB de ROM situadas en la memoria baja, donde se encuentran las rutinas del firmware (lo que podría considerarse el sistema operativo de esta máquina). En total (interprete BASIC y firmware) suman 32KB.

mapa de memoria del amstrad CPC 464 8BP
Mapa de memoria del Amstrad CPC 464

Como se aprecia en el mapa de memoria, de los 64KB de RAM, 16KB (desde &C000 hasta &FFFF) son la memoria de vídeo. Los programas en BASIC pueden ocupar desde la posición &40 (dirección 64) hasta la 42619, pues mas allá hay variables del sistema. Es decir, que se dispone de unas 42KB para BASIC, tal y como podemos comprobar al imprimir la variable del sistema HIMEM (abreviatura de “High Memory”).

print HIMEM
42619
ready

El funcionamiento del BASIC tiene en cuenta el almacenamiento del programa en direcciones crecientes desde la posición &40, mientras que una vez en ejecución, las variables que se declaran deben ocupar espacio para almacenar los valores que toman y puesto que no pueden ocupar la misma zona donde se almacena el programa, sencillamente se empiezan a almacenar en la dirección más alta posible, la 42619 y a medida que se usan más variables se consumen direcciones de memoria decrecientes. En el AMSTRAD CPC cada variable numérica de tipo entero ocupará 2 bytes de memoria.

Uso de la memoria

El código de un programa escrito en BASIC se almacena a partir de la dirección &40 (en decimal es 64) pero una vez que empieza a ejecutarse, los valores que van tomando las variables de programa se almacenan ocupando posiciones decrecientes desde la 42619, de modo que si un programa es grande, podrían llegar a “chocar” con el propio texto del programa, destruyendo parte del mismo. Esto normalmente no va a ocurrir, no te preocupes.

La librería se carga a partir de la dirección 24000, destinando la memoria a las funciones, el player de música, las canciones, el mapa del mundo y los dibujos, tal y como se muestra en el siguiente diagrama.

MAPA-MEMORIA-8BP.jpg
Mapa de memoria

Antes incluso de cargar la librería, deberás ejecutar el comando:

MEMORY 23999

Este comando permite limitar el espacio ocupado por el BASIC. De esta manera, las variables de BASIC empezaran a ocupar espacio en ejecución desde la dirección 23999 hacia abajo. Tus programas pueden disponer de 24 KB de memoria, aunque como las variables ocupan espacio, lo normal es que el tamaño máximo de tu programa sea inferior. No obstante, hablamos de una cantidad de memoria muy respetable. Te costará mucho hacer un juego de 24 KB, te lo aseguro.

En total 8BP deja 34KB libres para ti, Estas 34KB se dividen en 24KB (BASIC) +8.5KB (gráficos)+1.4KB (música). Si deseas mas gráficos puedes usar la zona de música e incluso parte de la zona BASIC para meter dibujos aunque debes hacerlo con cuidado y si es necesario deberás usar un comando MEMORY estableciendo otro limite menor.

En todo ordenador existe un área de memoria llamada “pila” o “stack”. Es una zona utilizada para almacenar la dirección de memoria donde se encuentra un programa antes de saltar a una rutina, de modo que pueda volver por donde estaba cuando dicha rutina termine. Se utiliza en bajo nivel (lenguaje ensamblador). En el Amstrad CPC es una zona ubicada en lo que hemos denominado área “system” de 8BP (área desde la dirección &C000 o en decimal, 49152 hasta la 42619) por o que la pila crece hacia direcciones mas bajas a medida que almacena direcciones y al retornar de una rutina vuelve a decrecer.

massive logics
massive logics !!!

Podríamos llegar a pensar que, si una rutina llama a otra y a su vez a otra y así sucesivamente, la pila crecería tanto que se saldría de la zona “system” e invadiría el banco de estrellas, pero no te preocupes, 8BP mantiene la pila bajo control.

En el próximo articulo veremos cuales son las herramientas y utilidades necesarias para adentrarnos en la aventura de programar juegos para Amstrad CPC. A continuación os dejamos el vídeo donde Jjaranda nos habla de los Primeros pasos con 8BP.

Por favor, acepta las cookies de YouTube para poder ver este video. Aceptando, accederás al contenido de YouTube, un servicio externo y gestionado por terceros.

Leer la privacidad de Youtube.

Aceptando este aviso, tu selección será guardara y la página se refrescará.

Hasta aquí hemos llegado por hoy con el curso de programación en Amstrad CPC de 8 bits de poder Si tienes alguna duda puedes escribir en comentarios y te contestaré lo antes posible.

Todos los recursos, como manuales, ejemplos y juegos compilados de este curso los puedes encontrar en el repositorio Github de 8BP.

Hasta la semana que viene amigos 😄

¿Te ha Resultado útil este artículo?

Ayúdanos a mejorar y danos tu opinión:

Mostrar más

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicaciones relacionadas

Mira también
Cerrar
Botón volver arriba