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>