Upgrading through Windows NT; Windows NT 3.1

On the heels of my OS/2 upgrade path, I thought I’d take on Windows NT.

Windows NT 3.1

Originally planned as OS/2 3.0, OS/2 NT, or Portable OS/2, Windows NT began life as a portable version of OS/2 2.0 for RISC processors.  Even in the early design phase, it was decided that it was going to have multiple OS personalities.  With the arrival of Windows 3.0 everything changed, and it was decided to use WLO, or project porthole the port of Windows 3.0 to OS/2 1.2 as the basis of what would become Win32, the primary personality for OS/2 NT, however they could keep all the kernel work, as none of the initial design would have to be changed when they dumped the OS/2 2.0 cruiser personality.

Because NT was going to be the successor to OS/2, it naturally supported the FAT & HPFS file systems, but in addition it also supported the NTFS filesystem which included the journaling capability allowing it to survive some data loss, and to be able to quickly check the disk.

The NT 3.1 desktop

So after all the betas NT finally shipped in July of 1993.  The first thing that I was amazed by was the sheer size of it.  There was an incredible amount of floppy disks, and fully installed it could easily consume some 50MB for the OS + space for a swapfile. What was also amazing, and confusing for the users is that NT 3.1 looked just like Windows 3.1.  Even the same games/accessories were included and the look and feel were so much the same that most people couldn’t tell NT from Windows.

Windows NT 3.1 could run MS-DOS applications via the NTVDM (which is still around in 32bit versions of Windows 7!), OS/2 16bit text mode applications, specially compiled POSIX applications (vi was popular among unix people), Win16 applications which again rain inside of the NTVDM, along with a ‘speical’ version of Windows 3.1 which would then translate the system calls to the Win32 subsystem via thunking so that the applications could run seamlessly on the desktop, without requiring complicated drivers, unlike OS/2. And of course it could run the new breed of Win32 executables which included console, gui and service applications.

The ability for Windows NT to support multiple user accounts was a big change from the typical Microsoft one user / one computer approach, but it also changed the playing field with being able to run server programs on Windows that you didn’t have to login to the machine, and start yourself.  The best part being that you could manage these applications with Windows programs!  While it may seem impossible to imagine now, the big ‘database’ program at the time was Oracle, and if you didn’t have a mainframe or a mini computer to run it on, but wanted to go down the microcomputer path you either ran Oracle for MS-DOS, or you ran it on Novell Netware.  While networking was in Novell’s blood, setting up networking on MS-DOS could prove a chore.  Windows NT 3.1 may have shipped without  a NetWare requester, but it did include support for DLC, IPX/SPX, TCP/IP and NetBEUI.  This meant that Microsoft SQL Server could talk to more network types than a typical Netware setup. Another game changer was that the networking support, and namely TCP/IP was included in the box!  Up until this time TCP/IP solutions were typically 3rd party for both Windows, Netware, and even some UNIX (like Xenix!).

It is also worth noting that the TCP/IP in this version is from a 3rd party, SpiderTCP although once Microsoft was ready they did release their own stack which was in NT 3.5, an update for Windows for Workgroups that supported things like DHCP.

One major annoyance of OS/2 was that command prompts were either full screen or windowed, but they could not be switched, and some programs were flagged as full screen, so if you ran them from a window the system would flash to full screen, sawn a full screen session, maybe kick out some text, then switch back to the graphical screen.  It was VERY annoying for tools that expected flags, as then you’d have to switch to a full screen session to even see what was going on.  Windows NT addressed this off the bat, that VGA based systems could switch between fullscreen & windowed sessions by simply hitting alt+enter, and RISC / framebuffer video systems would be stuck in ‘windowed’ command prompts much like Windows Vista and other systems won’t let the ‘Command prompt’ window go full screen.

One big annoyance about Windows NT 3.1 is that all the Win16 applications (which was what almost everyone was using) ran in a SINGLE VM which meant that a single rouge application could crash out the VM, losing all the other Win16 applications work.  It wasn’t any better than what Windows 3.0/3.1 users were facing, and only OS/2 allowed people to run Windows application in separate sessions.

Another serious shortcoming in Windows NT is that the POSIX subsystem is basically brain dead, it doesn’t support any networking calls. The inability to port any networking UNIX code to NT made it pretty much worthless, and all I ever saw people do was setup vi on it.

Other than that, for a 1.0 release it supported an incredible amount of printers, sound cards, and even network cards the OS was far more stable than MS-DOS+Windows, although it did need a LOT of memory..  Microsoft gave away a TONNE of boxed copies of it back in the day, for all intents and purposes NT 3.1 was a commercial bust, lots of people I know tried it but nobody really used it, it was too slow, and too resource hungry at the time.  But NT wasn’t written with 80386’s in mind, but rather the future.  Windows NT 3.1 shipped with support for the MIPS R4000 CPU, and the Intel i386/i486/Pentium.  The Dec Alpha had not shipped at this point so Alpha support was held back, and offered as a coupon upgrade.

