Unreal mode (někdy také Big Real Mode, 32 bit Real Mode, Flat Real Mode ) je metoda, která implementuje možnost adresovat až 4 gigabajty paměti z reálného režimu procesoru Intel 80386 a vyšší místo dostupného 1 megabajtu. v reálném režimu . Na rozdíl od názvu tato metoda není režim procesoru .
Aktivně se používal v některých aplikacích MS-DOS na počátku 90. let, včetně některých her (například v Ultima VII [1] ). Používá se také při provádění kódu SMM [2] .
Vzhledem k popularitě režimu jej Intel musel podporovat v následujících procesorech, ačkoli zůstal nezdokumentován [3] .
Jádro MS-DOS běží v režimu 16bitového procesoru , reálném nebo V86.
Chcete-li odstranit limit 1 MiB adresního prostoru (vynucený adresováním v reálném režimu 16bitového procesoru ), je zapotřebí chráněný režim (se zpřístupněním 16 MiB paměti RAM, abyste získali větší množství - až 4 GiB, 32bitové chráněné je potřeba režim, který se objevil u procesorů 80386).
Pro vývoj programů pod DOSem, které vyžadují velké množství paměti, bylo tedy nutné buď programovat v chráněném režimu a použít DOS a DPMI extender (jak je například napsán Doom ), nebo použít nezdokumentovanou vlastnost procesoru. Vývoj chráněného režimu vyžadoval použití celé sady nástrojů a debuggeru určeného k tomuto účelu a obvykle spojeného se specifickým DOSovým extenderem. Tyto balíčky byly drahé, nebyly tak populární jako běžná vývojová prostředí DOS, a proto byly často opuštěny. Nedokumentovaná funkce umožňovala použití veškeré paměti z aplikace vyvinuté v normálním vývojovém prostředí DOS, jako je Borland C++ .
Tato funkce spočívá ve skutečnosti, že můžete krátce vstoupit do 32bitového chráněného režimu, načíst tam deskriptory segmentů s hranicemi přesahujícími 64 kB a poté se vrátit zpět do 16bitového reálného režimu. Při výstupu se uloží hodnota hranice přesahující 64K, při samotném výstupu se hranice neresetuje. Poté, pomocí 32bitových instrukcí explicitně napsaných v assembleru , můžete přistupovat přímo k celé paměti stroje vzhledem k segmentu s „špatnou“ hranicí.
Možnost takového adresování přímo vyplývá z technické specifikace 80386 , ve které se objevily dvě možnosti. První je zdokumentovaný přechod z chráněného režimu do reálného režimu vymazáním příznaku PE v registru CR0 (jeho předchůdce 80286 ignoroval pokusy o vymazání tohoto příznaku ve své 16bitové verzi CR0, nazývané MSW). Druhým je možnost nastavit velikost segmentu rovnou velikosti celého dostupného fyzického adresního prostoru (kvůli tomu, že bitová šířka registrů je rovna bitové šířce adresové sběrnice).
Přítomnost „stínových registrů “ pro ukládání charakteristik segmentů spojených s registry segmentů do mezipaměti a umožňující „zapamatovat si“ stav registru segmentů, který byl nastaven v chráněném režimu, i po přepnutí zpět do reálného režimu, byla zdokumentována pro 80286, ve kterém je lze také použít (tentokrát opravdu nezdokumentovaným způsobem) pro přístup k veškeré fyzické paměti z reálného režimu, nikoli však formou lineárního adresování jako u 80386, ale prostřednictvím segmentů „oken“ o velikosti 64 KB.
Tuto metodu nelze použít pro adresování kódu nebo zásobníku [4] , v žádném prostředí multitaskingu založeném na DOSu a v okně "Virtual 8086" operačního systému Windows , včetně NTVDM . Navíc režim Unreal není kompatibilní s EMM386 – ten funguje tak, že vytvoří jeden virtuální stroj v režimu V86 a vloží do něj celý DOS. Plnohodnotné virtuální stroje, jako jsou Virtual PC a VMware Workstation , obvykle fungují bez problémů.