Early-to-middle IBM-PC history (was: End-user uses for x86-64)
Tom Buskey
tom at buskey.name
Mon Feb 19 00:16:46 EST 2007
On 2/18/07, Ben Scott <dragonhawk at gmail.com> wrote:
>
> On 2/18/07, Tom Buskey <tom at buskey.name> wrote:
>
>
MS-DOS was, is, and always will be limited to the 1 MB address space
> of the original 8086-based IBM-PC design, in 64 KB segments at a time.
> That's further eaten into by space reserved for hardware ROM and I/O.
> On most systems, there was (up to) 640 KB for software ("conventional
> memory") and 384 KB for hardware ("high memory"). (If you had a
> Hercules monochrome graphics adapter, you could bump conventional
> memory to 700-something KB, as the Herc mapped it's hardware into
> different regions.)
I had a Zenith Z-100 before I had a PC. It had an 8088 and an 8085, ran DOS
and had 768k ram. It was not PC compatible though someone wrote software
that did (ZPC).
> EMS was originally a hardware spec to address more memory.
>
> That's incorrect. EMS (Expanded Memory Specification) was another
> memory windowing scheme. You put RAM on an expansion card. The CPU
> could not address it in any way. You could, however, invoke hardware
> I/O routines that would swap a block of memory from conventional to
> EMS banks (or vice versa). You still could only address 64 KB at a
> time, though, and no more than 1 MB total.
I remember it always being a memory card w/ a driver before QEMM 386 and the
like. Well, it was some time ago ;-)
It was also called LIM (Lotus Intel Microsoft).
> > XMS was a software hack that didn't work on the 8088.
>
> XMS (Extended Memory Specification) was the standard that evolved
> for accessing (from DOS) CPU-addressable memory above 1 MB. DOS and
> DOS programs still ran in real mode, but a memory manager (an add-on
> product in the DOS world) could switch blocks of memory in and out of
> the DOS real mode memory space (similar to how EMS worked).
>
> The 8086/8 could not address more than 1 MB. The 80286 could -- up
> to 16 MB, as you note. That's a huge jump, so of course DOS
> programmers wanted to access it, but were stuck in a 16-bit segment.
> Hence the need for XMS.
>
> > The 386 could do EMS (& XMS) in software ...
>
> Not really correct. EMS and XMS are both software interfaces. EMS
> existed to allow the many different hardware-incompatible memory
> expansion hards to provide a consistent interface to DOS software.
As I remember it, EMS for the 8088 and 286 was a special card.
Standard RAM on the '286 could be used for XMS (I had a 1MB card that
brought my '286 up to 1.5MB)
The 386 could do EMS w/o special cards.
Yes, that's right, under DOS, even your RAM needed a device driver.
> XMS existed because even though the hardware could touch more memory,
> DOS software still couldn't.
>
> CPU-addressable memory above 1 MB was possible with the 80286. It
> wasn't used by most programs, because the 286 couldn't switch back to
> real mode once switched into protected mode, and a lot of DOS software
The A20 hack let the '286 swap back & forth. That's what made XMS possible.
> isn't compatible with protected mode. It was done by some software
> through -- typically business applications that wanted to work with
> more than 64 KB at a time.
You mean 640k of course. 64k was small memory mode but there was a large
mode that had up to 640k. (Trying to remember my old Turbo C)
Software emulators were available that turned used XMS to provide
> EMS (for software that was only EMS aware), but that's nothing to do
> with the i386.
>
> The i386's major changes were that it enabled a 32-bit address
> space, it could switch back to real mode (out of protected mode), and
> it offered virtual 8086 mode. Suddenly, you could reliably multitask
> DOS programs. Multitasking was available before, but without memory
> protection. Now, when one of the DOS programs went bonkers and
> trashed memory, instead of a reboot, you could just kill the "DOS
> box".
>
> Sure the i386 was faster. Faster is always appreciated. But no
> matter how fast you ran a 286, you couldn't reliably multitask DOS
> programs. That was the "killer app" for Win 3.0 for many
>
> people-doing-ordinary-tasks-like-reading-email-browsing-the-web-writing-letters-looking-at-pictures-and-calculating-their-taxes.
> Sure, it sucked like a black hole, but DOS still sucked more. After
> swimming in sewage, even NJ looks like paradise. ;-)
>
> The additional address space also enables practical use of larger
> memories. I know you're married to the idea that any Turing-complete
> design can do anything any *other* Turing-complete design can, but
Not me...
here in the real world, we actually want to get work done, and we
> don't have time to wait for the infinitely long paper tape to move
> back and forth.
>
> > I don't think Windows 95 would run on a '286 ...
>
> Correct.
>
> > ... but I also think the DOS market was pretty much done at that point.
>
> HAH! One of the major complaints about '95 was that some DOS
> software wouldn't run anymore. There was a whole "MS-DOS
> Compatibility Mode" which was essentially an automatic dual-boot: It
> would shut down the whole OS to run one DOS program. Hell, people
> still run DOS crap *today*. It's like System/360; it saw enough use
> that it's never going away. People will be running DOS programs in
> DOS emulators (prolly running *those* emulators under some *other*
> emulator) long after we're all dead and buried.
>
> This is, incidentally, one of the "limitations" of x86-64. In long
> mode (64-bit mode), you cannot run 16-bit real mode code. At all.
> There's no virtual mode, either. So 64-bit Windows cannot run DOS or
> Win16 code (of which there is still a depressingly large amount).
> That's one reason most Windows systems are still 32-bit OS installs.
> Of course, it means all the cool x86-64 stuff just ends up being used
> primarily as a really, *really* fast i386.
Hmm, does DOSemu have issues on 64bit linux?
> Remember having to quit a program completely before running another one?
>
> Heh. Yah. I ended up using multi-program environments early on.
> PC/GEOS offered preemptive multitasking (without memory protection) on
> an 8086. Then I started using DESQview... :)
DESQview was barely usable on an 8088. Tolerable on a '286. Awesome on a
'386. Along with QEMM.
DESQview/X was interesting. I think there are free copies out there. It
turned DOS into a multitasking X11 server system. Run a DOS program on the
PC and display it back to your Unix box. It could do most DOS programs but
not Windows.
> > As time went on, the market chased speed.
>
> Apparently, you never had to fight to get 3 KB more out of
> conventional memory, to load just one more TSR or that much of a
> bigger program. The ability to address more than 64 KB at a time was
> wanted by everyone else on the planet except you.
I think you're confusing me with someone else on this issue. I implied at
the beginning that memory was an issue that EMS tried to solve.
In any event, I agree with you about RAM.
Anyone doing games then had tricks to save RAM. DOS 5.0 had LOADHIGH to
move parts out of the 640k area. You could set COMPSPEC= at the start of
autoexec.bat and COMSPEC=command.com at the end to eek out a few more bytes
for your environment.
TSRs were an interesting solution in the DOS era. MacOS had DAs in the pre
multifinder days too.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.gnhlug.org/mailman/private/gnhlug-discuss/attachments/20070219/fdd9d455/attachment.html
More information about the gnhlug-discuss
mailing list