How do interrupts in wine work?
Ove Kaaven
ovehk at ping.uio.no
Sat Feb 16 11:13:20 CST 2002
On Sat, 16 Feb 2002, Nog wrote:
> Ove Kaaven wrote:
>
> >On Sat, 16 Feb 2002, Nog wrote:
> >
> [SNIP]
>
> >>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.
> >
> This was my point. When emulating these interrupts it pushes the values
> of Eflags, Cs and Eip onto the stack but none of the interrupt handlers
> call the iret instruction or pop anything off the stack. What have I
> missed?
They can't do that, of course, as they're 32-bit code, and the caller (and
the stack) is 16-bit. So it's all taken care of by the 16/32 relay thunks
generated by winebuild from the .spec file.
> >>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.
> >
> I assume that the Would this be somthing like the code in
> msdos/interrupts.c?
Perhaps.
> But then why do we need to have 2 tables for
> interrupts (one in msdos/interrupts.c, the other in
> dlls/winedos/dosvm.c)? The only explanation I can come up with is that
> mabe, just mabe, the interrupts in wproc.spec get called from 16-bit
> windows.
More information about the wine-devel
mailing list