Hi!
6-Ноя-2005 19:50 [EMAIL PROTECTED] (Kenneth Davis) wrote to
[EMAIL PROTECTED]:
> +++ inthndlr.c 6 Nov 2005 19:50:34 -0000 1.87.2.19
> - r.DX = 0xA2AB; /* on succes DS:AX set to A2AB:B97Ch */
> + r.DX = 0xA2AB; /* on succes DX:AX set to A2AB:B97Ch */
> @@ -1839,29 +1859,89 @@
> */
> r.DX = 0xA2AB; /* on succes DS:AX set to A2AB:B97Ch */
----------------------------------------------^^ DX
> +++ entry.asm 6 Nov 2005 19:50:34 -0000 1.27.2.4
> + mov dx,[cs:_DGROUP_]
> + mov ds,dx
mov ds,[cs:_DGROUP_]
> + cmp word [_OemHook21], -1
> + je no_oemhndlr
> + cmp word [_OemHook21+2], -1
> + je no_oemhndlr
This is "if (FP_OFF (OemHook21) != -1 && FP_SEG (OemHook21) != -1)",
which is not equal to "if (OemHook21 != -1)" _and_ prevents OemHook21 point
to HMA. I suggest, check only for offset is enough. (And in this case you
may restore DS right before JE.)
> + pop dx
> + pop ds
> + jmp far [ds:_OemHook21] ; invoke OEM handler (no return)
Looks like bug: if before "ds=cs:_DGROUP_" DS doesn't contains segment
of _OemHook21, then it willn't contain it after POP DS (and JMP then tries
to get jump address from wrong point). Else, if DS contains segment of
_OemHook21 before this code, then why MOV DS above?
-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
Freedos-kernel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel