Re: having System.map reflect the running kernel

Jeff Noxon (jeff@mrsagw.mrsa.com)
Thu, 7 Sep 1995 09:54:38 -0500 (CDT)


I can verify that this is the technique used by several Origin games to
get past the "640K" barrier without using protected mode. They call it
voodoo memory mode. Others have used the trick as well. Even though it's
undocumented, I imagine that it will continue to work on future X86
processors and clones. Removing this capability would break quite a bit
of DOS software (mostly games).

I don't think it works in V86 mode, however. These programs never work
with memory managers. They always seem to want real mode.

Linus wrote:
> "Brandon S. Allbery KF8NH": "having System.map reflect the running kernel" (Sep 6, 6:48):
> > In your [Linus's] message of Tue, 05 Sep 1995 07:59:21 +0300, you write:
> > +-----
> > | > segments with 4GB limit and then go to real mode without reloading them
> > | > with 64K segments. Then one can accesss all 4GB in memory (for example
> > |
> > | Is this guaranteed to work? I suspect it will break on many machines

It apparently works on Cyrix and NexGen and others... I think you can count
on it.

> > +-----
> >
> > Err, how could it work?
> >
> > (a) In real mode segment registers contain physical addresses (left-shifted,
> > but still physical addresses), not segment descriptors.
> >
> > (b) Even if you use v86 mode instead, you can still only wedge 16 bits into
> > an address field (or address offset field) of an instruction. This is a
> > major part of BIOS compatibility, so even if you could trick the processor
> > into taking 32-bit addresses in v86 mode you would then be BIOS-incompatible.
>
> Actually, a x86 is a stranger beast than you probably realize.
>
> What the original poster suggested really _might_ work, because a x86
> internally doesn't really do what you think it does by just looking at
> the code.

[Interesting stuff deleted]