For a test, I thought it’d be a good test to install Microsoft Word 5.5 for MS-DOS / OS/2 as a test, SQL Server 4.21, and Excel 3.0a for Windows. For fun I even installed Doom 1.1 for MS-DOS, which plays however there is no music as NTVDM has no pass through support to the sound hardware ports (unlike OS/2, I suspect it’d violate the whole principal of a ‘secure’ OS) and since there isn’t any soundblaster emulated devices there won’t be any sound.

Here is some videos of installing Windows NT 3.1 (from within MS-DOS because the CD-ROM support in NT 3.1 is all SCSI based that Qemu doesn’t emulate), and using Windows NT..

Windows NT 3.1 was later replaced by the smaller & more capable Windows NT 3.5 .

Using Qemu

I get notes every now and then about people not being able to use Qemu.  While Qemu is great, cross platform, and free it can be a little crazy to use, esp to people who are scared of the command line.

But rest assured it really isn’t that bad, once when you see the order of its seeming chaos.

Take this string for example:

C:\qemu\NTwalk>..\qemu-1.0.1\qemu-system-i386.exe -L ..\qemu-1.0.1\pc-bios -m 64
-cpu pentium -drive file=nt31disk,if=ide,index=0,media=disk,cache=writeback -ne
t nic,model=pcnet -net user -cdrom “Windows NT 3.1, Win32 SDK.iso” -fda “\temp\extensions.img” -soundhw sb16,adlib

Lets break it down as follows:

C:\qemu\NTwalk>..\qemu-1.0.1\qemu-system-i386.exe

First I specify the Qemu emulator I’m going to use.  I’m using the i386 one here, and as you can see, I’m running this from a different directory than where I’m working with disk images.

-L ..\qemu-1.0.1\pc-bios

Next is where I tell Qemu where it can find the needed BIOS files.  I think there is some global install path, but I tend to run all kinds of versions of Qemu all at once so this will *not* work for me, and it is just easier to tell it where to find them.

-m 64

I’ve set my VM to a maximum of sixty four megabytes of RAM.  The default is 128MB, but  sometimes you want less, as some OS’s can’t use more than 8/16/64 anyways and they may have issues finding RAM where they aren’t expecting it.

-cpu pentium

Most OS’s will run and boot on a modern CPU, this includes MS-DOS 3.30 which I have booted via a USB floppy controller on my 8core AMD processor.  However some OS’s fell into the trap of how to identify the processor, and configure themselves accordingly.  All was well until the Pentium 4, Itanium, and the CORE CPU’s came into existence.

 -drive file=nt31disk,if=ide,index=0,media=disk,cache=writeback

With a lot of experimentation I’ve found that this combination works best for qcow2 disk images.  While a lot more complicated than “-hda nt31disk” it does perform significantly quicker.  Another ‘tip’ I like is that you can have Qemu mount a directory (as long as it is under 500MB) and it’ll create a virtual FAT-16 formatted disk.  The flags are [ -hdb fat:<path> ]  this is a great way to copy in things like device drivers, and even programs.  However this disk is read only, so you cannot copy data out.

-net nic,model=pcnet -net user

This enables the AMD PCNet PCI network card, and sets it to User mode NAT.  I like the AMD card as it has really good support.  With that in mind, Qemu supports the following models:

  • ne2k_pci
  • ne2k_isa
  • i82551
  • i82557b
  • i82559er
  • rtl8139
  • e1000
  • pcnet
  • virtio

I’ve never really messed with the tun/tap stuff as you can only have one host on it, so its kind of useless to me.  With the usermode NAT the VM should be configured the following way if it doesn’t support DHCP:

Address 10.0.2.15
NetMask 255.255.255.0
Gateway 10.0.2.2
DNS 10.0.2.3

If you have DNS issues, you may want to try a DNS server that you are using on your physical computer, or perhaps 4.2.2.4/8.8.8.8 . Also you will *NOT* be able to ping outside of the VM, but you *CAN* ping the gateway, 10.0.2.2 .

-cdrom “Windows NT 3.1, Win32 SDK.iso”

Just as it appears, this adds an ISO image into the VM which is typically located on the second IDE interface, on the primary port. To force the VM to boot from CD, add the flag ‘-boot d’ and the BIOS will attempt to boot from the CD-ROM.

-fda “extensions.img”

And like the CD-ROM, this is for the floppy disk.  Sizes can be 360k, 720k, 1.2M and 1.4M. If you wish to boot from the floppy disk you simply add the flag ‘-boot a’  Older floppies will not contain a boot check sum, so to force them to boot, you’ll need the additional flag ‘-no-fd-bootchk’ to ignore the check sum that later diskettes used.  In my above example I’m just using a disk image, not booting from it.

