How do interrupts in wine work?
ovehk at ping.uio.no
Sat Feb 16 09:32:12 CST 2002
On Sat, 16 Feb 2002, Nog wrote:
> The way that I see Interrupt handling in wine is that when a real-mode
> dos executable is loaded, the processor (or the os mabe?) is forced
> into v86 were the int xx intruction is not privilaged.
Well, int is sorta privileged in vm86 mode, otherwise an exception
wouldn't be raised...
> In this mode an exception is issued when an int xx is encountered and
> is then handeld by the exception handler is dosvm.c. Which in turn
> checks if the we have a builtin handler for the interrupt and if so
> then we simply call its handler as defined in real_mode_handlers.
> But when the app switches to protected mode, the int xx instuction
> becomes privilaged and gets handeld by EmulateInstruction. In this
> function the 32-bit version is not implemented but the 16-bit version
> is (Is this correct (the one is 16-bit the other 32-bit)?
> If not then what does long_op symbolise?) Is it likley that this
> piece of code will ever get called?
It should never be called by Win32 apps, which is why 32-bit ints aren't
implemented. It's probably different for DOS apps that use 32-bit DPMI,
though, but those apps were never Wine's primary goal...
> And if so then why does it assume that the insterrupt it is emulating
> is not builtin?
The table of 16-bit interrupt entry points is initialized from wprocs.dll
(dlls/kernel/wprocs.spec), so it doesn't need to assume anything.
> What all of this probable garbage came from is: What will it take to
> emulate int xx from 32-bit code?
A sane mechanism to handle those interrupt vectors, probably.
More information about the wine-devel