Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Sep 1997 03:05:00 -0500
From:      Tony Overfield <tony@dell.com>
To:        Simon Shapiro <Shimon@i-Connect.Net>, Terry Lambert <tlambert@primenet.com>
Cc:        hackers@FreeBSD.ORG
Subject:   Re: INB question
Message-ID:  <3.0.2.32.19970929030500.006ff1c0@bugs.us.dell.com>
In-Reply-To: <XFMail.970928173337.Shimon@i-Connect.Net>
References:  <199709282256.PAA18439@usr07.primenet.com>

next in thread | previous in thread | raw e-mail | index | archive | help
At 05:33 PM 9/28/97 -0700, Simon Shapiro wrote:
>
>Hi Terry Lambert;  On 28-Sep-97 you wrote: 
>> > Port 0x18, on many systems, is an alias of port 0x08, which is 
>> > the read-only DMA status register and the write-only DMA command 
>> > register.  Likewise, port 0x1A is often an alias of the write-only 
>> > port 0x0A DMA mask register.
>>  
>>  Peachy.  I suppose this was done "for no good reason", as usual in
>>  PC hardware design.  8-(.
>
>At the time, it probably saved a nickel by saving some address latch.
>A nickel, times some millions is lots of money.
>
>What percentage of the profit it represents?  Who cares.  Greed is greed.

Actually, I think "no good reason" is the best answer here.  I don't think 
there's a villain to be found here.

This was first hooked up this way back in 1981 when the first IBM PC 
came out.  This has been working the same way for over 15 years.  
They had no way to know that it would suddenly become a problem for 
Terry in late 1997.

*opinion on*

It was not greed that drove them to make it this way.  They weren't 
looking for an ideal circuit so that they could take a nickel back out 
of it.  They came up with a simple circuit that solved all known needs 
at that time.  They probably didn't even realize that the circuit 
lacked "vision,"  since they had no idea they were laying the 
foundations of such a colossal legacy.

*opinion off*

*casual, semi-technical circuit observations follow*

The address decoder circuit used in the first IBM PC (and the AT, and 
many derivative designs) consists of an LS138 3->8 decoder.  This chip 
has three encoded inputs, three "G" chip select inputs, and 8 decoded 
outputs.  They hooked up address lines A5, A6, and A7 to the three 
inputs of the decoder and A8 and A9 to the two active-low "G" inputs.  
The last "G" input is hooked up to AEN (or it's moral equivalent).

This results in a decoder that decodes 10-bit I/O addresses in 
8 blocks of 32 bytes ranging from 0x000 to 0x0E0.  They then 
assigned most of those 32 byte chunks to the various devices 
we're all now so familiar with.

The address decode aliasing on the various devices is a direct 
consequence of this circuit.  For example, the DMA controller (8237) 
decodes only 4 address lines, thus those 16 decoded bytes will appear 
twice within the 32-byte block created by the LS138.

-





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3.0.2.32.19970929030500.006ff1c0>