Jon Smirl wrote:
On Mon, 28 Mar 2005 11:05:08 -0700, Li-Ta Lo ollie@lanl.gov wrote:
Which version of x86emu are you using? The larger one from XF86 or the reduced version from Paulo?
The one from linux BIOS cvs: linuxbios/src/devices/emulator/x86emu
Actually, the code on the LinuxBIOS cvs may be the reduced version by Paulo, depending on when you check it out. Paulo's version has some bug such that it may fail to init the hardware. I did commited some fix to the CVS I got from him. But there are some fixed not commited dur to the CVS -> TLA transition.
What I used is in the current CVS repository: :pserver:anonymous@cvs.sourceforge.net:/cvsroot/freebios
I just went there to check out the versions.
The version in "freebios" is the large version whereas the version in "freebios2" is the reduced version.
The large version still has the "#define xorl(a,b) ((a) && !(b)) || (!(a) && (b))" bug in line 100 in ops2.c. This macro needs an extra parenthesis to avoid priority issues.
The reduced version, on top of this bug, still has the XCHG AX,BX bug. To fix it manually, edit line 2230 in ops.c and change:
M.x86.R_EAX = *reg16;
to
M.x86.R_AX = *reg16;
This bug cleared the top 16 bits of EAX when doing a XCHG AX,BX instruction. In the BIOS Ollie tested with, this produced a division by zero later in the code.
It also has the "write destination on CMP" bug.
I can send a proper patch against this version to fix all this, but if the version in the arch repository is already updated, then there is no need for it.