-Estructura de la memoria

         -------------------------

 

.En el a�o 1980,  dotaron a los primeros sistemas de una memoria de 16 KB y planificaron  una necesidad m�xima de 640 Kb, adem�s, como el procesador que iba a gobernar  esa arquitectura, el 8086 y 8088 de Intel, ten�a un espacio de direcciones de  1MB, a�adieron a esa memoria principal un �rea RAM para video, otra para la  ROM-BIOS, etc. Y es hasta hoy d�a que estamos sufriendo esa falta de visi�n.

 

         Toda esta memoria se administra en base a segmentos de 64 Kb, esto es  debido a que el tipo de direccionamiento que escogieron para poder referenciar  todas las posiciones de memoria fue el direccionamiento segmentado. Pero para  �sto s� existe una explicaci�n m�s l�gica.

 

        La tecnolog�a de aquella �poca solo permit�a construir registros de 16 bits, (hoy en d�a vamos por 64 bits). Como la cantidad de memoria que puede ser direccionada depende directamente de la longitud de un registro, llamado registro de direcciones, con 16 bits se puede acceder a 2 a la 16=64 Kb. Para gobernar 1 Mb se necesitaba un registro de 20 bits, imposible para aquella �poca, de este modo, se opt� por utilizar dos registros de 16 bits, a uno de ellos (registro de segmento) lo desplazamos cuatro posiciones a la izquierda (o se multiplica por 16) y le sumamos el otro registro (registro de desplazamiento) tal y como est�, consiguiendo as� nuestra direcci�n de 20 posiciones.

 

        Como veis este tipo de direccionamiento es un poco lioso, y mucho m�s si lo comparamos con el direccionamiento lineal, donde se trata a la memoria como una 'l�nea' de direcciones todas consecutivas. Esta t�cnica se utiliza en otras arquitecturas, como la basada en los procesadores de la familia del 68000 de Motorola, (yo he trabajado con estos procesadores y creedme no hay ni punto de comparaci�n en ese aspecto y en muchos otros), esos procesadores son los que se utilizan para programar los videojuegos de verdad, (s�, s�, los de las m�quinas recreativas) y no me extra�a nada. :)

 

        Si tan mala es esa organizaci�n de la memoria, por qu� seguimos utiliz�ndola, si hoy en d�a disponemos de microprocesadores que direccionan hasta 4 Gb y registros de 64 bits, pues echarle la culpa a esas 4000 l�neas de c�digo que en su d�a fue el MS-DOS 1.0, el por qu� del auge que tuvo este sistema operativo es un tema que supongo todos conocer�is, por lo que no voy a seguir con la clase de historia..... :)

 

        Os muestro, para terminar con el apartado de la memoria, la organizaci�n en bloques de 64 Kb de la memoria del PC:

 

           Funci�n                                  Direcci�n         Bloques de 64 KB

           -------                    ---------         ----------------

       Memoria principal                     0000:0000 - 9000:FFFF         10

       RAM video (EGA/VGA)           A000:0000 - A000:FFFF          1

       RAM de video                           B000:0000 - B000:FFFF          1

       BIOS-ROM adic.                       C000:0000 - C000:FFFF         1

       Cartuchos-ROM                        D000:0000 - D000:FFFF         1

       Cartuchos-ROM                        E000:0000 - E000:FFFF          1

       BIOS-ROM                                 F000:0000 - F000:FFFF          1

 

 

   char far *video ;                                // puntero lejano

   video = (char far*) 0xB8000000 ;  // direcci�n de memoria de video color

   for (int i='A'; i<='Z'; i++)

      *(video+(i-'A')*2) = i ;                   //dibujo las letras de la A a la Z en pantalla

 

La direcci�n de video la debo multiplicar por dos ya que la primer posici�n corresponde a las letras y la segunda corresponde al color de las mismas.

  Entonces si queremos dibujar la letra A en la columna 5 de color azul (1) debemos escribir en la direccion * video + 10 = 65 (A) y a continuaci�n *video +11= 1 (azul).

La memoria se divide como sigue:

 

0   2   4   6   8  10

LCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLC

LCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLC

 

Las posiciones de memoria pares 0 2 4 etc. corresponden a una letra, el byte siguiente corresponde al color de dicha letra.

 

Para una mayor aclaraci�n estudiar el ejemplo memoria.c y el juego gusanos.c.