OS/2 6.304: Who Has More?

Yet another interesting item that I recently ran through a Kryoflux is a set of 30 floppies labeled “IBM OS/2 Version 2.0 Pre-release Evaluation Copy – 6.304”. In this case, there’s no mystery as to what it is: 6.304 was the last beta of OS/2 2.0 released in February 1992, very shortly before the official GA release of OS/2 2.0. Very late in the game, this pre-release among other things introduced a new storage subsystem with familiar DMD and ADD drivers.

IBM OS/2 2.0 Pre-release 6.304 (1992, fragmentary)

The trouble with this disk set is that it’s very incomplete. My estimate is that there should have been 32 disks in the set, possibly a little more. I have thirty, so it should be almost complete… except it’s not at all because a) there are duplicates of several floppies, and b) some of the floppies had been overwritten a long time ago.

Continue reading
Posted in Archiving, IBM, OS/2, Pre-release | 8 Comments

EISA Specification 3.1

While researching the Compaq Intelligent Drive Array (IDA), a circa 1990 EISA-based IDE RAID controller, I quickly established that there’s very little surviving information about it, and most of what there is can be found in two or three patents that Compaq filed around 1989.

The most relevant of the patents was filed as “Bus master command protocol”, but somehow ended up getting renamed to “Method for controlling disk array operations by receiving logical disk requests and translating the requests to multiple physical disk specific commands”, now US Patent 5,249,279. The text includes an interesting statement: “The EISA specification Version 3.1 is incorporated as Appendix 1 to U.S. Pat. No. 5,101,492 to Schultz et al., and is hereby incorporated by reference”. Only US Patent 5,101,492 is nowhere to be found.

But further searching led to European Patent EP0426184 titled “Bus master command protocol”, which does in fact include the entire 435-page EISA 3.1 specification as an appendix.

The patent is long expired, the information within it is now in the public domain, so I took the liberty of extracting the appendix and making the EISA Specification version 3.1 available as a separate PDF. The scan quality is not great but the text is legible. Please note that the printed page numbers are off because they are page numbers of the patent. However, I fixed up the PDF page numbers to correspond to the original document. This was made slightly complicated by the fact that there are several pages missing; page 173 in the PDF explains why — due to a misprint in an earlier edition, some pages were re-numbered and pages 173-180 no longer exist in the corrected edition.

Note that the EISA specification, being a superset of ISA, also includes a specification of the ISA bus. And I really wish I’d found this earlier.

Posted in Documentation, EISA | 19 Comments

WD1007V Commands

While researching material for a previous article, I wanted to examine the only AT-compatible ESDI controller I have, a Western Digital WD1007V-SE2. My board was made in 1990, the firmware is from 1989, and the controller was likely introduced in 1988 judging by the copyright date on the PCB.

Western Digital WD1007V-SE2 ESDI controller (1990)

There is no real technical documentation for this controller. That is to say, the core chip, the WD42C22A ‘Venus’ is reasonably well documented, but the one thing this otherwise very capable chip does not do is process AT task file commands. That’s all handled by a separate microcontroller/firmware.

Under normal circumstances, I would first try to probe the controller from the host side and see what commands it responds to, but without a functioning ESDI drive that is not an option, and finding a working ESDI drive for a sane price appears to be no longer possible. Reverse engineering it is, then.

Continue reading
Posted in Debugging, Documentation, ESDI, Western Digital | 3 Comments

Whence IDENTIFY DRIVE?

As most everyone knows, the AT Attachment standard (informally known as IDE) started by literally bolting the previously standalone AT disk controller onto a MFM drive with a ST506 interface and connecting the assembly to the host system with a 40-pin ribbon cable.

As it often happens, the standardization process was far behind the technology and the first ATA standard officially became ANSI standard X3.221-1994 in (obviously) 1994. The standard had been in the works for several years by that time, but even so the first ATA standard drafts appeared in mid-1990, when at least half a dozen vendors have been shipping ATA drives for some time.

From a software perspective, an IDE drive is almost indistinguishable from an ST506 drive plus an AT controller—in fact that was the whole point of IDE. One crucial difference is the IDENTIFY DRIVE command.

