Pregunta sobre funcionamiento de la memoria del amstrad cpc

Aquí solo proyectos que incluyan el código fuente

Moderador: Fundadores

Reglas del Foro
Si no se incluyen los fuentes, se debe usar el foro de proyectos de software generales
Avatar de Usuario
Atomico
Demonio tercer orden
Demonio tercer orden
Mensajes: 702
Registrado: 26 May 2018, 04:22

Pregunta sobre funcionamiento de la memoria del amstrad cpc

Mensaje por Atomico »

Buenas.

Lo primero no se si este es el subforo correcto, si no es así que lo mueva el moderador.

A ver, tengo una duda sobre el funcionamiento de la memoria RAM/ROM del amstrad cpc....

Decidme si me equivoco....cuando encendemos el CPC la ROM baja y alta (una lleva el locomotiv básic y la otra el amsdos) se conmutan con los chips de memoria RAM, concretamente toman la posición del bloque mas alto de 16kb y del más bajo, después de eso se ejecuta el intérprete de básic que está en la ROM del básic, ahora sí por ejemplo introducimos una instrucción de básic o de amsdos el intérprete busca y ejecuta la rutina correspondiente que puede estar en cualquiera de las dos ROMs....entiendo que ahora los chips de memoria conmutan de nuevo conforme se van necesitando, quiero decir, si la rutina que está en la ROM alta necesita escribir algo en la pantalla tendrá que volver a poner en su sitio la RAM alta para escribir en ella, no? Teniendo en cuenta que la interpretación de instrucciones es lineal imagino que una vez ejecutado el evento en la RAM se vuelve a conmutar a la ROM y se pasa a la siguiente instrucción, para luego volver a conmutar y así sucesivamente....osea que se conmutaria muchísimas veces en muy poco tiempo ....funciona así?

Otra pregunta es, ...que es lo que hay grabado en la RAM por debajo de la posición &40 y para que sirve? Que pasa si se borra?

Un saludo.
Avatar de Usuario
dandare
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3718
Registrado: 09 Feb 2016, 15:09
Ubicación: I Register
Been thanked: 6 times

Re: Pregunta sobre funcionamiento de la memoria del amstrad cpc

Mensaje por dandare »

Se parece bastante poco a lo que planteas.
La rom baja es el firm y la alta puede conmutar entre el Basic y el AMSDOS si es un sistema con disco. En un 464 no hay conmutación, siempre es el Basic.

Independientemente de que haya cualquier rom o no, las escrituras siempre pasan a memoria RAM.

Te recomiendo que leas libros como el que te enlazo para entender el funcionamiento:

https://www.amstradcpc.es/lib/exe/fetch ... to_ocr.pdf
Imagen
Imagen
Avatar de Usuario
Atomico
Demonio tercer orden
Demonio tercer orden
Mensajes: 702
Registrado: 26 May 2018, 04:22

Re: Pregunta sobre funcionamiento de la memoria del amstrad cpc

Mensaje por Atomico »

dandare escribió:Se parece bastante poco a lo que planteas.
La rom baja es el firm y la alta puede conmutar entre el Basic y el AMSDOS si es un sistema con disco. En un 464 no hay conmutación, siempre es el Basic.

Independientemente de que haya cualquier rom o no, las escrituras siempre pasan a memoria RAM.

Te recomiendo que leas libros como el que te enlazo para entender el funcionamiento:

https://www.amstradcpc.es/lib/exe/fetch ... to_ocr.pdf
Pero por que se dice que la ROM superior ocupa las direcciónes de la memoria de video y la inferior las direcciones de los primeros 16kb? No son direcciones de la RAM?
Avatar de Usuario
Atomico
Demonio tercer orden
Demonio tercer orden
Mensajes: 702
Registrado: 26 May 2018, 04:22

Re: Pregunta sobre funcionamiento de la memoria del amstrad cpc

Mensaje por Atomico »

Esto es lo que pone en auamstrad.es, creo que básicamente es lo que yo he puesto al principio:

https://auamstrad.es/cursos-tutoriales/ ... y-memoria/

"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."
Avatar de Usuario
mad3001 !Atari
Demonio segundo orden
Demonio segundo orden
Mensajes: 1921
Registrado: 25 Nov 2015, 00:15
Ubicación: Mostoles(Madrid)
Has thanked: 81 times
Been thanked: 113 times

Re: Pregunta sobre funcionamiento de la memoria del amstrad cpc

Mensaje por mad3001 »

Lo que te han dicho.... la RAM siempre está por debajo, puedes "solapar" el firmware (en algunos sitios lo llaman system ROM, o BIOS) como ROM (solo lectura, pero las escrituras siguen yendo a la RAM) en la zona baja #0000-#3FFF.

