I'd also like to mention that, when we originally worked on the VBE Shim, I tried to put it elsewhere. Obviously it has to be pointed-to by a real mode interrupt vector, which limits quite a bit where it can go at all; the point is that I tried to put it into low *RAM* (under 640KB).
It didn't work. Windows 7 would only accept the VBE Shim when it existed in the C segment, i.e. where a VGA option ROM would normally be located.
This is just to say that moving the VBE Shim out of the C segment (into real-mode addressible RAM) will not work.
The symptom described in the original report is likely due to
- Windows following the 0x10 interrupt vector (from page 0) to the C segment,
- copying a bunch of zeros into its real mode emulator from the C segment (where now no actual VBE code can be found),
- and then seeing no results when the real mode emulator executes the zeros.
I'd also like to mention that, when we originally worked on the VBE Shim, I tried to put it elsewhere. Obviously it has to be pointed-to by a real mode interrupt vector, which limits quite a bit where it can go at all; the point is that I tried to put it into low *RAM* (under 640KB).
It didn't work. Windows 7 would only accept the VBE Shim when it existed in the C segment, i.e. where a VGA option ROM would normally be located.
This is just to say that moving the VBE Shim out of the C segment (into real-mode addressible RAM) will not work.
The symptom described in the original report is likely due to
- Windows following the 0x10 interrupt vector (from page 0) to the C segment,
- copying a bunch of zeros into its real mode emulator from the C segment (where now no actual VBE code can be found),
- and then seeing no results when the real mode emulator executes the zeros.