Windows 3.0 …

Bill Gates with Windows 3.0 / credit:Carol Halebian

There is no denying it, when it comes to revolutionary products you simply cannot ignore the powerhouse that was, Windows 3.0 .  Simply put this is what made the Microsoft empire, broke the alliance with IBM, and changed the future of OS/2 3.0.

Not only that, but Windows 3.0 changed the way businesses operate world wide, and finally delivered on the ‘dream’ of what could be done with the 286/386 microprocessor where OS/2 had failed.

To really appreciate Windows 3.0 you have to see the world as it was before it was under development.  Back in 1989 the pc market was in turmoil.  While OS/2 had the promise of breaking all the old barriers of the real-mode only OS MS-DOS, it simply cost too much, and hardware compatibility was just too poor.  The other striking thing was that the only 386 specific feature that OS/2 1.2 (current version in 1989) could exploit was that the 386 could quickly move in & out of 286 protected mode.  The LAN server product also had a 386 specific HPFS driver, but that was it.  OS/2 1.2 was still limited to a SINGLE MS-DOS box.

OS/2 1.2’s DOS session

And there wasn’t a heck of a lot you could do memory wise.  Not to mention there was no ability for the DOS session to use EMS/XMS memory.  It’s no wonder it became to be known as the ‘penalty box’.

Meanwhile, Windows/386 circa 1987 could run multiple MS-DOS VDM’s on the 386 processor.  You were only limited by how much extended memory was in your system.  Windows/386 exploited the v86 mode of the 386 processor which allowed for hardware virtualization.  However Windows itself was a ‘real mode’ program, meaning that it had to fit in 640kb of ram, just as the VDM’s it spawned had to.

Windows/386 2.11

So unless your goal was to run a bunch of MS-DOS sessions all your extra memory was for nothing.  That also included Windows programs since they all ran in real mode.  For people with enough disk space you *could* actually install one copy of Windows/386 in say VGA, then another with a lower video resolution (CGA or EGA), then actually run Windows in Windows… in a Window.  But it really wasn’t that useful, it ran better full screen.  And all this had the effect of doing was partitioning your windows programs from each other, if you dedicated a VM per application.  Needless to say with OS/2 2.0’s seamless windows this was far more easier to setup, and frankly far more practical.

In 1989 building large applications meant that you either forced people to use Unix (SCO Xenix!) or OS/2.  For those that could afford it, Xenix would have been the way to go, as they not only ran in 386 protected mode, offered a far larger address space, but it was also multiuser!  But Xenix was expensive, needed specialized knowledge.  And as mentioned the cost of OS/2 development was HIGH, and it required your end users to have OS/2 (naturally).  And the users would have to fight that a lot of PC/AT compatible PC’s on the market were not compatible enough to run OS/2.  Despite this a lot of banks latched onto OS/2, and some still use it today (look at why parallax came into existence!).  Then out of nowhere, PharLap had developed a piece of software that changed everything, the DOS Extender.

Originally for 386 computers, the first DOS extenders required people to use special 386 compilers, runtimes, and of course linkers & extenders.  The tools were expensive, the right to redistribute wasn’t free, but end users could run your multi-megabyte (lol) applications on regular MS-DOS.  Which is what 99% of PC’s were running, and it didn’t require users to change their OS, abandon their applications, it would simply just work.

Links 386 pro

One of the earliest and most popular DOS Extended game/application was Access Software’s Links 386 pro.  That’s right this game ran in protected mode! .. And it would *NOT* run under, or near Windows/386.

It was out of this wildly great but incompatible world that the first DOS Extender vendors, tried to standardize their products with the original and short lived VCPI specification, from Phar Lap.  However in 1989 Microsoft was busy working on Windows 3.0 as the next great thing.  Using a protected mode debugger, they were converting Windows/386 from a real mode ‘hypervisor’ into a protected mode application.  And if Windows couldn’t run these new extended applications, then people would naturally have to exit Windows to run them.  And that was the major problem with Windows is that people may have an application for windows but they spent most of their time in DOS. So Microsoft’s Ralph Lipe came up with the DPMI specification, managed to get all of the major vendors to support and take over it, in exchange for leaving Windows as a 0.9 level client/server.  After all why would you need their products if Windows were to incorporate the entire 1.0 spec?  At the time it was a big deal, but the success of Windows would eventually kill the extender market save for video games until Windows 95.  There is a great article about the rise of DPMI here.