Lo mismo sucede con la parte alta de RAM #C000-FFFF.... allí está la RAM de video por lo que cualquier escritura "aterriza" en la RAM, pero puedes "solapar" la ROM BASIC (ROM 00) que tienen todos los modelos, o si es un 6128 alternar con la ROM AMSDOS (ROM 07)... pero solo una de ellas cada vez...

Tambien si quieres puedes tener el modo solo RAM, en ese caso no lees del firmware ni de BASIC ni de AMSDOS...
cpc464_memory_map.jpg
En el caso del 6128 hay varias configuraciones de RAM que alteran la forma en que aparecen los 8 bancos de RAM (16kx8) en cada zona:
rambanks.jpg
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Volviendo a los origenes... programa en assembler
Avatar de Usuario
Atomico
Demonio tercer orden
Demonio tercer orden
Mensajes: 702
Registrado: 26 May 2018, 04:22

Re: Pregunta sobre funcionamiento de la memoria del amstrad cpc

Mensaje por Atomico »

mad3001 escribió:Lo que te han dicho.... la RAM siempre está por debajo, puedes "solapar" el firmware (en algunos sitios lo llaman system ROM, o BIOS) como ROM (solo lectura, pero las escrituras siguen yendo a la RAM) en la zona baja #0000-#3FFF.

Lo mismo sucede con la parte alta de RAM #C000-FFFF.... allí está la RAM de video por lo que cualquier escritura "aterriza" en la RAM, pero puedes "solapar" la ROM BASIC (ROM 00) que tienen todos los modelos, o si es un 6128 alternar con la ROM AMSDOS (ROM 07)... pero solo una de ellas cada vez...

Tambien si quieres puedes tener el modo solo RAM, en ese caso no lees del firmware ni de BASIC ni de AMSDOS...
cpc464_memory_map.jpg
En el caso del 6128 hay varias configuraciones de RAM que alteran la forma en que aparecen los 8 bancos de RAM (16kx8) en cada zona:
rambanks.jpg
Como se puede leer la memoria de la ROM? Por ejemplo, enciendo el ordenador y quiero ver lo que hay en el primer byte de la ROM alta.
Avatar de Usuario
Rebobinando
Demonio tercer orden
Demonio tercer orden
Mensajes: 994
Registrado: 14 Sep 2018, 23:45
Ubicación: Castelldefels y puntualmente Zaragoza
Has thanked: 339 times
Been thanked: 323 times

Re: Pregunta sobre funcionamiento de la memoria del amstrad cpc

Mensaje por Rebobinando »

Atomico escribió: 02 May 2020, 21:15
mad3001 escribió:Lo que te han dicho.... la RAM siempre está por debajo, puedes "solapar" el firmware (en algunos sitios lo llaman system ROM, o BIOS) como ROM (solo lectura, pero las escrituras siguen yendo a la RAM) en la zona baja #0000-#3FFF.

Lo mismo sucede con la parte alta de RAM #C000-FFFF.... allí está la RAM de video por lo que cualquier escritura "aterriza" en la RAM, pero puedes "solapar" la ROM BASIC (ROM 00) que tienen todos los modelos, o si es un 6128 alternar con la ROM AMSDOS (ROM 07)... pero solo una de ellas cada vez...

Tambien si quieres puedes tener el modo solo RAM, en ese caso no lees del firmware ni de BASIC ni de AMSDOS...
cpc464_memory_map.jpg
En el caso del 6128 hay varias configuraciones de RAM que alteran la forma en que aparecen los 8 bancos de RAM (16kx8) en cada zona:
rambanks.jpg
Como se puede leer la memoria de la ROM? Por ejemplo, enciendo el ordenador y quiero ver lo que hay en el primer byte de la ROM alta.
Para poder leer algún byte de alguna de las ROMs, es necesario habilitarlas antes (la ROM que se quiera acceder). Una vez habilitada, podrás leer los bytes que se necesiten. Si intentas cambiar algún byte en ellas, el CPC cambiará los bytes correspondientes de la RAM (como si no estuviera viendo la ROM en ese momento). Si se necesita leer un byte de la RAM sobre la que está solapada la ROM, es necesario deshabilatar la ROM.

En este libro - Programación Avanzada del Amstrad (Don Thomason) - en las páginas de la 14 a la 20, hay detalle de como funciona este proceso y también encontrarás una pequeña rutina (pág 17-18) para leer contenidos de ROM.

En cuanto al área &0000 - &0040, en las páginas 39-44 de ese mismo libro viene una explicación bastante detallada. A mi me costaba un dolor entenderlo, sobretodo en los 80 :), pero viene a ser un sistema de gestión muy escalable entre diferentes modelos de CPCs.
Firma, lo que se dice firma, no tengo. Si eso, lo voy pensando... :|, pero si te apetece, esta es mi cuenta de Github por si encuentras algo que te pueda llamar la atención.
Avatar de Usuario
dandare
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3718
Registrado: 09 Feb 2016, 15:09
Ubicación: I Register
Been thanked: 6 times

