Interrupt 68h and EMM386

While working with a modified BIOS image in a virtual machine, I ran into mysterious hangs when trying to load an old version of EMM386.SYS from MS-DOS 4.01. A newer version of EMM386 did not exhibit the problem.

A quick debugging session showed that the culprit was an uninitialized interrupt vector 68h. The BIOS POST left the vector as zeros; newer EMM386 versions verify that the vector is non-zero before calling through it. That explains why only the old EMM386 locked up, but it doesn’t explain what EMM386 was trying to do in the first place. Continue reading

Posted in BIOS, DOS, Virtualization | Leave a comment

Researching the history of PC computing

Finding out what happened in the world of PC computing 20 or 25 years ago isn’t always easy. The 1980s were over before the Internet took off, which means that most of the information was never publicly available in electronic form. Old print magazines ended up being pulped many years ago. People often forget what happened 20 years ago, and their recollections cannot be always entirely trusted.

However, there are other trends working against amnesia. Some old print media are being digitized and indexed. Sifting through the back issues of InfoWorld with the help of Google Books is infinitely more efficient than the methods which were actually available around 1990. Old floppies and CDs are likewise being archived in digital form. Developer releases of Windows from 1984 are now available on the Net, as well as early previews of Windows NT from 1991. At the time of their release, those materials were only available to a select few, often under strict non-disclosure agreements. Continue reading

Posted in PC history | 2 Comments

OS/2 2.0 Comdex Fall ’91

In October 1991, IBM brought an OS/2 2.0 pre-release (build 6.167) to the Fall Comdex in Las Vegas. This was a semi-official release of 32-bit OS/2, effectively a beta version, although it wasn’t called a beta. At the same Comdex, IBM also announced that the planned release date of OS/2 2.0 was the first quarter of 1992, a few months later than the previously expected 1991 release.

It is useful to note that October 1991 also was when Microsoft made available the first limited developer release of Windows NT, but the final public release of Windows NT 3.1 was still about 20 months away. At the Fall Comdex, Microsoft talked about releasing NT in the second half of 1992, but that turned out to be wildly unrealistic.

Continue reading
Posted in NT, OS/2 | 16 Comments

The floppy controller evolution

The floppy subsystem in PCs hadn’t mutated over time quite as much as, say, the hard disk subsystem, but prior to its extinction in the early 21st century, the floppy disk controller (FDC) did evolve noticeably.

In the original IBM PC (1981) and PC/XT (1983), the FDC was physically located on a separate diskette adapter card. The FDC itself was a NEC µPD765A or a compatible part, such as the Intel 8272A. It’s worth mentioning that nearly all floppy controllers supported up to four drives, but systems with more than two drives were extremely rare. The reason was that only two drives were supported per cable, while 99.99% of all systems only provided a single floppy cable connector.

The original FDC only supported two I/O ports: the read-only Main Status Register (MSR) and the Data Register, used for both reading and writing. The adapter card added another port, the Digital Output Register (DOR), used primarily for drive selection and controlling drive motors. Continue reading

Posted in PC architecture | 14 Comments

Xenix 286 in a VM

The fixes which were included in VirtualBox 4.0.8 happen to help not only OS/2 1.x but also Xenix. The 386 versions of Xenix 2.3.x (not necessarily older versions!) should install in a VM without trouble, but the 286 versions are trickier. The reason for that is deceptively simple: different distribution media.

Xenix is one of the few operating systems which determine the format of diskettes based on the floppy drive type. In contrast, all operating systems which use DOS formatted floppies (including DOS, OS/2, and Windows) use the information stored on the diskette itself to determine its format. Continue reading

Posted in VirtualBox, Xenix | 10 Comments

Installing OS/2 1.x in a VirtualBox VM

Installing 16-bit OS/2 in a virtual machine ranges between “tricky” and “impossible”, depending on the version of OS/2 and virtualization software used. In VirtualBox 4.0.8, things have moved further away from “impossible” and closer towards merely “tricky”. Version 4.0.8 fixed problems with floppy emulation which were making installation difficult, but plenty of hurdles still remain. Most of those have little to do with virtualization and are simply a consequence of OS/2’s age—the PCs of the late 1980s were not quite like today’s PCs. Continue reading

Posted in OS/2, VirtualBox | 29 Comments

The Fixed Disk Parameter Table

The Fixed Disk Parameter Table, or FDPT, is a structure primarily used by the BIOS in IBM compatible computers, but is also of critical importance to some (especially older) operating systems which do not use the BIOS.

The FDPT was introduced in the IBM PC/XT as a necessity in implementing hard drive (aka fixed disk) support; however, I’ll skip the PC/XT specific details. The IBM PC/AT redefined the FDPT format, but the purpose remained the same: Define the physical characteristics of a hard disk so that the same BIOS ROM could be used with more than a single drive model. Most importantly, the FDPT contained the disk geometry—the number of cylinders, heads, and sectors per track. Continue reading

Posted in BIOS, PC architecture, Virtualization | 3 Comments

Geometry Problems

When introducing hard disk support in the PC/XT back in early 1983, IBM made a very unfortunate design decision: the information about drive geometry was exposed in the BIOS, and even worse, in the boot sector stored on the disk.

SCSI storage devices always used logical block numbers to access data, and drive geometry was something internal to a disk drive, not visible to the user. But SCSI was not yet fully established in the early 1980s and IBM was looking for a cheap technology. Therefore, simple MFM hard disks and controllers were used in both the IBM PC/XT and later the PC/AT. On the hardware level, both addressed disk sectors in terms of cylinders, heads, and sectors (CHS).

Ironically, the DOS FAT file systems never cared about geometry and only used logical sector (or cluster) numbers, with a low-level BIOS driver translating from logical sector numbers to whatever addressing scheme the underlying storage required.

Continue reading

Posted in BIOS, PC architecture, Virtualization | 2 Comments

The PC floppy subsystem

The PC floppy subsystem, ubiquitous and indispensable until the early 21st century, suffered the typical fate of many “legacy” subsystems: The initial design was adequate, but did not adapt to newer and more complex hardware.

With the original IBM PC, things were simple. The only choices were single- or double-sided 5¼” double-density drive (the single-sided drives were soon obsoleted) and how many. The number of disks was configured via switches, and the number of sides was something the operating system could easily take care of when formatting a new disk. The NEC μPD765A floppy controller was used, setting the standard for years to come. Continue reading

Posted in PC architecture | Leave a comment

HIMEM.SYS, unreal mode, and LOADALL

The previous post talked about real mode on 286+ processors which behaves more like a slightly modified variant of protected mode rather than the old 8088/8086 processors. Real mode with non-compatible selector bases or limits is usually called unreal mode or big real mode. Even though Intel never clearly documented the behavior in detail, it is more or less set in stone thanks to our dear friend, backwards compatibility.

That’s because unreal mode had some rather prominent users—one of them was Microsoft’s HIMEM.SYS, used on nearly every PC in the 1990s. While disassembling HIMEM.SYS might be instructive, it would be a waste of time in this case, since Microsoft published the full source code to several HIMEM.SYS 2.x versions. That way, the evolution of the code can be easily traced. Continue reading

Posted in DOS, x86 | 6 Comments