Early integrated drive electronics

The IDENTIFY DRIVE command (soon renamed to IDENTIFY DEVICE, in order to reflect the broadened scope of ATA) makes it possible to build self-configuring systems, also known as Plug and Play, even though apparently no one thought of calling it ATA PnP until about 1995. But where did it come from and why?

Continue reading
Posted in Compaq, Documentation, IDE, PC hardware, PC history, Storage | 36 Comments

OS/2 1.2 EE DAP

That same shoebox I mentioned the other day also contained three plain cardboard 3.5″ floppy boxes with a set of disks that look like this:

OS/2 1.2 EE DAP Kit, whatever that means

Once again, despite the plain-looking labels, these are mass-duplicated floppies, which is handy because Kryoflux can tell if they had been modified. And they hadn’t.

DAP stands for IBM’s Developer Assistance Program, that’s the easy part. But what’s a “DAP Kit”? Is it some kind of a pre-release? Semi-public beta? Or an actual release shipped to developers early?

There’s nothing obvious on the floppy labels or on the floppies themselves that answers the question. So… time to start digging.

Continue reading
Posted in Archiving, IBM, Kryoflux, OS/2, PC history | 2 Comments

Like New

About twenty years ago, I bought a used IBM Model M keyboard with a PS/2 connector. I believe it cost me around $5-$10 plus shipping at the time. A good investment, given that this sort of keyboard is probably worth $100 or more these days.

Once about every 10 years, I clean the keyboard. This time I removed all the key caps I could and ran them through a dishwasher; that worked very well. The rest I cleaned with a damp cloth and a bit of dish soap.

Looks like new

After the cleaning, the keyboard looks really good. It was used when I got it, I used it pretty heavily for about ten years, and it’s now close to 30 years old. And yet it shows much less wear than the vast majority of keyboards of considerably newer vintage.

Continue reading
Posted in IBM, Keyboard, PC hardware | 5 Comments

Archival Puzzles

Every now and then I attack the large amount of floppy disks in my basement and run a bunch of them through Kryoflux. This time it was a shoebox full of OS/2 related floppies. Among them was a very incomplete set of 10 floppies labeled “PRE-RELEASE IBM OS/2 2.0 32-bit Graphics Engine and WIN-OS/2 VERSION 3.1”, with the floppy masters most likely created on August 14, 1992.

What is this really?

Now, the labeling on those floppies is a bit funny. It’s obviously not a pre-release of OS/2 2.0 if the floppies are from August 1992 and OS/2 2.0 had already been released in March/April. At the same time the floppies don’t say “OS/2 2.1 pre-release”.

When I compared the floppy contents with existing floppy images in my archive, I realized that they (nearly) match two different sets: One that I thought was an OS/2 2.1 beta, and another that I identified as OS/2 2.00.1.

Upon closer examination, the supposed 2.1 beta and OS/2 2.00.1 images were 100% identical; clearly my fault. The images had come from an October 1992 IBM PDK CD, and on the CD they are rather unhelpfully labeled “Operating System OS/2 2.X”.

Since this is IBM we’re talking about, there’s both some measure of chaos and decently sized written record. Consulting the OS/2 V2.1 Technical Update shed some light on the confusion. Some.

Continue reading
Posted in Archiving, IBM, Kryoflux, OS/2, Pre-release | 30 Comments

DOS SMB Client Performance

Recently I had the need to use several different DOS VMs that all used a SMB network client. Although I did not use networking heavily, I noticed that there are massive differences in performance between the VMs. Copying a circa 42 MB file would take anywhere between about 5 seconds and 49 minutes (not a typo). What’s more, some VMs were fast in both directions, while others were very slow sending and yet others were very slow receiving.

Since in all cases the VMs communicated with the same server (Synology NAS running Samba) from the same host (AMD Ryzen 3800X running Windows 10 and VirtualBox), there really should not be that much performance variation, and yet there it was.