So with a firm dos extended foundation Windows 3.0 could do something the 2.x products could never do, which was to actually utilize all the memory in peoples computers.  And because it hinged on a dos extender (ever wonder what dosx.exe was?) it meant that there was no special disk, mouse, network driver/software needed as it could jump out of protected mode, and call real mode software like the BIOS, or even mouse drivers if need be.  However older protected mode programs would only error like this:

No Lotus 1-2-3 r3 for you!

Another popular application for MS-DOS just happened to be Lotus 1-2-3, and it was *NOT* DPMI compliant.  Oh sure they had DOS & OS/2 support, but would you believe that the OS/2 version wouldn’t run in a Window?  Oh sure the install program may have, but some how someone didn’t think there would be any value in being able to SEE more then one application at a time.  Not to mention the dark horse, Excel was starting to sell in 1987 like crazy, in 1988 Excel actually started to out sell 1-2-3, and by 1989 it was already over.

Lotus 1-2-3 r3 for OS/2
Microsoft Excel 2.2 for OS/2

There is no doubt about it, GUI applications were taking over.  The old ‘DOS’ interface was dead.  And Lotus had basically killed their product line by providing an identical interface and experience to their customers by providing an OS/2 application that looked and felt just like the MS-DOS application.  While you may hear that Lotus got distracted with OS/2 and missed releasing a Windows version of 1-2-3 to counter the rise of Excel, the truth is that they straight up missed windowing UI’s. Their hubris is that the users simply didn’t like the 1-2-3 interface, they wanted a windowed application.

What they did want was graphical Windows, and of course more memory!  And there is nothing more annoying than having say 16MB of VERY expensive memory in a computer like a 286, but being restricted to 640kb or less is just … insane.

So let’s see Excel in action.  Excel 2.1c shipped with a ‘runtime’ version of Windows 2.1.  Mostly because nobody was buying Windows in 1987 Microsoft had to do something to get people running the thing.  So the best way was to allow you to run an application with it.  By late 1989 and early 1990 application vendors were making updates to their products so that they could run under Windows 3.0.  And here is the first version of Excel to do so.

Excel 2.1c and the Windows 2.1 runtime

So here we have Excel running under Windows 2.1 ala the runtime environment.  All you have here is excel.  Also worth noting is that the setup program is 100% DOS text based.

Moving forward we can now upgrade to Windows 3.0.

Excel 2.1c running on Windows 3.0’s real mode

So as you can see Windows 3.0 takes up 30kb more memory then Windows 2.1!  For someone with an XT this could mean bad news!  Now it’s time to see what all the babling was about, running the same application in protected mode to access more memory!

Excel 2.1c running in Windows 3.0’s standard mode (286 and above)

Now we are running in 286 ‘standard’ mode.  Notice that Excel thinks it’s conventional memory, but we now have 14MB of the computers installed 16MB accessible to the application!  Now this is pretty amazing stuff! Now it’s no secret that the 286’s memory management left a lot to be desired, and Microsoft really didn’t want to write for it, as the 386 was where they wanted to be.  So unlike OS/2 the 286 cannot swap.  You are only limited to what extended memory you have in your computer.  But this is different for the 386..

Excel 2.1c running under 386 enhanced mode

And here we are, 386 enhanced mode! So finally  our Windows applications are clearly running in protected mode, with demand paging!  With 36MB of available memory in a computer with 16MB of ram.  The colors are distorted on Virtual PC under 386 enhanced mode… But as you can see the environment runs!  And even graphical programs that for example used CGA could happily run on an EGA system in a window.  Even better you could copy the screen, and paste it into any Windows application you want.  Yes you could buy games and use them for clipart!

Another feature of Windows 3.0 that people didn’t realize is that it could pre-preemptively multitask DOS based VDM’s

As you can see, there it is, the timeslice, and scheduling options..  Great ways to confuse users for decades… 🙂

Who could resist?

As always, there is a great InfoWorld article here.

So why was Windows 3.0 successful? A lot of it is timing, as there was no other environment that could offer people access to their whole machine without upgrading their operating system.  And of course there was the whole thing with bundling Windows, Word & Excel with new computers.  I mean who would resist something like a graphical application like Excel when compared to the klunky and significantly more expensive 1-2-3?  Sure the bundling practices were found to be illegal, but looking back, Lotus & Word perfect basically GAVE Microsoft the market.  And of course, talk about aggressive upgrades!  I’m not sure they even do such things anymore.  Although I’ve heard of big companies, and governments pushing for discounts for running things like Linux.