Re: Pregunta sobre funcionamiento de la memoria del amstrad cpc

Mensaje por dandare »

Entender el funcionamiento del CPC requiere tener nociones, aunque sean básicas de arquitectura y organización de computadores y de sistemas operativos.

Para empezar, estás mezclando las dos cosas.

1) la arquitectura, aunque no fue la idea inicial del diseño del CPC, es Von Neumann con entrada/salida aislada. (Originalmente la E/S iba a ser mapeada en memoria, de ahí la forma tan peculiar que tiene de acceder a los dispositivos)

El Z80 direcciona 16 bits de memoria, lo que le da un rango útil de 64KB y otros 16 bits de direcciones de entrada salida. Dicho esto, mediante hardware externo, se hace que ese espacio pueda estar ocupado por segmentos distintos tanto de la ram como de la rom en momentos diferentes. En particular, esa ocupación es distinta para lectura, que puede ser ram o rom y para escritura, que siempre es ram.
Asunto aparte es el dispositivo de E/S que muestra el contenido de vídeo. Este no tiene nada que ver con la CPU ni con la visión que tenga ésta de la memoria. El crtc accede siempre a un segmento de los 64 primeros KB de ram para leer el vídeo, lo hace deteniendo al Z80, en los famosos wait states del CPC.

Por tanto, desde un punto de vista HW, para leer algo, habrá que mandar la instrucción IO al Gate Array, con un OUT, para que organice el mapa de memoria a nuestro gusto y, luego, leer.

2) Ahora, el CPC no solo es HW. Tiene un sistema operativo que gestiona la entrada salida, en particular el disco si lo hay mediante una extensión (AMSDOS) y el BASIC.

Ese sistema operativo utiliza parte de la memoria para guardar variables y estados. O para tener tablas de salto a funciones, o gestión de interrupciones... por eso, ciertas direcciones de RAM no están disponibles para programas BASIC.

Mi recomendación, como profesor universitario de arquitectura y organización de computadores, es que empieces por la base y no vayas directamente a la respuesta de un asunto que, sin tener nociones del fondo, será un acto de fe para ti.

Hay muchos libros buenos del tema, desde los Stallings o Tanenbaum hasta otros menos académicos. En particular, siempre recomiendo el libro de “fundamentos de computadores” de Román Hermida, catedrático del departamento de arquitectura de computadores y automática de la Universidad Complutense de Madrid

Ese libro recoge las bases de representación de información, electrónica digital combinacional y secuencial, organización y estructura de computadores, y arquitectura de computadores. Incluyendo lenguaje ensamblador, memorias caché o multiprocesamiento.

Es tu elección, pero en mi opinión, meterte en este mundo sin las herramientas adecuadas es muy posible que sea un conjunto de frustraciones, medias verdades, actos de fe y premisas equivocadas.
Imagen
Imagen
Avatar de Usuario
Atomico
Demonio tercer orden
Demonio tercer orden
Mensajes: 702
Registrado: 26 May 2018, 04:22

Re: Pregunta sobre funcionamiento de la memoria del amstrad cpc

Mensaje por Atomico »

Rebobinando escribió:
Atomico escribió: 02 May 2020, 21:15
mad3001 escribió:Lo que te han dicho.... la RAM siempre está por debajo, puedes "solapar" el firmware (en algunos sitios lo llaman system ROM, o BIOS) como ROM (solo lectura, pero las escrituras siguen yendo a la RAM) en la zona baja #0000-#3FFF.

Lo mismo sucede con la parte alta de RAM #C000-FFFF.... allí está la RAM de video por lo que cualquier escritura "aterriza" en la RAM, pero puedes "solapar" la ROM BASIC (ROM 00) que tienen todos los modelos, o si es un 6128 alternar con la ROM AMSDOS (ROM 07)... pero solo una de ellas cada vez...

Tambien si quieres puedes tener el modo solo RAM, en ese caso no lees del firmware ni de BASIC ni de AMSDOS...
cpc464_memory_map.jpg
En el caso del 6128 hay varias configuraciones de RAM que alteran la forma en que aparecen los 8 bancos de RAM (16kx8) en cada zona:
rambanks.jpg
Como se puede leer la memoria de la ROM? Por ejemplo, enciendo el ordenador y quiero ver lo que hay en el primer byte de la ROM alta.
Para poder leer algún byte de alguna de las ROMs, es necesario habilitarlas antes (la ROM que se quiera acceder). Una vez habilitada, podrás leer los bytes que se necesiten. Si intentas cambiar algún byte en ellas, el CPC cambiará los bytes correspondientes de la RAM (como si no estuviera viendo la ROM en ese momento). Si se necesita leer un byte de la RAM sobre la que está solapada la ROM, es necesario deshabilatar la ROM.

