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

Reply via email to