-soundhw sb16,adlib

And finally I’m enabling both the SoundBlaster 16 & Adlib emulation.  By default in the builds of Qemu the adlib is turned off, but I just turn it back on when I build Qemu.  Other sound cards include the recent HDA & AC97 chipsets.

Remember the Sound Blaster is configured for an IO base of 0×220, IRQ 5, DMA 1 and High DMA 5.

 

I hope this gives some insight to users on how to effectively use QEMU.

PX00307, also known when Windows NT was born.

I just found out about, PX00307.pdf, basically its when Microsoft was thinking about breaking away from OS/2 and making the future all Windows based….

Its funny how they say that OS/2 PM has a better API, and at the same time were talking about having NT continue using an INT 21 interface for Windows.. No doubt this is all high level talk, Cutler would have killed anyone for even mentioning INT 21… lol

Mini vMac II for OS X (PPC)

Emulators in Emulators..

I wanted to run some old 68000 programs on OS X, but as luck would have it, OS X 10.5 doesn’t support the classical environment, and the 10.4 discs that I have won’t boot on a G5.  So I don’t have a good way to get there from here.  However I did remember the great mini vMac is very portable, runs 68000 code great, and even can run 68020 programs with the experimental branches.. So I had to install OS 7 on a Windows machine with my last binary, configure the source there, then import it to my PowerPC, then build it on my G5.  The OS X PowerPC build is lacking sound (did the intel OS X have it?) but it runs!

For anyone that cares, my PowerPC binary is here.

I’ve just updated it to contain all the 32bit binaries…

$ file minivmac

minivmac: Mach-O universal binary with 3 architectures
minivmac (for architecture i386): Mach-O executable i386
minivmac (for architecture ppc7400): Mach-O executable ppc
minivmac (for architecture ppc): Mach-O executable ppc

It turns out this is reliant on Carbon, which doesn’t allow for 64bit binaries…

25 years of GCC!

In 1987 the first announcement went out that Stallman had introduced perhaps the most important piece of GNU software ever:  GCC.

I haven’t been able to locate the 1.0 release or even the 0.9 beta (*Edit as an update, yes I’ve found it, and installed it!), as close as I could find was 1.21 from May 1st, 1988. Even at this time, GCC supported the following CPUs:

  • m68k
  • ns23k
  • spur
  • vax
Amazingly GCC at this point is pretty snappy, and very ANSI compliant unlike PCC.  At this point it still relies on native assemblers, linkers, librarians it still was pretty versatile. Back then there was no auto configuration tools you have to link configuration scripts by hand but even on VAX BSD it builds somewhat straightforward (providing you read the documentation)..

GCC 1.21 on 4.2 BSD

I don’t know if it serves any practical value but I went ahead and built a source package for GCC 1.21, along with a 4.2 BSD binary package.. I suspect it’d only be an interest to a select few.. Although if anyone has 1.0 or 0.9 I’d be interested!

By 1991 GCC 1.40 supported not only the i386, but Linux kernel.. And as they say the rest is history.

And finally a video summation of all the changes to GCC…

 

Yet another update for QuakeWorld/Quake for MS-DOS

You can download the source/binaries here.

The big change is that you can not play larger maps, like the dreaded Warp Spasm (which of course relies on QUOTH).

Warp Spasam under OS/2

I’ve also built it for OS/2! You can download Quake, Quake World, and the source code. This all builds with EMX 0.9d and I’m using OS/2 2.0 (patched to x06100).

Also if it matters the newer your MS-DOS the better… 4.01 works, sure but its SLOW…

Compute!’s Gazette archive

Compute 33, March 1986

Back when I was a kid (was I ever a kid), anyways the first machine I was lucky enough to get was a Commodore 64! Unfortunately I was too young to understand what it was, or what I could even do with it.  Although they did have commodore computers in our grade school, the whole microcomputer revolution was so new to everyone that they pretty much just sat there until someone came by to show us how to load programs from diskette & tape.

But to be honest ‘educational games’ in 1983/4 really didn’t grab my interest and for the most part my C64 sat dormant.  However by 1986, I remember this magazine sticking out at some convenience store, and I was hooked! The whole program in a magazine seemed so awesome, and to be honest the idea of machine code, and having to type in a CRC’d editor was so far fetched to me, that I took MONTHS to get that typed in alone..But without a modem, I suddenly was connected to so many others who were now part of the microcomputer revolution.  I recently stumbled onto this great archive at commodore.ca that has the first forty five issues scanned into PDF.  Its all there, including the ads for things like ‘sublogic football‘ ..

Enjoy the history!

Dell UNIX Lives Again!

(please note that this is a guest post from Antoni Sawicki)

