This is a slightly modified version of Jim Hudgens's GDE (GPLed DOS Emulator?) which I stumbled across by chance. I've made some small modifications so that it compiles on Linux, fixed some bugs in the CPU emulation, and added the CALL 0x05 and CALL 0x50 entry points.
Unlike most other DOS emulators, GDE does not attempt to run a real copy of DOS (MSDOS, DRDOS, FreeDOS etc). Instead, it implements system calls in native code, like ZXCC does for CP/M-80.
Why am I bothering with GDE, when there are so many better solutions for running DOS programs under UNIX? The main reason for my interest in GDE is to use its GPLed 8086 CPU emulator - the only one I've been able to find - in other projects. Getting GDE itself to compile and run was more of a rat dance.
This version is called gde-0.09 (the version I started from described itself variously as 0.03 and 0.06).
New in this version
Various compatibility fixes in the DOS emulation layer:
- EXE files are now detected by their magic number, so can have extensions other than .EXE.
- The current directory is set correctly if GDE is launched within a UFS filesystem. For example, if a filesystem is mapped in .gderc as FILESYSTEM=A,UFS,"/home/user/" and GDE is launched from /home/user/foo/bar the initial current directory will be A:\FOO\BAR.
- Support for the system codepage (INT 21h AH=66h)
- The 'set current drive' call takes its parameter in DL, not AL.
- Interrupt vectors can be got and set correctly (INT 21h AH=25h / 35h).
- Non-blocking keyboard reads (INT 16h AH=1) are supported.
The original GDE
PC emulators that may actually work
John Elliott 2011-06-23