On Tue, May 13, 2014 at 11:20:11AM +0200, Bernhard Walle wrote: > Am 2014-05-13 07:52, schrieb Bernhard Walle: > >* Kevin O'Connor <ke...@koconnor.net> [2014-05-12 22:07]: > >>On Mon, May 12, 2014 at 08:53:53PM +0200, Bernhard Walle wrote: > >>> Am 2014-05-12 07:29, schrieb Kevin O'Connor: > >>> > > >>> >It does look like the x86emu issue. You can try applying the > >>> >SeaVGABIOS patch below to confirm it. > >>> > >>> The output doesn't appear. But I'm sure that I copied the correct files > >>> because modifications of other strings worked. > >> > >>Heh - old versions of x86emu apparently don't support "rep outsb" > >>either. Can you test the patch below instead? > > > >Okay, the output appears. So that means that I should update > >v86d (the x86emu lib included there is okay?)? > > I already have the latest version of x86d from > https://github.com/mjanusz/v86d/commits/master.
Thanks for running further tests. Unfortunately, I don't know enough about v86d or x86emu to really help here. I do know that the version of x86emu that ships with Xorg was updated several years back and no longer has trouble with the leal instruction. As background, the root of the problem is that SeaVGABIOS is compiled with gcc, and gcc can emit the "leal" instruction. The old "lgpl VGA BIOS" uses a really old compiler (bcc) which doesn't emit that x86 instruction. The x86emu code does not properly emulate "leal" (as near as I can tell it treats it as a "leaw" instead), which leads to all sorts of bizarre behavior when it tries to interpret the code. This type of issue has occurred for a bunch of instructions (on both x86emu and on an emulator Windows uses) and we've worked around it in SeaVGABIOS with a combination of gcc compiler flags and by post processing gcc's assembler to remove some troublesome instructions. Unfortunately, I don't know of any way to convince gcc to not emit the "leal" instruction and the instruction appears too complex to readily patch out of the assembler. So, my advice would be to either avoid x86emu (eg, maybe by trying the vm86 mode of v86d, or maybe by not using uvesafb), try compiling v86d with a newer version of x86emu, or stick with the "lgpl VGA BIOS". -Kevin