[comp.sys.ibm.pc] Usable I/O Address range on the PC bus ...

oolidjr@hubcap.UUCP (Joe Moll) (11/16/88)

What is the deal with the usuable I/O address range on the IBM PC bus??

I read in a manual that the addresses above 0x0400 were unusable?  Is
this true??  I don't see how this could be, since all the address lines
and control signals off the 8088 are available on the bus.

Could someone shed some light on this please???  I was about to wire
a project into I/O address 0x0400 and it needs to be done soon.

Thanx Much ...
Joe

                   /=----------+^ jlmoll@clemson.bitnet
Joe Moll  --------=\  Internet |  oolidjr@hubcap.clemson.edu
Clemson University  \     UUCP |  {pick a hub}!hubcap!oolidjr
Clemson, SC   \     |\=--------+--------/`

seeger@beach.cis.ufl.edu (F. L. Charles Seeger III) (11/16/88)

In article <3552@hubcap.UUCP> oolidjr@hubcap.UUCP (Joe Moll) writes:
|What is the deal with the usuable I/O address range on the IBM PC bus??
|
|I read in a manual that the addresses above 0x0400 were unusable?  Is
|this true??  I don't see how this could be, since all the address lines
|and control signals off the 8088 are available on the bus.
|
|Could someone shed some light on this please???  I was about to wire
|a project into I/O address 0x0400 and it needs to be done soon.
|
|Thanx Much ...
|Joe

Only the first ten bits of the address are decoded on the motherboard.
Hence, any addresses that the motherboard responds to will be shadowed
into the upper regions of the address range.  You can make use of 
higher addresses on IO cards, but you must be certain that the lower
ten bits of the addresses do not conflict with any devices on the
motherboard.  Choose whatever address range is appropriate in the
ten bit range, then make sure that all your addresses, both above
and below 0400, are within that range for the lower ten bits.  The
conventions of IO addresses are published, and you should consult
them.  They're not within a few feet of my keyboard, but I can
provide references or the info, if needed.  I suggest using PALs
for address decoding, if possible, because they're so easy to change.
Be aware that some IO cards may not decode all address bits, either.

Good luck,
Chuck

phil@diablo.amd.com (Phil Ngai) (11/16/88)

In article <3552@hubcap.UUCP> oolidjr@hubcap.UUCP (Joe Moll) writes:
|I read in a manual that the addresses above 0x0400 were unusable?  Is
|this true??  I don't see how this could be, since all the address lines
|and control signals off the 8088 are available on the bus.

This is not true. What is true is that the motherboard and most
plug-ins only decode (the low) 10 address bits. So if you use address
4f0, it will collide with the motherboard's 0f0.  This seems to be
very inconvenient but there is a nice trick to get lots of IO address
space. 

Every byte that you pick is equivalent to 64 bytes. If you pick byte
200, you can also use 600, A00, etc. No other hardware can possibly be
broken by this since it is the same as if you only decoded the low 10
address bits. You know all the address bits are there as 20 or more
bits are needed for memory addressing. In theory this method should work. 

In practice, this is the method Lotus, Intel, and Microsoft use for
expanded (not extended) memory, so you know it has to work. 

I strongly recommend you grab the least number of bytes possible out
of the range 0-3ff. It's a very limited resource that has to be shared
with all the plug-ins in the world. 

--

Phil Ngai, phil@diablo.amd.com
{uunet,decwrl,ucbvax}!amdcad!phil 

mguyott@mirror.TMC.COM (Marc Guyott) (11/17/88)

In article <3552@hubcap.UUCP> oolidjr@hubcap.UUCP (Joe Moll) writes:
>
>Could someone shed some light on this please???  I was about to wire
>a project into I/O address 0x0400 and it needs to be done soon.
>

I believe that the reason I/O addresses only go up to 0x03FF is because
I/O port addressing only uses the least significant 10 bits of the specified
address.  This is the way the hardware works, no other reason.

I also thought you might find the following listing of interest:


The following is from "The Peter Norton Programmer's Guide to the IBM PC":

Figure 2-9.  The ports and port addresses used in the PCjr, the PC/XT, and
the AT computers.

Description                                        Range
                                     PCjr         PC/XT           AT
DMA Controller (8237)                n/a         000-00F        000-01F
Interrupt controller (8259)        020-027       020-021        020-03F
Timer (8253;8254.2 in AT)          040-047       040-043        040-05F
PPI (8255)                         060-067       060-063          n/a
Keyboard (8042)                      n/a           n/a          060-06F
DMA page register (74LS612)          n/a         080-083        080-09F
NMI mask register                  0A0-0A7         0A           070-07F
Interrupt controller 2 (8259)        n/a           n/a          0A0-0BF
Sound generator (SN76496N)         0C0-0C7         n/a            n/a
DMA controller 2 (8237)              n/a           n/a          0C0-0DF
Clear/reset math coprocessor         n/a           n/a          0F0-0F1
Math coprocessor                     n/a           n/a          0F8-0FF
Joystick (game controller)         200-207       200-20F        200-207
Expansion unit                       n/a         210-217          n/a
Parallel printer (secondary)         n/a           n/a          278-27F
Serial port (primary)              2F8-2FF       3F8-3FF        3F8-3FF
Serial port (secondary)              n/a         2F8-2FF        2F8-2FF
Prototype card                       n/a         300-31F        300-31F
Fixed disk                           n/a         320-32F        1F0-1F8
Parallel printer (primary)           n/a         378-37F        378-37F
SDLC (secondary BISYNC in AT only)   n/a         380-38F        380-38F
BISYNC (primary)                     n/a           n/a          3A0-3AF
Monochrome adapter/printer           n/a         3B0-3BF        3B0-3BF
Color/graphics adapter               n/a         3D0-3DF        3D0-3DF
Diskette controller                0F0-0FF       3F0-3F7        3F0-3F7

----
              "All my life I always wanted to BE somebody.
               I see now I should have been more specific."
                      Jane Wagner (but I agree 8-)
Marc Guyott                                         mguyott@mirror.TMC.COM
{mit-eddie, pyramid, harvard!wjh12, xait, datacube}!mirror!mguyott
Mirror Systems	Cambridge, MA  02140                617/661-0777

jmbj@whuts.ATT.COM (BITTMAN) (11/17/88)

> |I read in a manual that the addresses above 0x0400 were unusable? 

Base I/O addresses above this range cannot be used without claiming
the address equal to the lower 10 bits.

> This is not true. What is true is that the motherboard and most
> plug-ins only decode (the low) 10 address bits. So if you use address
> 4f0, it will collide with the motherboard's 0f0. 

> Every byte that you pick is equivalent to 64 bytes. If you pick byte
        ^^^^                                ^^^^^^^^
> 200, you can also use 600, A00, etc. No other hardware can possibly be
> broken by this since it is the same as if you only decoded the low 10
> address bits. You know all the address bits are there as 20 or more
> bits are needed for memory addressing. In theory this method should work. 

Assuming a "byte" here is an I/O address, there are at least 1024
addresses available for each I/O address claimed, the 8-bit PC XT bus has
10 "extra" address lines (1024) and the AT has 14 "extra" for a
total of (16384).  Just use the lower 10 address bits like high-order
bits on any other system, to select your board. Then use the upper
bits as decodes or direct ram addressing, etc.

> I strongly recommend you grab the least number of bytes possible out
> of the range 0-3ff. It's a very limited resource that has to be shared
> with all the plug-ins in the world. 

Agreed.

Ralf.Brown@B.GP.CS.CMU.EDU (11/18/88)

In article <5065@whuts.ATT.COM>, jmbj@whuts.ATT.COM (BITTMAN) writes:
}Assuming a "byte" here is an I/O address, there are at least 1024
}addresses available for each I/O address claimed, the 8-bit PC XT bus has
}10 "extra" address lines (1024) and the AT has 14 "extra" for a

I/O addresses only have 16 bits, on both PC and AT, thus there are 64 I/O
addresses for each value of the lower ten bits.

--
UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf -=-=-=- Voice: (412) 268-3053 (school)
ARPA: ralf@cs.cmu.edu  BIT: ralf%cs.cmu.edu@CMUCCVMA  FIDO: Ralf Brown 1:129/31
Disclaimer? I     |Ducharm's Axiom:  If you view your problem closely enough
claimed something?|   you will recognize yourself as part of the problem.

corbin@pinocchio.Encore.COM (Steve Corbin) (11/19/88)

 In article <5065@whuts.ATT.COM> jmbj@whuts.ATT.COM (BITTMAN) writes:
 >> |I read in a manual that the addresses above 0x0400 were unusable? 
 >
 >Base I/O addresses above this range cannot be used without claiming
 >the address equal to the lower 10 bits.
 >
 >> This is not true. What is true is that the motherboard and most
 >> plug-ins only decode (the low) 10 address bits. So if you use address
 >> 4f0, it will collide with the motherboard's 0f0. 
 >
 >> Every byte that you pick is equivalent to 64 bytes. If you pick byte
 >        ^^^^                                ^^^^^^^^
 >> 200, you can also use 600, A00, etc. No other hardware can possibly be
 >> broken by this since it is the same as if you only decoded the low 10
 >> address bits. You know all the address bits are there as 20 or more
 >> bits are needed for memory addressing. In theory this method should work. 
 >
 >Assuming a "byte" here is an I/O address, there are at least 1024
 >addresses available for each I/O address claimed, the 8-bit PC XT bus has
 >10 "extra" address lines (1024) and the AT has 14 "extra" for a
 >total of (16384).  Just use the lower 10 address bits like high-order
 >bits on any other system, to select your board. Then use the upper
 >bits as decodes or direct ram addressing, etc.

The original poster was correct.  64 bytes are available at each I/O
address if you decode the extra address lines.  There 20 address lines
for memory on the 8088/8086 but only 16 lines are used for I/O.


Stephen Corbin	    UUCP:	{bu-cs,decvax,necntc,talcott}!encore!corbin
		    Internet:	corbin@multimax.ARPA

phil@diablo.amd.com (Phil Ngai) (11/19/88)

In article <5065@whuts.ATT.COM> jmbj@whuts.ATT.COM (BITTMAN) writes:
|> Every byte that you pick is equivalent to 64 bytes. If you pick byte
|        ^^^^                                ^^^^^^^^
|> 200, you can also use 600, A00, etc. No other hardware can possibly be
|
|Assuming a "byte" here is an I/O address, there are at least 1024
|addresses available for each I/O address claimed, the 8-bit PC XT bus has
|10 "extra" address lines (1024) and the AT has 14 "extra" for a

You seem to have forgotten that IO addresses are either 8 or 16 bits,
but not 20 or 24. My number of 64 is correct, your 1024 is wrong.

--

Phil Ngai, phil@diablo.amd.com
{uunet,decwrl,ucbvax}!amdcad!phil 

ward@cfa.harvard.EDU (Steve Ward) (11/20/88)

In article <4229@encore.UUCP>, corbin@pinocchio.Encore.COM (Steve Corbin) writes:
> ...there are 64 bytes at each I/O
> address if you decode the extra address lines.  There 20 address lines
> for memory on the 8088/8086 but only 16 lines are used for I/O.
> 
> 
  Just to prevent misunderstanding, there are 64 images, or "copies"
  of each of the 1024 I/O byte-addressable registers, or I/O byte
  locations.  This means any I/O addressing done to any of these
  64 "imaged, copied, ghosted, etc" address locations will result
  in an access to the same I/O byte location.

  There are only 1024 I/O byte locations available due to the partial
  (10-bits out of the possible 16-bit I/O address space) I/O address
  decoding inflicted on us by IBM.  This 1024 byte I/O address space
  repeats itself 64 times within the 64K I/O address space.  Said
   another way, there are 64 distinct I/O addresses you can use to
  access exactly the same I/O byte.

  As has been pointed out, for purposes of I/O instructions on Intel 
  8088/86/286 micros (probably 386, too) only 16 address lines are
  used.  The memory address space is larger, being 20 address lines
  for the XT/AT's.

  I believe that Mr. Corbin is saying what I just said, but the spate
  of several postings needed at least one more followup :-)

Steve W.  ward@cfa.harvard.edu

ralf@b.gp.cs.cmu.edu (Ralf Brown) (11/20/88)

In article <1275@cfa.cfa.harvard.EDU> ward@cfa.harvard.EDU (Steve Ward) writes:
}In article <4229@encore.UUCP>, corbin@pinocchio.Encore.COM (Steve Corbin) writes:
}> ...there are 64 bytes at each I/O
}> address if you decode the extra address lines.  There 20 address lines
}> for memory on the 8088/8086 but only 16 lines are used for I/O.
}> 
}  Just to prevent misunderstanding, there are 64 images, or "copies"
}  of each of the 1024 I/O byte-addressable registers, or I/O byte
}  locations.  This means any I/O addressing done to any of these
}  64 "imaged, copied, ghosted, etc" address locations will result
}  in an access to the same I/O byte location.

There are 64 copies of each I/O address used by the motherboard.  All 16
I/O address lines are available on the bus, and a board can choose to decode
all 16 if it so desires (though many, if not most, don't).
-- 
{harvard,uunet,ucbvax}!b.gp.cs.cmu.edu!ralf -=-=- AT&T: (412)268-3053 (school) 
ARPA: RALF@B.GP.CS.CMU.EDU |"Tolerance means excusing the mistakes others make.
FIDO: Ralf Brown at 129/31 | Tact means not noticing them." --Arthur Schnitzler
BITnet: RALF%B.GP.CS.CMU.EDU@CMUCCVMA -=-=- DISCLAIMER? I claimed something?
-- 

ward@cfa.harvard.EDU (Steve Ward) (11/21/88)

In article <3626@pt.cs.cmu.edu>, ralf@b.gp.cs.cmu.edu (Ralf Brown) writes:
> In article <1275@cfa.cfa.harvard.EDU> ward@cfa.harvard.EDU (Steve Ward) writes:
> }In article <4229@encore.UUCP>, corbin@pinocchio.Encore.COM (Steve Corbin) writes:
> }> ...there are 64 bytes at each I/O
> }> address if you decode the extra address lines.  There 20 address lines
> }> for memory on the 8088/8086 but only 16 lines are used for I/O.
> }> 
> }  Just to prevent misunderstanding, there are 64 images, or "copies"
> }  of each of the 1024 I/O byte-addressable registers, or I/O byte
> }  locations.  This means any I/O addressing done to any of these
> }  64 "imaged, copied, ghosted, etc" address locations will result
> }  in an access to the same I/O byte location.
> 
> There are 64 copies of each I/O address used by the motherboard.  All 16
> I/O address lines are available on the bus, and a board can choose to decode
> all 16 if it so desires (though many, if not most, don't)

I think I said that?!!!  Again, since somebody might get confused, sure,
you can decode all 16 address lines for I/O, but because of the partial
address decoding on the motherboard and on plug-in cards, you better
decode them carefully!  It buys you nothing to decode the extra lines
since the I/O addresses above 0x400 are not available except to the
extent that there is a "hole" in the first 1k addresses.  Sure, for
the very hard up, you can leave a hole in the first 1k (never ever use
10-bit decoding in the hole, 16-bit decoding is ok) and then you can
use 16-bit decoding in the 64 different (1k apart) slots within the
64kb I/O space.  The disadvantage is potential I/O address clashing
due to the non (IBM) standard decoding.  Of course, you always put
on dip switches so you can switch to somewhere in the first 1k :-)
Given the dozens of boards out there, all using 10-bit decoding, it
doesn't promise much return for decoding all 16 address lines for
I/O, though I have described a desperation method for garnering
I/O addresses.
ward@cfa.harvard.edu 
.

bkliewer@iuvax.cs.indiana.edu (Bradley Dyck Kliewer) (11/22/88)

Select a 10 bit address and then use 16 bit addresses created from that base
giving you lots of ports off one IBM-style port.

Perhaps it worth mentioning that the Micro Channel decodes the full 16 bit
address, and the EISA specification will probably do the same.

Bradley Dyck Kliewer                Hacking...
bkliewer@iuvax.cs.indiana.edu       It's not just an adventure
                                    It's my job!

phil@diablo.amd.com (Phil Ngai) (11/22/88)

In article <1275@cfa.cfa.harvard.EDU> ward@cfa.harvard.EDU (Steve Ward) writes:
|  Just to prevent misunderstanding, there are 64 images, or "copies"
|  of each of the 1024 I/O byte-addressable registers, or I/O byte
|  locations.  This means any I/O addressing done to any of these
|  64 "imaged, copied, ghosted, etc" address locations will result
|  in an access to the same I/O byte location.

This is true of the motherboard and many plug-in cards you can buy.
You are not bound by this restriction if you design your own hardware.
Also, LIM EMS memory boards are a notable exception to this rule as well. 

--

Phil Ngai, phil@diablo.amd.com
{uunet,decwrl,ucbvax}!amdcad!phil 

phil@diablo.amd.com (Phil Ngai) (11/22/88)

In article <1276@cfa.cfa.harvard.EDU> ward@cfa.harvard.EDU (Steve Ward) writes:
|decode them carefully!  It buys you nothing to decode the extra lines
|since the I/O addresses above 0x400 are not available except to the
|extent that there is a "hole" in the first 1k addresses.  Sure, for

Steve, I think you have a very dangerous thing, i.e., a partial
understanding of the situation. My suggested method is not a
desperation technique, does not have any problems, and is also
approved by Lotus, Intel, and Microsoft as embodied in EMS. 

|the very hard up, you can leave a hole in the first 1k (never ever use
|10-bit decoding in the hole, 16-bit decoding is ok) and then you can

This is a meaningless statement.

|use 16-bit decoding in the 64 different (1k apart) slots within the
|64kb I/O space.  The disadvantage is potential I/O address clashing
|due to the non (IBM) standard decoding.  Of course, you always put

No, there is no potential for clashing. Using 16-bit decoding is no
different from 10-bit decoding in terms of clashes. I think your
problem is that you think of 16-bit decoding as using something above
1K. The way that 16-bit decoding really works is that you pick a byte
WITHIN 1K. Then you distinguish all the addresses that would be
considered aliases of that address with 10-bit decoding. For example,
you distinguish between 240 and 640 and respond to both. But no one
else cares because when you use 10-bit decoding, you also claim both
240 and 640 and respond to both. 


--

Phil Ngai, phil@diablo.amd.com
{uunet,decwrl,ucbvax}!amdcad!phil 

phil@diablo.amd.com (Phil Ngai) (11/22/88)

In article <15225@iuvax.cs.indiana.edu> bkliewer@iuvax.UUCP (Bradley Dyck Kliewer) writes:
|Select a 10 bit address and then use 16 bit addresses created from that base
|giving you lots of ports off one IBM-style port.

That's correct. 64 addresses, to be exact.

|Perhaps it worth mentioning that the Micro Channel decodes the full 16 bit
|address, and the EISA specification will probably do the same.

This is totally irrelevant. You're not going to plug your XT bus board
into a micro channel. As for EISA, since it must work with old boards
(or what's the point) and old boards claim all 10-bit aliases, there
is nothing wrong with the LIM technique, even in a post-EISA world. 

--

Phil Ngai, phil@diablo.amd.com
{uunet,decwrl,ucbvax}!amdcad!phil 

ward@cfa.harvard.EDU (Steve Ward) (11/22/88)

In article <23608@amdcad.AMD.COM>, phil@diablo.amd.com (Phil Ngai) writes:
> In article <1276@cfa.cfa.harvard.EDU> ward@cfa.harvard.EDU (Steve Ward) writes:
> |decode them carefully!  It buys you nothing to decode the extra lines
> |since the I/O addresses above 0x400 are not available except to the
> |extent that there is a "hole" in the first 1k addresses.  Sure, for
> 
> Steve, I think you have a very dangerous thing, i.e., a partial
> understanding of the situation. My suggested method is not a
> desperation technique, does not have any problems, and is also
> approved by Lotus, Intel, and Microsoft as embodied in EMS. 
> 
> |the very hard up, you can leave a hole in the first 1k (never ever use
> |10-bit decoding in the hole, 16-bit decoding is ok) and then you can
> 
> This is a meaningless statement.

    No, it isn't, except that you have broken two sentences away from
    from the paragraph which explains what I mean, taken together.  See
    next three sentences below.
> 
> |use 16-bit decoding in the 64 different (1k apart) slots within the
> |64kb I/O space.  The disadvantage is potential I/O address clashing
> |due to the non (IBM) standard decoding.  Of course, you always put
> 
> No, there is no potential for clashing. Using 16-bit decoding is no
> different from 10-bit decoding in terms of clashes. I think your
> problem is that you think of 16-bit decoding as using something above
> 1K. The way that 16-bit decoding really works is that you pick a byte
> WITHIN 1K. Then you distinguish all the addresses that would be
> considered aliases of that address with 10-bit decoding. For example,
> you distinguish between 240 and 640 and respond to both. But no one
> else cares because when you use 10-bit decoding, you also claim both
> 240 and 640 and respond to both. 
> 

  Well, now you are talking!  You have said exactly what I said.  No,
  I don't have a "dangerous misunderstanding", I know exactly what's
  up.  When I said you have to leave a "hole" in the first 1k where
  no 10-bit address decoding (hole is one or more adjacent I/O
addresses) will be allowed, it was because all 10-bit decoding repeats
up through the entire 16-bit (64K) I/O address space.  Clearly, if
any I/O addresses in the first 1K range are either left unused or
used with 16-bit decoding only, all the other 63 spots in the rest
of the 16-bit I/O address space that would have otherwise been
overlapped with 10-bit "ghosted" addresses, can be safely used for
16-bit address decoding.  This is what I originally said, what you
said, etc.

Where we disasgree is in the meaningfulness, hazards, etc. of 16-bit
decoding.  I say, if you do 16-bit decoding, you make it selectable
to be able to choose several different address locations, and preferably
many alternate locations.  My reason for this is because all it takes
is one 10-bit address I/O card "below" (in a spot that "ghosts" up
into your pristine 16-bit address) to ruin your day.  99% of I/O
cards out there only use 10-bit I/O addressing, making this a very
likely event.  I agree that using 16-bit address decoding is the
proper method, but the reality is quite different.  Therefore, I
advise a "mobile" 16-bit address decoding if you want some assurance
you can buy most any I/O card and be confident they will not have
address clashes.

There is one point in your statement that I am a little unclear about.
You seem to be saying "use 16-bit address decoding, but the decoded
address(es) should be in the first 1K byte range of the 64K I/O
address space."  If this is a correct understanding, what's the
point of using 16-bit address decoding if the intent is to always
decode into the first 1K, ie, you seem to be limiting yourself
by definition to 1K addresses, so why use more than 10 address
lines?  It seems to me that the whole point of using 16-bit address
decoding is to try to utilize some of the entire 64K I/O space,
and I have pointed out this is possible, though perilous, in my
opinion.

Of course, the REAL solution is to say the heck with I/O address
space decoding entirely, and memory map everything somewhere in
the upper area of the 1MB memory address space  :-)

Steve W.   ward@cfa.harvard.edu
"

ward@cfa.harvard.EDU (Steve Ward) (11/22/88)

Aha!  I finally understand what Phil has been saying.  Correct me if I
am wrong, but what you are saying is that using 16-bit I/O address
decoding, garner a set of (up to 64) I/O bytes by using I/O bytes
spaced 1024 (1K) byte addresses apart.  By mapping the lowest address
into the bottom 1K address space, you guarantee that the upper
(normally 10-bit decoding "ghosted" addresses) addresses on 1K
increments are available for 16-bit decoding.  Why didn't you just
say that? :-) :-)  (now that I have the cotton out my ears, I can
hear just fine!  :-) )

This will work just fine.  I guess I just had my mind set on a
block of contiguous addresses.  However, the real problem remains:
lots of 10-bit decoded boards really crowding the bottom 1K I/O
space (and hence crowding the whole 64K).  However, your suggested
method stretches the I/O ports as far as they can go, under the
circumstances.
ward@harvard.edu

phil@diablo.amd.com (Phil Ngai) (11/23/88)

In article <1278@cfa.cfa.harvard.EDU> ward@cfa.harvard.EDU (Steve Ward) writes:
|Where we disasgree is in the meaningfulness, hazards, etc. of 16-bit
|decoding.  I say, if you do 16-bit decoding, you make it selectable
|to be able to choose several different address locations, and preferably
|many alternate locations.  My reason for this is because all it takes

Oh, that's what you're talking about! The concept of using a forever
fixed address is so repugnant to me that it never occurred to me that
anyone might think of using it. I assumed that you would allow the
byte in the range 0-400 to be selectable. 

|There is one point in your statement that I am a little unclear about.
|You seem to be saying "use 16-bit address decoding, but the decoded
|address(es) should be in the first 1K byte range of the 64K I/O
|address space."  If this is a correct understanding, what's the

I mean you have to pick a byte on the range 0-400 and make sure it
does not clash with anyone else in the system. Then you can claim
that byte and all its aliases for your own use.

|Of course, the REAL solution is to say the heck with I/O address
|space decoding entirely, and memory map everything somewhere in
|the upper area of the 1MB memory address space  :-)

From what I have seen, there's plenty of IO addresses compared to
the amount of free space within the 1 MB range.

--

Phil Ngai, phil@diablo.amd.com
{uunet,decwrl,ucbvax}!amdcad!phil 

cdold@starfish.Convergent.COM (Clarence Dold) (11/23/88)

From article <23617@amdcad.AMD.COM>, by phil@diablo.amd.com (Phil Ngai):
> In article <1278@cfa.cfa.harvard.EDU> ward@cfa.harvard.EDU (Steve Ward) writes:
> |Where we disasgree is in the meaningfulness, hazards, etc. of 16-bit
> |decoding.  I say, if you do 16-bit decoding, you make it selectable

Of course, what someone might do, in the case of an 80386 machine rated
for ~30 UNIX users, is to have intelligent serial cards, five of them,
perhaps, that all address to the same '10 bit' address, but are unique 
amongst themselves with respect to the remaining addresses.

-- 
Clarence A Dold - cdold@starfish.Convergent.COM         (408) 434-2083
                ...pyramid!ctnews!professo!dold         MailStop 18-011
                P.O.Box 6685, San Jose, CA 95150-6685

matthew@sunpix.UUCP ( Sun NCAA) (11/24/88)

You've got to think of it this way. Use the address bits A0 thru A9 to
select where in the 1K of IBM PC/XT/AT I/O space where you want your
board to be mapped to. Then use the address bits A10 thru A15 to decode
to one of 64 "ghosted" addresses. 





         A15 A14 A13 A12 A11 A10   A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
        \__________  ___________/ \_____________  ______________/
                   \/                           \/

             Used to decode 64           Used to assign PC/XT/AT
             "ghosted" addresses         compatible address.
                                         (could be switch selectable)

-- 
Matthew Lee Stier     (919) 469-8300|
Sun Microsystems ---  RTP, NC  27560|          "Wisconsin   Escapee"
uucp: {sun, rti}!sunpix!matthew     |