Az Unreal mód (néha Big Real Mode, 32 bit Real Mode, Flat Real Mode is) egy olyan módszer, amely akár 4 gigabájt memória megszólítását valósítja meg az Intel 80386 és újabb processzorok valós üzemmódjából 1 megabájt helyett. valós módban . A névvel ellentétben ez a módszer nem processzor mód .
Az 1990-es évek elején aktívan használták egyes MS-DOS alkalmazásokban , köztük néhány játékban (például az Ultima VII -ben [1] ). SMM kód [2] végrehajtásakor is használatos .
A mód népszerűsége miatt az Intelnek támogatnia kellett a következő processzorokban, bár ez nem dokumentált [3] .
Az MS-DOS kernel 16 bites processzor módban fut , valós vagy V86.
A 16 bites processzor valós módú címzés által megszabott 1 MiB címtérkorlát eltávolításához védett módra van szükség (16 MiB RAM elérhetővé válásával nagyobb mennyiség eléréséhez - akár 4 GiB, egy 32 bites védett módra van szükség, ami a 80386 processzorokban jelent meg).
Így a nagy mennyiségű memóriát igénylő programok DOS alatti fejlesztéséhez vagy védett módban kellett programozni, és használni kellett a DOS és DPMI bővítőt (ahogyan például a Doom írják ), vagy egy nem dokumentált processzorfunkciót kellett használni. A védett módú fejlesztéshez egy teljes eszközkészlet és egy erre kifejlesztett hibakereső használatára volt szükség , és általában egy adott DOS bővítőhöz volt társítva. Ezek a csomagok drágák voltak, nem olyan népszerűek, mint a szokásos DOS-os fejlesztői környezetek, ezért gyakran elhagyták őket. Egy nem dokumentált szolgáltatás lehetővé tette, hogy egy normál DOS-os fejlesztőkörnyezetben fejlesztett alkalmazásból, például a Borland C++- ból származó összes memóriát használjuk .
Ez a szolgáltatás abban áll, hogy rövid időre beléphet a 32 bites védett módba, betöltheti a 64K-ot meghaladó határértékekkel rendelkező szegmensleírókat , majd visszaléphet a 16 bites valós módba. Kilépéskor a 64K-t meghaladó határérték elmentésre kerül, a szegély nem nullázódik, amikor kilép magának. Ezt követően az assemblerben kifejezetten megírt 32 bites utasítások segítségével közvetlenül elérheti a gép teljes memóriáját, a „rossz” határvonalú szegmenshez képest.
Az ilyen címzés lehetősége közvetlenül következik a 80386 műszaki leírásból , amelyben erre két lehetőség jelent meg. Az első egy dokumentált átmenet védett módból valós módba a PE jelző törlésével a CR0 regiszterben (elődje, a 80286 figyelmen kívül hagyta a jelző törlésére tett kísérleteket a CR0 16 bites verziójában, az úgynevezett MSW-ben). A második az a lehetőség, hogy a szegmens mérete megegyezzen a teljes elérhető fizikai címtér méretével (annak köszönhetően, hogy a regiszterek bitszélessége megegyezik a címbusz bitszélességével).
Az „árnyékregiszterek” jelenléte a szegmensregiszterekhez tartozó szegmensek jellemzőinek gyorsítótárazására , és lehetővé teszi a védett módban beállított szegmensregiszter állapotának „emlékezését” még a valósra való visszakapcsolás után is. 80286, amelyben szintén használhatók (ezúttal valóban nem dokumentált módon) a teljes fizikai memória eléréséhez valós módból, de nem lineáris címzés formájában, mint a 80386-ban, hanem 64 KB-os „windows” szegmenseken keresztül.
Ez a módszer nem használható kód- vagy veremcímzéshez [4] , DOS-alapú többfeladatos környezetben és a Windows operációs rendszer „Virtual 8086” ablakában , beleértve az NTVDM -et is . Ráadásul az Unreal mód nem kompatibilis az EMM386 -tal – ez utóbbi úgy működik, hogy egyetlen V86 módú virtuális gépet hoz létre , és az összes DOS-t abba helyezi. A teljes értékű virtuális gépek, például a Virtual PC és a VMware Workstation általában problémamentesen működnek.