And there is the other things that Windows 3.0 supported that OS/2 simply did not.  For starters backgrounds (wallpapers), and of course the desk accessories.  Sure they sucked but in a panic at lest you *could* do something… where OS/2 basically left you in the lurch.  Not to mention how much more expensive OS/2 was when compared to Windows.

So with all that out of the way, what fun is a write up without a demo?

 

And thankfully I’ve found all the bits in prior posts, and I can put them together right here.

Windows 3.0 working demo, click to launch!

 

PCEm

So looking around for other IBM PC emulators, I came across this one, PCEm. Now what’s really cool about this one is the old models it can emulate, including the IBM XT, the IBM AT, and it can even run the AMI BIOS for a 286, 386 and 486!

PCem 486
PCem 486

So not only can it run the BIOS but some ‘fun’ stuff like Windows 3.0 & 3.1 in standard mode, (386 enhanced is busted.. )

Setting up Windows 3.1 on EGA
Setting up Windows 3.1 on EGA

I find the 486SX mode works the best… And naturally fastest as it’s cycle accurate emulation. An interesting mode is the IBM 386, which appears to be the IBM AT’s BIOS patched to run on a 386 CPU.

PCem MSD report
PCem MSD report

What is cool though, is the 386 protected mode is complete enough for DOS4G/W executables to run…

Loading DooM!
Loading DooM!

And yes if your CPU is set to low enough Mhz it will take a minute or two to load as it did back in the day…

PCem running DooM
PCem running DooM

And away we go! I should add this is Doom 1.1 shareware, which I did manage to get the sound working on OS/2 2.1, and it’s great to hear that PCEm’s soundblaster emulation works great!

For DOS games, this emulator really has a wide range of machines, and with the actual BIOS it sure gives the original ‘experience’.

*NOTE you’ll need disk images, and lots of them… or some scheme to mount the raw disk image. Also the UI is touchy I’ve already lost one disk to it….

Some Java & Javascript

Well I found this program, Dioscuri quite interesting… It’s a PC emulator written in JAVA!

It’s very interesting in how it’s trying to be accurate hardware wise, although holding down keys tends to cause it to crash…. 😐

Maybe a later version will work, but for what it’s worth, here is the title screen from Battle Tech.

battletech
The best game of 1988!

Naturally, any machine with a good JVM ought to be able to run this… But I’ve always found Java to be such a moving target….

Another thing I came across was this fantastic i8080 emulator coded in javascript. And it’s setup to play space invaders!

On Chrome, or Firefox it should perform at a reasonable rate. Internet explorer users are in the cold, as IE doesn’t have a javascript canvas. Sorry. But here is what you are missing out on.

javascript space invaders
Complete with i8080 emulator in Javascirpt!

 

This is some really neat stuff (to me) anyways.

MS-DOS Player…

You’ll probably need to run this through translate.google.com, this this site, by Takeda Toshiya, has this nifty utility that’ll run some MS-DOS programs at the command prompt from Windows x64!

It’s best geared towards command line utilities, but it seems to work fine for little (old) stuff.. nothing too fancy though the CPU core is taken from MAME’s i86 (which looks heavily influenced from pcemu).

Today is a slow internet day.

Some random updates…

I just got back from a trip, so here is a quick shot of the 8″ diskette of Zork 1 for CP/M… I put it against my keyboard for some sense of scale.. It’s MASSIVE.

Zork 1 on an 8" floppy disk
Zork 1 on an 8″ floppy disk

I also found this Infocom interpeter written in Turbo Pascal, written by Martin Korth. It was written for Turbo Pascal 4.0, but I’ve built it with 5.5 and 7.0 without issues.

A friend of mine pointed me towards this new emulator PCE that looks very promising.. It boots off real IBM ROMS! Right now it’s 8086/80186 capable, but it’s still VERY cool.

Word is the author is working on Sparc32, ARM & PPC emulation… It looks very cool.

Thats about it for me!

Making bootable ISO images

I know for most people using mkisofs is second nature, but I needed to get a machine running MS-DOS without floppies… and it had to be on the bare metal.. Oh joy.

Now I’ve kind of done this before but I’ve never gotten it to preserve the directory structure.  It seems that it’s important to specify some output…

The ‘fun’ thing is that I was able to use virtual pc to build the boot diskette with IDE cdrom drivers, and make sure it works in that it mounted the CD and set the path there…

