johnsonlam
银牌会员
     阿林
积分 1410
发帖 497
注册 2004-6-28 来自 九龍,香港
状态 离线
|
『楼 主』:
Q-系 驅 動 有 潛 在 的 臭 蟲
由 於 我 不 大 懂 匯 編 的 中 文 詞 彙 , 請 有 心 人 幫 忙 翻 譯 一 下 , 謝 謝 !
=-=-=-=-=-=
Serious problems have been noted in the current QHIMEM, QCACHE/QDMA and
QCDROM drivers.
QHIMEM is written to return an error code of zero, meaning no error, on
all XMS requests which are successful. This error code is returned in
the BL-register. However, the V3.0 XMS Specification states that all
CPU registers are to be saved and restored by an XMS driver, when it is
called by DOS programs to do XMS requests.
It is unclear, from the V3.0 Specification, that when XMS errors do not
occur, the BL-register should NOT be modified. For most DOS programs,
this is no problem. But a few programs such as "I_CACHE" require that
the BX-register must NOT change, if XMS errors do not occur. If those
programs are run with QHIMEM, the programs may fail.
QCACHE/QDMA/QCDROM are all written to do I-O for disk and CD/DVD drives
anywhere in DOS memory, including upper-memory past 640K. QCACHE will
deal with upper-memory by converting its address "segment" and "offset"
to a 20-bit memory address. Then, it uses the 20-bit address with its
own "Fast XMS" logic in moving data to or from upper-memory.
The problem is that upper-memory may have been "mapped", with EMM386 or
an equivalent "EMS" driver, to physical addresses that are NOT the same
as its "segment" address! For example, upper-memory with a "segment"
of D000h and "offset" of 0400h will be accessed by QCACHE at a physical
32-bit address of 000D0400h. If EMM386 etc. has "mapped" this memory
to a true 32-bit address that is NOT 000D0400h, I-O requests will fail.
QDMA/QCDROM do not contain their own "Fast XMS" logic and must call the
XMS manager (QHIMEM, HIMEM, etc.) to do an XMS data "move". But, they
must tell the XMS manager the "segment" and "offset" address for upper-
memory that was given to them by the user program. XMS managers were
NOT designed for "moves" to DOS upper-memory, and most will NOT convert
the "segment" address to its true 32-bit physical address. So, again,
I-O requests will fail.
|

我 的 網 站 - http://optimizr.dyndns.org
|
|