MÁXIMA MEMORIA BAJO WINDOWS 95 / 98
----------------------------------------------------------------


Este articulillo va dirigido a aquellos que desean la "máxima" memoria, e incluso memoria superior en las ventanas DOS bajo Windows.

Es conveniente haberse leído los artñiculos míos anteriores sobre la memoria MsDOS para entender perfectamente este artículo.

RECORDANDO
------------------------
Recordando los dos artículos míos anteriores, ya sabemos como conseguir memoria "extendida" (HIMEM.SYS), "expandida" y marco de página (EMM386.EXE), y por tando y con las directrices DOS=UMB,HIGH poder utilizar el máximo de memoria en DOS.

Pero... curiosamente cuando entramos en Windows y damos el comando mem /d/p vemos que no tenemos memoria "alta" (UMBs) disponibles.

Recordemos un poco el mapa de memoria "física" del MSDOS. Hasta la dirección 'A000' de memoria son los primeros 640 Ks. Mejor gráficamente:

0000
.....
9FFF     640 Ks
A000     Memoria gráfica de video -64 Ks- marco de mapeo al video
B000     Memoria para pantallas de texto (monocromo) -32 Ks-
B800     Memoria para pantallas de texto (color) -32 Ks-
C000     ROM BIOS de la tarjeta de video -32 Ks-
C800     LIBRE ¿?    -96 Ks-  !!!!!!
E000     Marco de página memoria EMS (si tenemos EMM386)
F000     ROM BIOS de la placa madre
FFFF     64 Ks más donde el dos carga parte de él (DOS=HIGH)

Bien, lo anterior es una configuracion estandard con EMM386 y memoria EMS y la instrucción DOS=HIGH,UMB

(si no se ha entendido hasta aquí, por favor repasad los artículos anteriores).

Matizo que es una configuración "standard". Es decir, si no tenemos otras tarjetas (SCSI, de red, etc...) que tengan ROM BIOS. Si tuviésemos esas tarjetas, la dirección libre en vez de empezar en C800, empezaría más tarde y tendríamos menos espacio libre. Ya veremos como puede saberse esto.

Además, en le EMM386, podemos incluirle la linea I=B000-B7FF para poder utilizar la memoria de los antiguos adaptadores gráficos monocromos (otros 32 Kbs). **** ATENCION: esto únicamente si no utilizamos "multimonitor". Si lo utilizásemos, NO SE PUEDE recuperar dicha memoria.

Entonces en una configuración normal, tendríamos: 96 Ks + 32 Ks = 128 Ks libre por la zona alta.

Y ahora la pregunta ¿cómo utilizarlos?

UTILIZACION DE MEMORIA SUPERIOR
-------------------------------------------------------------
Bien, la primera parte sencilla. Si a continuación de la linea del config que carga el EMM386.EXE, ya colocamos las instruccions "devicehigh" (en vez de device) y en el autoexec, cargamos los programas con "lh" (loadhigh) por delante de ellos, entonces estos programas se cargarán en memoria UMB, igualmente, el propio MSDOS, en cuanto puede, "mete" allí su zona de buffers, files, etc...... (por eso, realmente no "vemos" los 128 Ks libre nunca, porque el propio MSDOS, aunque no hayamos cargado nada, en cuanto se encuentre DOS=UMB, ya carga allí lo que puede).

Pero.... muy bien, ahora ya hemos terminado de cargar el DOS y empieza Windows a cargarse.

Si arrancamos en "sólo símbolo del sistema" veremos con un mem /d/p la memoria superior que tenemos "antes" de entrar Windows. Y además la memoria libre que tenemos bajo MSDOS.

(Recordad, que no haría falta nada más que : en el config, las líneas devicehigh= display.sys.... y el Country. Y en el autoexec, las dos líneas mode *no hay que ponerlas "lh" a estas. Y la linea keybsp con "lh". Con esto
es suficiente para Windows. El resto de cosas, como ya hablaremos más adelante: NO HACEN FALTA, se pueden quitar y ya veríamos como podemos recargarlas si hiciesen falta a posteriori para entrar en modo MSDOS)

Retomando lo anterior, sabemos la memoria libre, pero cuando entramos en Windows y damos el mismo comando, vemos que en la zona alta de memoria no nos queda nada....¿?

RECUPERACION DE LA MEMORIA ALTA BAJO WINDOWS
-----------------------------------------------------------------------------------------
La memoria anterior se puede recuperar. Únicamente debemos añadir en la sección [386enh] del System.ini (que está en el directorio de Windows), la línea:

LocalLoadHigh=On

Y reiniciar. Puede..... que el sistema no nos arranque, enviando un mensaje de "imposible, o error al cargar el DOSMRG. Programa detenido".

En este caso, podemos hacer dos cosas:

1) Eliminar la linea anterior y resignarnos a no tener memoria superior.

2) Más elegante: buscar al culpable y reordenar la carga. El posible culpable es que Windows, necesita "al menos" 4 Kbs en cada región de memoria superior (UMB). Pensemos que en la configuración de memoria descrita anteriormente, tenemos dos regiones (de B000-B7FF y C800-DFFF). Antes de entrar a Windows, debemos "ver" en MSDOS puro al menos 4 Ks libres en cada una de ellas.

El punto 2) es muy sencillo en la configuración que he descrito antes. Pero en máquinas con varias ROM BIOS (scsi, red, etc...) puede ser un poquillo más complicado, y a veces, por ejemplo, no cargar el keyb en alta a
propósito, para dejar esos 4 Ks. O bien cargarlo (forzado) en otra región. Este último tema, lo dejo para un artículo mas profundo sobre el tema.


*** Me queda pendiente: (que intentaré poner esta tarde en este mismo hilo), el hacerme un programita en ensamblador y enviaroslo, que os informe de las ROM BIOS de la máquina vuestra, donde empiezan y cuánto ocupan.

Con la informacion de ese programa, puedo realizar configuraciones "a medida" para cualquiera de vosotros que lo necesite.

Un saludo,


--
Jose Manuel Tella Llop
MS MVP - DTS
jmtella@compuserve.com

10-abril-2001