So I have extracted my MS-DOS install from the floppies into a directory on my pc and I keep the file dos622_1.img in the same directory so mkisofs can place it in the image.  Then it’s just a matter of running:

..\mkisofs.exe -o ..\x.iso -J -r -v -V test_disk -b dos622_1.img .

And I get an x.iso that can boot MS-DOS, and has all the dos commands in place, I can partition & format the hard disk and copy DOS into place.

It’s not much to see, but if you need legacy stuff it’ll be a life saver.. and I know I’ll end up losing the flags and needing them again!

Back to DOS

It’s been a long while, life has been busy. But I figured I ought to try to make a post this year!

Ok, I’ve gotten a new laptop over the last few months & I’m running the 64 bit version of Vista. One or the first things us old people will find is that the MS-DOS & Win16 subsystems have been completely removed.

This of course, poses a massive problem! How to play games!!!!?

Thankfully there exists two really great solutions for Vista 64bit users. The first one I’ll suggest is Virtual PC from Microsoft, and DosBox.

It’s no wonder Microsoft has made Virtual PC a free download (http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx) since they have crippled the compatibility of the OS. Now I’m personally a little biased for Virtual PC as I’ve been using it since it was owned by Connectix. Virtual PC is a complete PC emulation strategy, allowing you to run MS-DOS or quite a few other operating systems. For this example I’m going to install MS-DOS, but it’s capable of running all kinds of other operating systems.

Now back to my laptop. It of course doesn’t come with floppy drives, so I used an older PC with a drive to create disk images. (it was running OpenBSD so I just ran ‘dd’. Winimage is capable of creating disk images as well). Of course I could use a USB floppy drive and boot my MS-DOS 6.22 floppies from that as well.

The cool thing is that you can setup a virtual machine, boot off either real floppies or virtual disks, and you will need to setup a virtual hard disk. Naturally it will need partitioning, and formatting. As for installing games, again if you have floppies of them, everything is cool. There even is an emulated CD-ROM device, however you will need a device driver to use it! (http://www.google.com/search?q=idecd.sys) Virtual PC emulates an IDE CD-ROM, and you can use just about any driver you can find out there. Once you can read CD-ROM’s under the emulated MS-DOS you can install the ‘extensions’ program, which has an idle program (to stop the emulator from consuming 100% of your CPU, as MS-DOS has no inherent idle loop), and a neat program called fshare. Fshare will allow you to give your emulated PC access to a directory on the host computer.

The plus’s of Virtual PC is that it’s a more accurate emulation, it provides sound blaster pro emulation, and good psudo device emulation. The major downside for me is that it provides no joystick emulation. Of course you’ll need to bring your own DOS, however I imagine that freedos (http://www.freedos.org/) ought to work just fine, but I kind of like the real thing.

The second emulator I’d like to mention is DOSBox (http://www.dosbox.com/). Unlike Virtual PC, DOSBox is not a complete system emulator, it’s designed specifically to run MS-DOS programs. So you will not need a copy of MS-DOS, nor will you need to worry about such hassles as media, or emulated hard disks.

To run DOSBox for the most part all I do is add the following lines into my config file:

Mount c: c:\Users\Jason\dos
C:

This will make my “c” drive a dos directory in my home directory on Vista, and change the current directory there. From here I can unzip any of the old programs I have, or just copy from CD to my vista directory and just run things. Overall DOSBox has pretty good compatibility. I’ve even run Windows 3.1, and some compiler & development stuff. And yes, it supports Joysticks & the emulation of various sound cards. DOSBox also has various throttle and various video emulation strategies. The other cool thing DOSBox can do is setup a virtual IPX/SPX network, and allow you to play old DOS multiplayer games over the internet. Warcraft 2 & Doom work quite nice under DOSBox. While Virtual PC does provide virtual Ethernet interfaces, it does not provide a way to connect them up over the internet. While it could be done with loopback adapters & PPTP routing, it would be way beyond the average user. DOSBox can listen on a specified TCP port, you can setup your internet router to redirect that port to the host PC, then allow your friends to connect in.

While I can understand Microsoft’s desire to cut all ties with past OS’s in terms of support, It’s a good thing that there still exists an emulation strategy for the two of us. And between DOSBox and Virtual PC hopefully your needs will be met.

*Yes I’m aware of VMWare, however it’s not technically free, and while you can create your own config files, and disk images in Qemu, and install your own OS, it’s not the ‘right’ thing to do according to the EULA.