MS-DOS 5.0 DPMI

MSDOS 5.00A BOOT

MS-DOS 5.00A booting on Neko Project 21

While I’m waiting for my real PC-9821 to arrive, I’ve been playing with various software.  One fun thing was the old DJGPP, as the version 1.x had a customized version of go32 to support the PC-98 hardware.  This is cool, but I’d love to perhaps start down the road of porting something to the PC-98.  There is no VGA adapter, and the I/O is mapped differently so naturally this is why they are only loosely compatible.  So while I was looking for any kind of source code using DJGPP, I found the FCE: Family Computer Emulator (NES).  It includes source code, which is great but it builds against DJGPP 2.x What makes it more interesting is that it has DPMI hooks in place, unlike the old DJGPP 1.x’s DOS extender which is DPMI incompatible.  So how do you magically get a DPMI environment for MS-DOS?  Well one way is to run it under Windows 3.0 or higher.  And certainly with MS-DOS 3.30 that is an option.  However lurking in the disk images of MS-DOS 5.00A was a fun program DPMI.EXE .  Well now that is interesting!

MSDOS 5.00A native memory

MSDOS 5.00A native memory

Using a generic config.sys I have 600kb of low RAM available, and 7MB of extended RAM.

Now the real interesting part is DPMI.INI

[386Enh]
ebios=
display=dddn.386
keyboard=*vkd
network=*vnetbios, *dosnet
device=*vpicd
device=*vtd
device=*vdmad
device=*vsd
device=*vsound
device=d86mgrn.386
device=*pageswap
device=*dosmgr
device=*vmpoll
device=*wshell
device=*vfd
device=*vscsid
device=dpdn.386
device=*parity
device=*biosxlat
device=dmcpd.386
device=*vhd
device=*vcd
device=*combuff
device=*resume
device=*la20hma
device=dpfd.386
Paging=Yes

As you can see this is pretty much the 386 enhanced portion of Windows 3.0!  So you get all of the DPMI services offered by Windows as part of the OS.

MSDOS 5.00A DPMI activated

MSDOS 5.00A DPMI activated

As you can see, with DPMI running I have access to EMS, and XMS memory now available.  Additionally with paging you can even over commit memory.

My only question, is why was DPMI not an added in feature of the English versions of MS-DOS?  Granted there was a LOT of OEM bundling with new machines so you were forced to purchase a copy of Windows along with MS-DOS on all new computers, regardless of what you were going to do with them, and this would have been a bit more interesting.

This kind of environment was extensively documented in the “Unauthorized Windows 95“, by Andrew Schulman that showed how DOSX.EXE could chain load Win386 + command.com achieving the same thing.  The DPMI environment from MS-DOS 5.00A is dated 11/11/1992, I wonder if he knew about this going into the Windows 95 book.  It’s been too long since I’ve read it to remember, but I don’t recall any details about Japanese PC-98 releases of MS-DOS.  There was also a ‘MSDPMI’ environment created for the beta versions of Microsoft C 7.0, but I’ve been unable to find one to verify.  MSC 7.0 was released in 1992, so it fits in the same timeframe, but the shipping products used QEMM’s DPMI server instead.

This entry was posted in 80386, DPMI, MS-DOS by neozeed. Bookmark the permalink.
avatar

About neozeed

What is there to tell? I've loved UNIX like things since I was first exposed to QNX in highschool (we had the Unisys ICONS!), and spent the better time of my teenage years trying to get my own UNIX... I should have bought Coherent in retrospect.. Anyways latched onto Linux in 1992, and then got some old BSD admin books and have been hooked on the VAX BSD & other big/ancient things since...!

6 thoughts on “MS-DOS 5.0 DPMI

  1. Oh my god! You finally found the legendary MSDPMI executable! (Japanese version, but whatever).

    Also, DOSX can’t chainload WIN386.exe, that’s Win.com. Win.com can start both environments, Win386.exe without switches, or DOSX with /S switch. And yeah, you can force a sort of 32bit managed DOS prompt if you replace KRNL386.exe in System directory by Command.com.

    About why they didn’t include it in western DOS editions… Well, probably because this environment was enough powerful to delay Windows adoption a few years more, and MS didn’t wanted that. Remember in these times Windows apps were still less advanced that their DOS counterparts and the only reason for many people to use windows was mostly a glorified task switcher, a way to run many dos apps at same time. Accessing VMM API inside MSDPMI would allow people to create fast and powerful text mode taskswitchers without the need to load the whole windows, being able to run many DOS sessions for apps in a protected 32bit environment, and what is more, being able to use the same VXDs as Windows to drive hardware and emulate stuff for these DOS sessions. And ofc, MS feared about it, and killed the project, unnecessary for their goal, which was put MS Windows in every PC, displacing DOS in the process and killing it.

    • I haven’t tried to run it on a normal PC yet. Since it’s 1991 release it literally sits between Windows 3.0 and Windows 3.1.

      To me at the time, I really couldn’t see the ‘advantage’ of MSDPMI say verses WAT4G/W, TNT. I would suppose the real advantage would be on vintage hardware with 32bit disk drivers, better caching. A task switcher would have been cool, but perhaps too much like OS/2 1.0?

      I think the larger issue was the lack of DPMI extenders for PC-98 hardware, and MS saw that by gutting a copy of Windows, and providing that DPMI with the OS, it would make the eventual process of making everything run under Windows all the easier. With the release of Windows 95, the PC-98 standard basically was over.

  2. Well, for PC-98 emulation, you should really try Neko Project 21/W, a fork by simk that is able to run up to Windows 2000 as a guest (NT 3.5, 3.51 and 4.0 run too).

Leave a Reply

Your email address will not be published.

Notify me of followup comments via e-mail. You can also subscribe without commenting.