Re: experimental LFN support for redirected drives

Bart Oldeman
2003-07-13T19:34:02Z

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