Dell UNIX is so ultra rare among rare Unix species that it doesn’t even have a Wikipedia entry. I have been hunting this elusive but important piece of computer history for well over 15 years now. Fortunately thanks to Charles H. Sauer and his excellent blog post I was finally able to lay my hands on disk and tape images and the restoration process begun.

The install tape

The system can be installed from either a tape or network server (presumably NFS). Unfortunately no virtualization software can emulate a tape drive. Hopes for a network install are even slimmer since the required network support floppy disk has been lost and chances of suitable Ethernet driver working in Bochs or Qemu are equal to that of finding the lost floppy disk.

I have decided to try a hard disk image from a readily pre-installed system. The original Dell 486 workstation had a 1GB SCSI hard disk. Unfortunately neither Dell UNIX supports LBA mode nor Qemu/Bochs support the Adaptec 154x controller required by the OS.

As all normal install options have been exhausted, the only option left was to use a second hard disk image as source of cpio archive files. Booting from the two install floppies and attaching two disk images was a snap. The next step was to inject the tape “file” in to a right place on the disk, so it can be read by cpio command. A hard disk in Dell UNIX is pretty much unusable without a valid SysV partition and VTOC. Fortunately dellsetup command does it all for you. Once VTOC was put in place I’ve attached the transfer disk image as a loopback device in my host OS. In couple of iterations I was able to aim the host os dd if=file1 of=/dev/loop0 bs=512 seek=offset at the right place, which you work out using prtvtoc /dev/rdsk/1s0 command. Then cpio -ict < /dev/dsk/1s1 was able to list contents of the emulated tape… with errors…

In my infinite wisdom, for some unknown reason I’ve assumed that LBA addressing is required above 540MB. So to be on a safe side I have made the hard disk images 512 MB. What a mistake it was! I have lost several hours trying to figure out cpio header errors coming from the disk… By pure coincidence, while the tape archive was installing (with errors) I was researching for this very blog article and found that LBA starts at 504 MB… Recreating the hard disk images just few MB smaller took all tape and prior boot problems away!

Once the cpio archive was extracted I have made few final touches taken from the original tape install script. After a reboot Dell UNIX booted perfectly. You can experience this by using the firstboot image file. The final part of installation was injecting the second tape file containing System V PKG file to the transfer disk image and running pkgadd -d /dev/dsk/1s1. This is what’s included on allsoft.img.

Dell Unix at First Boot

Some final notes on running the OS:

  • To enable mouse to work:
    • Qemu just add “-chardev msmouse,id=msmouse -device isa-serial,chardev=msmouse” to the launch arguments.
    • Bochs add to the config file:
      mouse: type=serial, enabled=1 
      com1: enabled=1, mode=mouse
      then you have to kill mousemgr process and prevent from starting by deleting /etc/rc2.d/S25mse
      then edit /usr/lib/X11/Xconfig:
      disable Xqueue
      enable Microsoft Mouse
  • To enable keyboard to work correctly in VirtualBOX start with Num Lock OFF.
  • You can use qemu-img utility to convert the image to VMware vmdk to use in VirtualBox.
  • To run X window type startx

X11 and all its glory

  • To attach it to internet use SLIP as there is no working Ethernet driver.  Contrary to most UNIXen of the time, the command is not slattach, but rather slipattach.  Thankfully it does work the same way.  I have found that running Dell Unix with VirtualBOX, along with Windows NT 4.0 I was able to connect into the Dell Unix VM, and get network access.  Just set the two VM’s up for a named pipe (\\.\pipe\dellunix) and make one of them a server, and start that VM 1st.  The steps to prepare Windows NT have been outlined before.

Telnet via SLIP

Legal disclaimer: Dell UNIX is a commercial software and should not be distributed without manufacturers permission. However as the operating system has been dead for 20 years and with a long tradition from Unix Heritage Society and Bitsavers I’m publishing this in good faith under abandonware category. If Dell or any other copyright holder wishes this software removed, please let me know.

Attached are:

  • firstboot image
  • all (pkg) software installed
  • setup instructions if you wish to install from scratch.

Download:

You may also be interested in my post about a sister System V operating system – Interactive UNIX:

Update: Dell Unix now runs on 86Box with higher resolution and proper networking.

Dungeon for the SHARP x68000 (on NetBSD)

Dungeon on the x68000

Its been a while since I’ve added a new port of Dungeon (zork!) so here we go!

Building f2c was a snap on the x68000, it just took a while..

Getting data into the VM was easy, just make an ISO image, and mount it.. Getting data out was.. a challenge, as the floppy doesn’t work under NetBSD, and it didn’t seem to want to see my other hard disks, just my root.  Well thankfully it’s virtual so I just did a:

tar -cvf /dev/sd0c dungeon.tar.gz

NEVER do that on a real machine kids!!!

Anyways here you go, for anyone who loves zork & the m68k!