In all cases, NetBIOS over TCP/IP was used as the protocol underlying SMB, and it should be said that TCP/IP greatly complicates the picture. I used three different software stacks, mostly to get some sanity checking:

  • Microsoft Network Client 3.11 with included TCP/IP
  • IBM DOS LAN Services (DLS) version 4.0 with IBM TCP/IP
  • IBM DOS LAN Services 5.0 with Network TeleSystems TCP/IP

The SMB clients are in all cases very similar and in fact nearly identical. But the TCP/IP stacks are obviously different, and it matters.

Continue reading
Posted in DOS, IBM, Microsoft, Networking | 15 Comments

It Was a Problem Back in the Day

Several years ago, I found out the hard way that old versions of DOS have trouble with hard disks with more than 17 sectors per track. To recap, DOS versions older than 3.3 may hang when booting from a hard disk with more than 17 sectors per track, but the exact behavior is somewhat complex.

Old DOS versions required IO.SYS to be contiguous and attempted to load it with a single disk read if possible, but perhaps to keep the code size small, the loading code isn’t very sophisticated and reads sectors from the beginning of IO.SYS until the end of the disk track. With 17 sectors per track, there can never be a problem. With lots of sectors (more than 30 can be a problem) DOS can hang, but the behavior depends on exactly where IO.SYS begins relative to the end of the disk track it’s on. Even on a disk with maximum (63) sectors per track, old DOS versions may boot fine if IO.SYS is sufficiently close to the end of the track.

A 1990 Western Digital WD1007V-SE2 ESDI Controller

Where exactly IO.SYS is depends on the size of the FAT tables and the root directory size. In practice the root directory size is more or less fixed, but the FAT size very much depends on the size of the DOS partition. Needless to say, the behavior is unpredictable to users and highly undesirable.

The problem was fixed in 1986 or early 1987, which implies that it was already known. Now I have a good idea why it was known.

Continue reading
Posted in Bugs, DOS, ESDI, Storage | 26 Comments

Installing IBM OS/2 1.0 in a VirtualBox VM

Some time ago I wrote that IBM OS/2 1.0 and 1.1 cannot be installed in a VM due to the way it switches between real and protected mode. At the time I did not realize that there was another obstacle, namely IBM’s use of the undocumented 80286 LOADALL instruction.

For reasons that are not very clear, Microsoft’s editions of OS/2 used 386 instructions since before OS/2 1.0 was released, but IBM’s versions did not. When Microsoft’s OS/2 kernels detected that they were running on an 80386 (or newer) processor, they used 386-specific code to return from protected mode back to real mode. This was faster than the 286 method which required a CPU reset (OS/2 did not utilize the common method which relied on the PC/AT keyboard controller to reset the CPU and instead caused a processor shutdown through a triple fault, inducing a reset that way; the OS/2 method ought to be faster). Microsoft’s OS/2 kernels also didn’t use the LOADALL instruction when running on a 386.

IBM’s OS/2 1.0/1.1 kernels on the other hand didn’t care one bit about running on a 386, at least not on an AT-compatible machine—perhaps because at the time IBM had no AT-compatible 386 systems on the market or even in the pipeline. IBM’s OS/2 1.0 can still run on a 386 or newer CPU, but it requires a bit of help from the machine’s BIOS.

The calming Big Blue logo

The BIOS must properly support software that sets the CMOS shutdown status byte, resets the CPU (either by triple-faulting, through the keyboard controller, or by any other means), and regains control after the reset while minimally disturbing the machine state. That functionality is common enough because it was also used by DOS extenders and many OS boot loaders.

What’s less common is BIOS support for emulating a 286 LOADALL instruction. Even though the 80386 has its own undocumented LOADALL, a 486 or later CPU has nothing of the sort. However, a 386 or later can emulate enough of 286 LOADALL functionality to satisfy common uses of it, which includes things like old HIMEM.SYS, RAMDRIVE.SYS, or OS/2.

The VirtualBox BIOS has had support for LOADALL emulation for a while now, so it should be able to run IBM’s OS/2 1.0. And it is able to run it… but not install. Or not quite. Fortunately there’s a way around it…

Continue reading
Posted in OS/2, VirtualBox, Virtualization | 18 Comments