On Sun, 13 Jul 2003, Stas Sergeev wrote:
> Hmm, just wondering, what are those DPMI
> changes are intended for?
the reason for
if (config.lfn && (LWORD(eax) & 0xff00) == 0x7100 &&
(REG(cs) == ((us *) 0)[(0x21 << 1) + 1]) &&
(REG(eip) == ((us *) 0)[0x21 << 1])) {
REG(cs) = BIOSSEG;
REG(eip) = INT_OFF(0x21);
}
is a problem with this piece of code:
if (_LWORD(eax)==0x0300) {
if (_LO(bx)==0x21)
D_printf("DPMI: int 0x21 fn %04x\n",LWORD(eax));
REG(cs) = ((us *) 0)[(_LO(bx) << 1) + 1];
REG(eip) = ((us *) 0)[_LO(bx) << 1];
} else {
INT 21 now just executes the DOS int21 and never reaches the DOSEMU
revectored int21 code. I don't know if it's safe to transfer to
f000:_BL*0x10 for every interrupt. Maybe you do?
> According to DPMI specs:
> ---
> However, there are three real mode software
> interrupts that a DPMI host will always reflect to a
> protected mode handler, if one is installed:
>
> Int 1CH - ROM BIOS timer tick interrupt
> Int 23H - DOS Ctrl+C interrupt
> Int 24H - DOS critical error interrupt
> ---
>
> Why are you adding a 0x21 here? Isnt it a direct
> violation of a specs?
that was a wrong try which I forgot to remove.
Bart
-
To unsubscribe from this list: send the line "unsubscribe linux-msdos" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html