On Mon, Jan 19, 2015 at 01:12:24PM -0500, Kevin O'Connor wrote:
Instead of allocating the SeaVGABIOS extra stack via a PCIv3 style PMM call, use the EBDA to store the stack. The stack is placed at the end of the first 1KiB of the EBDA. Normally this EBDA space is reserved for the main BIOS, but SeaBIOS doesn't use the space.
This works around an issue with 16bit code running on Windows Vista (and likely later versions of Windows). The Windows 16bit emulator can not handle a stack in the e-segment. Using the EBDA, and thus relocating the stack to the 9-segment, works around the issue.
I ran some tests as part of committing this change and found that this patch regresses an old Digital Research "Concurrent DOS" image I was sent some time back. :-(
I do think that 16bit support on recent Windows is a higher priority than "Concurrent DOS", but I am leery of making a change like this just before we tag the next release.
Richard - it sounds like you have a short term solution in place, so I'm inclined to make the next SeaBIOS release without this change. The 16bit support in Windows will, of course, need to be fixed. Maybe a better solution can be found for the following release though.