Baron-von-Riedesel / Jemm

Jemm386 and JemmEx are socalled EMMs ( Expanded Memory Managers ) or, more exactly, V86 monitors.
127 stars 11 forks source link

Pleas add option to skip VMware detection #28

Open FeralChild64 opened 1 month ago

FeralChild64 commented 1 month ago

Please add a command-line option to skip VMware detection in JEMM386.EXE and JEMMEX.EXE.

The former VMware-specific I/O port 5658h is currently a cross-emulator interface, provided at least by QEMU, DOSBox Staging, and DOSBox-X. I see in the source code that JEMM tries to detect the VMware via this port, and, if succeeded, marks certain memory areas as unusable.

And least in DOSBox Staging it was discovered to be problematic, as using JEMM memory manager is a common workaround for few games which does not work correctly with DOSBox EMS implementation, and the commands to start the games now fail on DOSBox Staging with a default configuration - see issue https://github.com/dosbox-staging/dosbox-staging/issues/3920.

I intend to modify our VMware interface to skip detection if JEMM is starting, but it won't work if someone boots the real MS-DOS inside the emulator - in such cases he might need to disable the VMware mouse support, which is sub-optimal; it will became even more painful if we implement VMware shared directories in the future.

JEMM code snippet I am refering to:

;--- VMware detection
;--- questionable, because Qemu "responds" similar to VMware

VMwareDetect proc c

(...)

VMwareDetect endp

(...)

invoke VMwareDetect
.if ax
    mov dword ptr SystemMemory+0E8h, 'VVVV'
    mov dword ptr SystemMemory+0ECh, 'XXXX'
    invoke cprintf, CStr("VMware detected", LF)
.endif