En este libro - Programación Avanzada del Amstrad (Don Thomason) - en las páginas de la 14 a la 20, hay detalle de como funciona este proceso y también encontrarás una pequeña rutina (pág 17-18) para leer contenidos de ROM.

En cuanto al área &0000 - &0040, en las páginas 39-44 de ese mismo libro viene una explicación bastante detallada. A mi me costaba un dolor entenderlo, sobretodo en los 80 :), pero viene a ser un sistema de gestión muy escalable entre diferentes modelos de CPCs.
Uff, buenisima info y buenísimo el libro, era justo lo que buscaba, claro y conciso, gracias Rebobinando.
Avatar de Usuario
Atomico
Demonio tercer orden
Demonio tercer orden
Mensajes: 702
Registrado: 26 May 2018, 04:22

Re: Pregunta sobre funcionamiento de la memoria del amstrad cpc

Mensaje por Atomico »

dandare escribió:Entender el funcionamiento del CPC requiere tener nociones, aunque sean básicas de arquitectura y organización de computadores y de sistemas operativos.

Para empezar, estás mezclando las dos cosas.

1) la arquitectura, aunque no fue la idea inicial del diseño del CPC, es Von Neumann con entrada/salida aislada. (Originalmente la E/S iba a ser mapeada en memoria, de ahí la forma tan peculiar que tiene de acceder a los dispositivos)

El Z80 direcciona 16 bits de memoria, lo que le da un rango útil de 64KB y otros 16 bits de direcciones de entrada salida. Dicho esto, mediante hardware externo, se hace que ese espacio pueda estar ocupado por segmentos distintos tanto de la ram como de la rom en momentos diferentes. En particular, esa ocupación es distinta para lectura, que puede ser ram o rom y para escritura, que siempre es ram.
Asunto aparte es el dispositivo de E/S que muestra el contenido de vídeo. Este no tiene nada que ver con la CPU ni con la visión que tenga ésta de la memoria. El crtc accede siempre a un segmento de los 64 primeros KB de ram para leer el vídeo, lo hace deteniendo al Z80, en los famosos wait states del CPC.

Por tanto, desde un punto de vista HW, para leer algo, habrá que mandar la instrucción IO al Gate Array, con un OUT, para que organice el mapa de memoria a nuestro gusto y, luego, leer.

2) Ahora, el CPC no solo es HW. Tiene un sistema operativo que gestiona la entrada salida, en particular el disco si lo hay mediante una extensión (AMSDOS) y el BASIC.

Ese sistema operativo utiliza parte de la memoria para guardar variables y estados. O para tener tablas de salto a funciones, o gestión de interrupciones... por eso, ciertas direcciones de RAM no están disponibles para programas BASIC.

Mi recomendación, como profesor universitario de arquitectura y organización de computadores, es que empieces por la base y no vayas directamente a la respuesta de un asunto que, sin tener nociones del fondo, será un acto de fe para ti.

Hay muchos libros buenos del tema, desde los Stallings o Tanenbaum hasta otros menos académicos. En particular, siempre recomiendo el libro de “fundamentos de computadores” de Román Hermida, catedrático del departamento de arquitectura de computadores y automática de la Universidad Complutense de Madrid

Ese libro recoge las bases de representación de información, electrónica digital combinacional y secuencial, organización y estructura de computadores, y arquitectura de computadores. Incluyendo lenguaje ensamblador, memorias caché o multiprocesamiento.

Es tu elección, pero en mi opinión, meterte en este mundo sin las herramientas adecuadas es muy posible que sea un conjunto de frustraciones, medias verdades, actos de fe y premisas equivocadas.
Gracias por el esfuerzo en explicarmelo dandare, aunque en principio es una explicación demasiado técnica para mis conocimientos , yo soy mas de explicaciones en plan "si tiras de la palanca la trocola gira a la izquierda", y tal, pero tienes razón hay que tener una base "concetual", que diría aquel,...yo hasta ahora he hecho programillas en básic, C, PHP y algo de ensamblador de z80, pero a nivel de hobby autodidacta así que como es lógico tengo lagunas, sobre todo en el funcionamiento del hardware, el software con entender algunos conceptos viene a ser todo más o menos lo mismo, pero bueno más que nada quiero tener una visión global de como funciona el CPC, aunque sea una visión superficial.

Le echaré un ojo al libro que me has recomendado.

Pf: Todo esto viene a cuento por qué estoy preparando un tutorial de ensamblador (otro más) a nivel practico para gente que viene del Basic y quiero tener claro como funciona la memoria.



Responder

Volver a “Proyectos de software abiertos”