El modo irreal (a veces también Big Real Mode, 32 bit Real Mode, Flat Real Mode ) es un método que implementa la capacidad de direccionar hasta 4 gigabytes de memoria del modo real del procesador Intel 80386 y superior , en lugar de 1 megabyte disponible en modo real . Contrariamente al nombre, este método no es un modo de procesador .
Se usó activamente en algunas aplicaciones de MS-DOS a principios de la década de 1990, incluidos algunos juegos (por ejemplo, en Ultima VII [1] ). También se usa al ejecutar código SMM [2] .
Debido a la popularidad del modo, Intel tuvo que admitirlo en los procesadores posteriores, aunque permaneció sin documentar [3] .
El kernel de MS-DOS se ejecuta en modo de procesador de 16 bits , real o V86.
Para eliminar el límite de espacio de direcciones de 1 MiB (impuesto por el direccionamiento en modo real del procesador de 16 bits ), se necesita un modo protegido (con 16 MiB de RAM disponibles, para obtener una cantidad mayor, hasta 4 GiB, un modo protegido de 32 bits). se necesita el modo, que apareció en los procesadores 80386).
Por lo tanto, para desarrollar programas bajo DOS que requieren una gran cantidad de memoria, uno tenía que programar en modo protegido y usar el extensor DOS y DPMI (como se escribe Doom , por ejemplo ), o usar una función de procesador no documentada. El desarrollo del modo protegido requería el uso de un conjunto de herramientas completo y un depurador diseñado para esto, y generalmente asociado con un extensor de DOS específico. Estos paquetes eran costosos, no tan populares como los entornos de desarrollo regulares de DOS y, por lo tanto, a menudo se abandonaban. Una función no documentada permitía utilizar toda la memoria desde una aplicación desarrollada en un entorno de desarrollo normal de DOS, como Borland C++ .
Esta característica consiste en el hecho de que puede ingresar brevemente al modo protegido de 32 bits, cargar descriptores de segmento allí con límites superiores a 64K y luego volver al modo real de 16 bits. Al salir, se guarda el valor del borde superior a 64K, el borde no se restablece al salir. Después de eso, utilizando instrucciones de 32 bits explícitamente escritas en ensamblador , puede acceder directamente a toda la memoria de la máquina, en relación con el segmento con el límite "incorrecto".
La posibilidad de dicho direccionamiento se deriva directamente de las especificaciones técnicas 80386 , en las que han aparecido dos posibilidades para ello. El primero es una transición documentada del modo protegido al modo real al borrar el indicador PE en el registro CR0 (su predecesor, 80286 , ignoró los intentos de borrar este indicador en su versión de CR0 de 16 bits, llamada MSW). El segundo es la capacidad de establecer el tamaño del segmento igual al tamaño de todo el espacio físico de direcciones disponible (debido al hecho de que el ancho de bits de los registros es igual al ancho de bits del bus de direcciones).
Se documentó para _ _ 80286, en el que también se pueden utilizar (esta vez de forma realmente indocumentada) para acceder a toda la memoria física desde el modo real, pero no en forma de direccionamiento lineal, como en 80386, sino a través de segmentos de "ventanas" de 64 KB.
Este método no se puede utilizar para el direccionamiento de código o pila [4] , en ningún entorno multitarea basado en DOS y en la ventana "Virtual 8086" del sistema operativo Windows , incluido NTVDM . Además, el modo Unreal no es compatible con EMM386 ; este último funciona creando una sola máquina virtual en modo V86 y colocando todo DOS en ella. Las máquinas virtuales completas, como Virtual PC y VMware Workstation , generalmente funcionan sin problemas.