Flat real mode was a hack mode on old 32bit intel systems to enable flat memory mapping with 16bit code. You'd jump into protected mode, map the full 4gig address space flat, then jump back into 16bit real mode without remapping that memory space.
Afterwards you could access all your memory in a flat address space rather than using 64K segment:offsets. You had to prefix your memory access instructions with a 0x66 byte though. Also, you had to write your own runtime library.
This is the exact opposite, Giving you all the registers, but not the memory address space.
I'm curious about what you're thinking about when you say "write your own runtime library" - wasn't the whole purpose of this "unreal mode" and staying in 16bit such that you would still have access to DOS and its API? (compared to switching to full 32bit mode, where DOS went out the window unless you implemented or embedded a "DOS-extender"?).
Yes you're correct about purpose, but many of the runtime functions would then be limited to the old 64K limit.
I rewrote all the string handling, memory management, etc functions in the Borland pascal and c++ runtimes to let me use all the memory without worrying about segments/offsets.
So, you got the DOS functions, but you also got printf, port io, memory functions, a bunch of stuff I can't remember, etc.
Basically you got the primary benefits (for the needs of the time) of pmode - flat memory, without most of the pain. Seems like the same situation here - you get all the new registers, but without the pointer overhead.
EDIT: One point to note is that your Code, Data and Heap segments all stayed 64K. This bit me in the ass once when I was presenting. Two bits of code had been tested separately when brought together went over the 64K code and heap limits. That was embarrassing.
Flat real mode was a hack mode on old 32bit intel systems to enable flat memory mapping with 16bit code. You'd jump into protected mode, map the full 4gig address space flat, then jump back into 16bit real mode without remapping that memory space.
Afterwards you could access all your memory in a flat address space rather than using 64K segment:offsets. You had to prefix your memory access instructions with a 0x66 byte though. Also, you had to write your own runtime library.
This is the exact opposite, Giving you all the registers, but not the memory address space.