Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Mechanism  





2 Uses  





3 Enabling unreal mode  





4 Variants of unreal mode  



4.1  32-bit code  







5 See also  





6 References  





7 Further reading  














Unreal mode






Català
Deutsch
Español

Русский
Українська
 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 

(Redirected from Huge real mode)

Inx86 computing, unreal mode, also big real mode, flat real mode, or voodoo mode[1] is a variant of real mode, in which one or more segment descriptors has been loaded with non-standard values, like 32-bit limits allowing access to the entire memory. Contrary to its name, it is not a separate addressing mode that the x86 processors can operate in. It is used in the 80286 and later x86 processors.

Mechanism[edit]

For efficiency reasons, the 80286 and all later x86 processors use the base address, size and other attributes stored in their internal segment descriptor cache whenever computing effective memory addresses, even in real mode. Therefore, a modification of the internal segment descriptor allows altering some properties of segments in real mode, like the size of addressable memory. This technique became widely used and is supported by all Intel processors.[2]

A program in unreal mode can call 16-bit code programmed for real mode (BIOS, DOS kernel and drivers) without any thunking. This makes an unreal mode driver simpler than a DPMI driver. However unreal mode is incompatible with protected mode operating systems such as Windows 3.x/9x/NT and OS/2.

Big real mode has a 1 MiB code segment and a 4 GiB data segment.[3][4]

Uses[edit]

HIMEM.SYS uses this feature (both 286 and 386 variants) to address extended memory,[5] unless DOS is switched to run in a virtual 8086 mode that is incompatible with unreal mode.

One of the very few games—if not the only one—that used unreal mode was Ultima VII.[6][7]

Unreal mode is used by BIOS code as this is the initial mode of modern Intel processors.[8] Furthermore, the System Management Mode (SMM) in Intel 386SL and later processors places the processor in huge real mode.[9]

Some boot loaders (such as LILO) use the unreal mode to access up to 4 GiB of memory.

Enabling unreal mode[edit]

The 80286 microprocessor can be put into unreal mode only with help of the undocumented instruction LOADALL to modify the hidden segment base registers to point to the source or target memory location above 1 MiB.[5]

To put an 80386 or higher microprocessor into unreal mode, a program must first enter protected mode, find or create a flat descriptor in the GDTorLDT, load some of the data segment registers with the respective protected mode "selector", and then switch back to real mode. After returning to real mode, the processor will continue using the cached descriptors as established in protected mode, thus allowing access to 4 GiB of extended memory from real mode.[4]

Starting with the 80386, real mode programs can use the 32 bit registers with the Address Size Override Prefix.[10] This allows programs to use an address like DS:[EBX]. In normal real mode, a fault occurs if EBX exceeds 0xFFFF. In unreal mode, the access is allowed.

Variants of unreal mode[edit]

As described above, unreal mode usually involves using one or more data selectors to address data in memory more efficiently. This has been common practice and often referred to as "flat real mode"[11] or "big real mode".[12] The term "unreal mode" was introduced in 1991 by Rakesh K. Agarwal.[13]

32-bit code[edit]

The "huge real mode" (named in Ralf Brown's interrupt list) or "unREAL" mode (named by Tomasz Grysztar) adds the ability to run 32-bit code with a 4 GiB code segment. This is achieved by loading the code selector (CS) from a descriptor having the 32-bit attribute ("D" bit) set to 1. This mode allows for avoiding Operand Size Override prefixes normally required when using 32-bit addressing in 16-bit code segment, but is more difficult to set up due to interaction with interrupts.[14][4]

The use of a 32-bit CS was described in Agarwal's 1991 article introducing the term "unreal mode".[13] This mode is used in Grysztar's open-source FASM and Helix RM386, a commercial DOS Extender bundled by Logitech mouse drivers. Grysztar wrote a description of techniques used for entering this mode and handling interrupts in 2010. He also reports that most of the CPUs he tested supports this previously-unknown mode, with the exception of a CPU of unknown model ("I think it was manufactured by Cyrix") and in a later user report, the Bochs and DOSBox emulators.[15]

See also[edit]

References[edit]

  1. ^ Salihun, Darmawan (2013-09-16). "System Address Map Initialization in x86/x64 Architecture Part 1: PCI-Based Systems" (PDF). Retrieved 2019-08-19.
  • ^ Gutmann, Peter (2004) [2003]. Cryptographic Security Architecture: Design and Verification. Springer Science & Business Media. p. 58. ISBN 978-0-387-95387-8. Retrieved 2017-01-04. […] Unreal mode became so widely used […] that Intel was forced to support it in all later processors, although its presence was never documented […]
  • ^ "Modes graph". Archived from the original (JPG) on 2023-01-18.
  • ^ a b c "Unreal Mode". Archived from the original on 2017-01-03. Retrieved 2015-02-18.
  • ^ a b Necasek, Michal (2011-03-18). "HIMEM.SYS, unreal mode, and LOADALL". OS/2 Museum. Archived from the original on 2017-01-03. Retrieved 2017-01-03.
  • ^ Riiser, Haakon. "HIMEM.SYS and unreal/flat real mode, EMM386 and UMBs". Newsgroupcomp.os.msdos.programmer. Archived from the original on 2019-04-21. Retrieved 2017-10-14.
  • ^ "A Brief History of Unreal Mode | OS/2 Museum".
  • ^ Pelner, Jenny; Pelner, James. "Minimal Intel Architecture Boot Loader". Retrieved 2017-10-14.
  • ^ Domas, Christopher (2015). "The Memory Sinkhole: An architectural privilege escalation vulnerability" (PDF). Battelle Memorial Institute. Archived (PDF) from the original on 2017-01-05. Retrieved 2017-01-04. The processor loads an architecturally defined system state "Unreal" mode
  • ^ "X86-64 Instruction Coding". Archived from the original on 2017-01-03. Retrieved 2015-02-18.
  • ^ "Flat Real Mode". 1998-03-16. Archived from the original on 2015-08-18.
  • ^ Brown, Ralf D. "Interrupt List". INT 80 (AMI BIOS). Retrieved 2017-10-14.
  • ^ a b Necasek, Michal (2018-06-15). "A Brief History of Unreal Mode". OS/2 Museum.
  • ^ Brown, Ralf D. "Interrupt List". INT 78 (HugeRealMode Driver). Retrieved 2017-10-14.
  • ^ Grysztar, Tomasz (2010-09-17). "unREAL Mode". Retrieved 2017-10-14.
  • Further reading[edit]


    Retrieved from "https://en.wikipedia.org/w/index.php?title=Unreal_mode&oldid=1199221405"

    Categories: 
    X86 operating modes
    DOS memory management
    Hidden categories: 
    Articles with short description
    Short description matches Wikidata
    Use dmy dates from May 2019
    Use list-defined references from December 2021
    CS1 location test
     



    This page was last edited on 26 January 2024, at 13:36 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki