Monday, March 05, 2007

Today's progeny of the original IBM PC

I was just thinking recently and was wondering if the BIOS date was still "engraved" at the same high memory address, the 384KB system-reserved space of the 1MB total memory the 8086/88 CPUs could address (a ROM address in this case) as the original 1981 IBM PC. And, it is.

That address was/is FFFF:0005 or F000:FFF5 (remember, there are a multitude of ways to represent the same physical address within the segmented addressing scheme that can still be utilized by the x86 processors). Yes, even though modern CPUs and the OSes running on them now universally use straight linear addressing these days, the modern CPUs still retain the ability to utilize segmented addressing, maintaining backward-compatibility with the 8086/88.

Well, I remember I had written a simple x86 assembly language prog back in the early-90s (before DOS 5.0 debuted, as many folk were using DOS 4.01 and even some folk still using DOS 3.3 at the time) to display that date so that I would know how old the BIOS was (without rebooting the machine) and if it might need to be updated with new socketed BIOS ROM chips. As I recall, there were two BIOS chips on AT-class machines (286 or 386DX/SX CPUs), one called EVEN and the other ODD, representing even and odd bytes within the ROM.

They were not EEPROM chips back then, so you couldn't update them by "flashing" the chip as we do today. With certain AT-class machines you couldn't even "update" the BIOS ROM chips at all, as they were soldered onto the mobo, but with others they were socketed and could be "updated" by buying a BIOS chip upgrade and inserting them. Most home-users, of course, never bothered to perform that kind of upgrade back then, however, they simply bought new machines or a new mobo.

Granted, today there are a plethora of utilities that supply you that info, along with just about any other pertinent info about your hardware. However, to demonstrate how basic PC hardware at the low-level has remained basically unchanged in 25 years, and for those who like to dabble in assembly language, I'll post an image here showing the code typed up in the ubiquitous DEBUG utility included with MS-DOS, PC-DOS, Windows 3.x, Windows NT, Windows 9x/ME/XP (Vista?) to show how certain things haven't changed in 25 years.

Code to display BIOS date:

You can run this 22-byte program I named simply biosdate.com on any PC-compatible computer and retrieve the BIOS date because even today's machines still remain the progeny of the original IBM PC of 1981...hehe.

Another interesting tidbit has to do with the OS (Windows XP) and not the hardware. Notice that I used the the old DOS function call 40h (Write to File or Device) to display the contents of memory location FFFF:0005. Yep, even Windows XP retains many, if not all, of the "ancient" DOS function calls.

Anyway, I just thought this little irrelevant exercise might interest a few folk out there who, like me, wondered if their PC still retained any IBM PC-era baggage.