WikiPatents - Community Patent Review
Create Free Account  |  License or Sell Your Patent  |  WikiPatents Marketplace  |  WikiPatents Blog
Username:  Password:  
    
Advanced Search
System for determining configuration of devices installed on a computer bus by comparing response time of data lines to read from I/O address when undriven    
United States Patent5537663   
Link to this pagehttp://www.wikipatents.com/5537663.html
Inventor(s)Belmont; Brian V. (Houston, TX); Basile; Barry S. (Houston, TX)
AbstractIn a system that executes the method according to the invention, each slot on the system bus is individually enabled at start-up and each address of an address range is read to determine whether an expansion board is installed in the slot and is responding to a read from that I/O address. If the data value returned by the I/O read is not equal to the undriven value of the data bus, then it is known that the expansion board is responding to that I/O address. Otherwise, a second read of the I/O address is performed, and the values of certain control lines on the system bus are latched to determine whether an expansion board is driving those lines in response to the I/O read. If so, again it is known that an expansion board is responding to a read from that I/O address. Otherwise, the system then performs a further special I/O read to determine the data bus response time. If the response time is faster than the response time of an undriven bus, it is known that an expansion board is responding to this I/O address. In this way, an I/O address map is created for each expansion board. This map is then used to determine the system configuration by comparing the map to standard signatures of known boards. The system configuration is the passed to standard configuration software.



 Title Information Submit all comments and votes
 
Patent Text Patent PDF Print Page Summary File History
Plain text PDF images Print Summary File History
Drawing from US Patent 5537663
System for determining configuration of devices installed on a computer

     bus by comparing response time of data lines to read from I/O address

     when undriven - US Patent 5537663 Drawing
System for determining configuration of devices installed on a computer bus by comparing response time of data lines to read from I/O address when undriven
Inventor     Belmont; Brian V. (Houston, TX); Basile; Barry S. (Houston, TX)
Owner/Assignee     Compaq Computer Corporation (Houston, TX)
Patent assignment
All assignments
Publication Date     July 16, 1996
Application Number     08/145,338
PAIR File History     Application Data   Transaction History
Image File Wrapper   Patent Term   Fees
Litigation
Filing Date     October 29, 1993
US Classification     710/17 710/15 714/43 714/819 714/824
Int'l Classification     G06F 011/00 G06F 011/08 G06F 011/34
Examiner     Lee; Thomas G.
Assistant Examiner     Krick; Rehana Perveen
Attorney/Law Firm     Pravel, Hewitt, Kimball & Krieger
Address
Parent Case    
Priority Data    
USPTO Field of Search     395/275 395/500 395/800 395/828 395/835 395/837 395/183.19 395/650 371/67.1 371/71
Patent Tags     determining configuration devices installed computer bus comparing response time data lines read i/o address when undriven
   
Enter a comma (,) or semicolon (;) between multiple tag words/phrases.
Describe this patent:
 Amusing   
 Clever   
 Complex   
 Efficient   
 Historic   
 Important   
 Innovative   
 Interesting   
 Practical   
 Simple   
[no votes]
Patent WIKI

Share information and news about this patent, including information and news about the technology, inventors, company, ligation and licensing.

 References Submit all comments and votes
 
*references marked with an asterisk below are user-added references
 U.S. References
 
Add a new US reference:  
ReferenceRelevancyCommentsReferenceRelevancyComments
5353432
Richek
710/10
Oct,1994

[0 after 0 votes]
5263148
Jones, Jr.
713/1
Nov,1993

[0 after 0 votes]
5257387
Richek
713/600
Oct,1993

[0 after 0 votes]
5166939
Jaffe

Nov,1992

[0 after 0 votes]
5161102
Griffin

Nov,1992

[0 after 0 votes]
4999805
Culley
710/301
Mar,1991

[0 after 0 votes]
4691296
Struger
710/2
Sep,1987

[0 after 0 votes]
4641261
Dwyer
710/63
Feb,1987

[0 after 0 votes]
5367640
Hamilton
710/9
Dec,1969

[0 after 0 votes]
 Foreign References
 Other References
 Market Review Submit all comments and votes
   
Market Size
Estimate the gross annual revenues of the relevant market sector:
> $10B
$5B - $10B
$2B - $5B
$500M - $2B
$100M - $500M
$10M - $100M
$1M - $10M
$500K - $1M
$100K - $500K
< $100K
[No votes]
$0
 
$0   $2.5B   $5B   $7.5B   $10B
Market Share
Estimate the percentage of the relevant market sector this invention will capture:
75% - 100%
50% - 74.99%
25% - 49.99%
10 - 24.99%
5 - 9.99%
2 - 4.99%
1 - 1.99%
< 1%
[No votes]
0.0%
 
0%   25%   50%   75%   100%
Reasonable Royalty
What percentage of gross sales should the inventor or assignee be paid?
75% - 100%
50% - 74.99%
25% - 49.99%
10 - 24.99%
5 - 9.99%
2 - 4.99%
1 - 1.99%
< 1%
[No votes]
0.0%
 
0%   25%   50%   75%   100%
Public's "Guesstimation" of Royalty Value
Market SizeN/A[No votes]
xMarket ShareN/A[No votes]
xReasonable RoyaltyN/A[No votes]

N/A

License Availablity
If you are NOT the owner or assignee, answer here:
Yes, license is available for purchase

No, license is not currently available



[No votes]
License Availablity
If you ARE the owner or assignee, answer here:
Yes, license is available for purchase

No, license is not currently available



[No votes]
Competitive Advantage
Does this invention have a significant competitive advantage over similar technologies?
Yes

No



[No votes]
Most helpful competitive advantage comment
[No comments]

Commercial Alternatives
Are there viable commercial alternatives for this invention?
Yes

No



[No votes]
Most helpful commercial alternative comment
[No comments]

 Technical Review Submit all comments and votes
 Claims Submit all comments and votes
 


We claim:

1. A method for determining whether a slot on a computer system bus contains an expansion board responsive to a read from an I/O address in a computer system with the computer system bus including data lines, address lines, control lines, and a plurality of individually selectable slots, the data lines when undriven returning a predetermined value in response to a read and when undriven having an associated response time to a read, and including a processor for reading from the bus and executing configuration software, comprising the steps of:

(a) enabling the slot;

(b) performing a read from the I/O address using the address lines and a portion of the control lines to assert an address and request a read, and where a data value is returned on the data lines in response to the read;

(c) if the read from the I/O address returns a data value on the data lines that corresponds to a read from the data lines when undriven, performing a second read from the I/O address using the address lines and a portion of the control lines to assert the address and request the read while measuring the response time of the data lines to the read;

(d) comparing the response time of the data lines to the read from the I/O address with the response time of the data lines when undriven; and

(e) if the response time of the data lines to the read from the I/O address is shorter by at least a predetermined amount of time than the response time of the data lines when undriven, indicating the expansion board responded on the data lines to the read from the I/O address.

2. The method of claim 1 further comprising a step before step (d) of if the read from the enabled slot returned a data value corresponding to a read from the data lines when undriven, performing a read of the address while latching a portion of the control lines of the bus, determining whether an expansion board is responding to the read of the I/O address by examining whether the control lines were asserted and if any control lines were asserted, indicating the expansion board responded to the read of the I/O address.

3. The method of claim 1, wherein steps (a) to (d) are repeated for a predetermined range of I/O addresses.

4. The method of claim 1, further comprising the steps of:

(f) generating an address map in response to the results of steps (a) through (e);

(g) comparing the address map generated in step (f) with a library of expansion board signatures stored in the computer system; and

(h) determining, based on said comparison of step (f), the type of expansion board installed and its responsive address locations.

5. The method of claim 4, further comprising the step of:

(i) repeating steps (a) through (h) for each of the plurality of individually selectable slots.

6. The method of claim 4, further comprising the step of:

(i) passing the results of said determining the type and address map of expansion boards installed to configuration software that configures the system.

7. A system for configuring expansion boards, comprising:

a system bus with a plurality of individually enableable slots for expansion board, said system bus including data lines, address lines, and control lines;

a processor coupled to said system bus for executing a configuration program and using the address lines and a portion of the control lines to execute reads from addresses, where the reads return values on the data lines;

means for configuring expansion boards installed in some of the plurality of slots based on the types of the expansion boards; and

means for determining the types of expansion boards installed in the plurality of slots, including:

means for enabling one of the individually enableable slots;

means for creating an address map of addresses used by an expansion board installed in the one of the individually enableable slots, wherein said means for creating indicates that an address in the address map is "undriven" if a read from that address returns on the data lines a data value normally returned on the data lines by a read when the data lines are undriven;

means for determining if an expansion board installed in the one of the individually enableable slots is responding on the data lines to a read from an address that the address map indicates "undriven"; and

means for comparing the address map with expansion board signatures to determine the type of expansion board installed in the one of the plurality of individually enableable slots.

8. A method for determining whether a slot on a computer system bus contains an expansion board responsive to a read from a memory address in a computer system with the computer system bus including data lines, address lines, control lines, and a plurality of individually selectable slots, the data lines when undriven returning a predetermined value in response to a read and when undriven having an associated response time to a read, and including a processor for reading from the bus and executing configuration software, comprising the steps of:

(a) enabling the slot;

(b) determining if the expansion board responds on the data lines to a read from the memory address, wherein the read from the memory address is initiated using the address lines and a portion of the control lines and wherein the read returns a data value on the data lines, said determining including determining if the expansion board responds on the data lines to the read from the memory address when the read from the memory address returns on the data lines the predetermined value by comparing the undriven response time of the data lines to a response time of the data lines to the read from the memory address;

(c) repeating steps (a) to (b) for a predetermined range of memory addresses;

(d) generating an address map in response to the results of steps (a) through (c);

(e) comparing the address map generated in step (d) with a library of expansion board signatures stored in the computer system; and

(f) determining, based on said comparison of step (e), the type of expansion board installed and its responsive address locations.

9. The method of claim 8, further comprising the step of:

(g) repeating steps (a) through (f) for each of the plurality of individually selectable slots.

10. The method of claim 8, further comprising the step of:

(g) passing the results of said determining the type and address map of expansion boards installed to configuration software that configures the system.
 Description Submit all comments and votes
 


RELATED APPLICATIONS

This application is related to co-pending Ser. No. 08/145,400, now pending filed Oct. 10, 1993, entitled "Method of and Apparatus for Disabling Individual Slots on a Computer Bus," and to co-pending Ser. No. 08/145,339, filed Oct. 10, 1993, now pending entitled "Detecting the Presence of a Device on a Computer System Bus by Measuring the Response Time of Data Signals on the Bus, and Maximizing System Performance Based on that Response Time," all of which have been assigned to the assignee of this application.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The invention relates to computer busing systems, and more particularly to a method of and apparatus for determining the configuration and types of boards installed on a computer bus.

2. Description of the Related Art

The microcomputer industry has experienced tremendous growth over the last twenty years. From the days of its infancy when only a few interested "hackers" could fathom its quirks and nuances, the microcomputer has now evolved into a powerful business and personal tool found on virtually every office desk and in virtually every home.

The microcomputer's road to success has not been without its problems, however. While advances occur at an astounding pace, those advances must accommodate the standards found in the then existing base of microcomputer systems. This is known as upwards compatibility. To maintain such compatibility, the industry has seen one microcomputer standard laid on top of another, with a resulting hodgepodge of standards-within-standards that designers must maintain to allow existing users to upgrade their equipment. These multiple standards gradually shed their oldest layers, replacing them with new layers reflecting the state-of-the-art. In this way, only the very oldest microcomputer systems become obsolete.

One early idea to enhance microcomputer systems was the addition of hardware enhancing boards. These boards were generally plugged into a system bus to provide added functionality, such as telecommunications, disk storage, and improved video. These boards obviously had to Conform to some standard. With the introduction of the IBM PC by International Business Machines Corp., and the later introduction of the PC/AT by IBM, the AT system bus soon became a de facto standard known as the Industry Standard Architecture bus, or the ISA bus. The AT bus accommodated both the 8-bit boards of the PC and newer 16-bit boards developed for the AT. Third-party manufacturers could economically design standard boards compatible with the wide variety of IBM PC and AT compatible microcomputer systems.

Further advances in microprocessor technology, however, pushed the ISA bus to its limits. For this reason, another "layer" was added to the ISA bus standard. This added layer became known as the Extended Industry Standard Architecture bus, or the EISA bus. Boards designed for the EISA bus had more pins, providing a wider data path for information to flow through the microcomputer system bus, analogous to adding lanes to a highway. The EISA bus also added more address lines to the standard, permitting more memory locations to be individually specified, much as would adding more digits to a phone number or a zip code.

One limitation of the ISA bus involved its method of handling I/O addressing. An address enable signal (AEN) was driven low by an ISA bus master to indicate to all of the cards that the currently asserted address was an I/O address or a memory address rather than a direct memory access (DMA) operation. But because AEN was asserted low to all cards, each card had to be physically configured to respond to a different range of I/O or memory addresses to avoid conflicts. This address differentiation was usually accomplished when installing the boards by setting microswitches on dual in-line packages (DIP) or by connecting jumpers on each board. Improperly setting these switches could result in conflicts on a read or write to a particular I/O or memory address and could even result in physical hardware damage.

While the ISA standard provided 16 bits of I/O addressing, in developing boards for PC-compatible computers, vendors often only used or decoded the lower 10 bits. Thus, to be fully compatible with the available boards, the I/O address space of the ISA bus effectively was only from 0 to 03FFh. Thus, a large portion of the I/O space was unusable.

The EISA bus standard has resolved this problem to some extent. The EISA bus definition provides for a conflict-free I/O address space for each slot. This is fully described in U.S. Pat. No. 4,999,805 and the EISA Specification, Version 3.1, which is Appendix 1 of U.S. Pat. No. 4,101,492, both of which are hereby incorporated by reference. The expansion board manufacturers include a configuration file with each EISA expansion board, and optionally, with switch programmable ISA products. A configuration utility program provided by the system manufacturer uses the information contained in the configuration files to determine a conflict-free configuration of the system resources. The configuration utility stores the configuration and initialization information into non-volatile memory and saves a backup copy on diskette. Details of this configuration process are provided in Ser. No. 07/293,315, U.S. Pat. No. 5,263,148 Nov. 16, 1993 entitled "Method and Apparatus for Configuration of Computer System and Circuit Boards," allowed on May 10, 1993, which is hereby incorporated by reference. The system ROM power up routines use the initialization information to initialize the system during power up, and device drivers use the configuration information to configure the expansion boards during operation.

However, this slot specific addressing does not help with ISA boards. Slot specific ISA board disabling can prevent such physical conflicts between two boards during their initialization. Briefly, a mask register is provided to mask off the AEN signal to selected slots. Details are provided in Ser. No. 08/145,400 now pending entitled "Method of and Apparatus for Disabling Individual Slots on a Computer Bus," filed concurrently herewith, which is hereby incorporated by reference.

Further, the slot specific addressing is of no assistance with memory operations, as the EISA bus standard does not provide for slot specific memory spaces for ISA cards.

Determining what addresses that board responds to is not trivial. Unlike EISA boards, ISA boards do not provide an identification register. Thus, the occupied address space of an ISA board must be determined in some other way.

It would be desirable to provide the functionality of EISA configuration software for ISA boards. That is, it would be desirable for the system to be able to determine what ISA boards were installed in which slots, and to appropriately respond to any conflicts or mismapping of those devices. Finally, it would be desirable to determine where an ISA board is mapped in the address and memory space and to configure the system accordingly.

SUMMARY OF THE INVENTION

In a computer system constructed according to the invention, initialization software determines whether an expansion board is present in a selected slot and what input/output (I/O) addresses that selected expansion board drives. The system first disables all the expansion slots except for the one under test. The system then cycles through all the relevant I/O addresses, creating a map of the I/O addresses to which an expansion board in the enabled expansion slot responds. A response other than a normal undriven bus value indicates an installed board in the enabled slot is driving the data bus in response to a read from that I/O address. The returned value is stored in the map. For each I/O address from which the system reads a normally undriven bus response (0FFh in typical systems), this is stored in the map as an "undriven" response for further testing.

The system further tests each address returning such an "undriven" response to determine whether an installed board is actually driving the bus to that normally undriven value. First, if the expansion slot under test asserts certain bus control lines in response to an I/O read, that indicates that an installed device is responding to that I/O read. If so, that response is stored in the map.

If not, the system then analyzes the data line response time to an I/O read at the address being tested. Specifically, the system measures how long the data lines take to rise to an undriven state of 0FFh from an artificially driven state of 00h. Hardware first drives the data lines to zero at the beginning of an I/O read cycle. The hardware then times the rise time of the data lines. Because the response time for a driven bus is less than that for an undriven bus, a timer value less than the normal response time indicates that a device is actually driving the normally undriven value onto the data bus. Thus, the particular expansion slot under test both contains an expansion board and that board is driving the bus in response to a read from the I/O address under test.

In this way, the system creates a map of the I/O address locations used by a board in a selected expansion slot and the actual response values of that board. Configuration software then determines the actual board type by comparing the I/O map with "signatures" compiled for various known expansion boards. Once the board type and its address map are known, the configuration software passes that information to an extended version of EISA configuration software, which both sets up device drivers and otherwise configures the system. Further, the EISA configuration software determines whether there are any conflicts between the expansion boards installed into the various slots of the system bus. If so, the EISA configuration software can warn the user, can suggest to the user the proper switch settings, or can even disable the board entirely.

Further according to the invention, a corresponding memory map of an ISA board is created in a manner similar to that for creating an I/O address map. The technique is similar, except memory "response time" need not be checked to determine if a memory address is being driven, as instead, two different predetermined values are written to that memory location and then read back. If those values are properly stored, the corresponding value will be returned on a read. If the values are not properly stored, the read will return a value other than what was written on at least one of the reads. This map is also then used by the configuration software.

BRIEF DESCRIPTION OF THE DRAWINGS

A better understanding of the present invention can be obtained when the following detailed description of the preferred embodiment is considered in conjunction with the following drawings, in which:

FIG. 1 is a block diagram of a computer system incorporating the method and apparatus according to the invention;

FIG. 2 is a flowchart of configuration software that determines the system configuration according to the invention;

FIGS. 3 and 4 are flowcharts of software used to implement the method according to the invention;

FIGS. 5A and 5B are exemplary address maps created by the software of FIGS. 3 and 4; and

FIGS. 6 and 7 are schematics of the control line status latching circuitry used according to the invention.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT

Turning now to the drawings, FIG. 1 is a block diagram of a microcomputer system 100 in which the method and apparatus according to the invention is implemented. The microcomputer system 100 includes a host bus 102 and a system bus 104. A microprocessor 106, memory 108, and a video subsystem 110 internally communicate at high speed with each other over the host bus 102. The host bus 102 is designed for speed rather than expansion, so the host bus 102 has little, if any, provision for expansion boards.

A system bus controller 112 provides an interface between the host bus 102 and system bus 104. The system bus controller 112 is located on the system board of the microcomputer system 100. The system bus controller 112 is preferably implemented using an application specific integrated circuit (ASIC) but could be implemented using discrete components.

The system bus 104 is typically an EISA bus, but could be another bus using similar addressing protocols. The system bus controller 112 implements the functions of an EISA bus controller. It is also within the system bus controller 112 that the data bus response time circuitry according to the invention is preferably implemented.

The system bus 104 consists of address lines 114, data lines 116, and control lines 118. Connected to the system bus 104 is a system board slot 120. The system board slot 120 is not a separate physical connection, but instead logically connects "devices" integrated into the system board of the microcomputer system 100 itself to the system bus 104. Further connected to the system bus 104 are slots 122. The slots 122 are physical connectors for inserting expansion boards compatible with the standard of the system bus 104 to provide the added functionality to the microcomputer system 100. Shown inserted in the first, fifth, and seventh of the slots 122 are respectively a hard disk controller 124, a floppy disk controller 126, and a network interface board 128.

The lower byte of the data lines 116, denoted as SD[7..0], are pulled up by pull-up resistors 117. These pull-up resistors 117 ensure that the undriven data lines 116 return a value of 0FFh. The EISA standard specifies that these pull-up resistors 117 should be 8.2 k ohm.

As is further discussed below, the pull-up resistors 117 can instead be pull-down resistors. In such a case, the value returned by an I/O read of an undriven data bus is then 00h instead of 0FFh.

Each device connected to the system bus 104, whether a device plugged into one of the slots 122 or a system board device corresponding to the system board slot 120, includes an individual slot specific address enable line SSAEN[Z], where Z equals 0 to 7. These signals correspond to the AENx signals of the EISA specification or AEN signal for ISA systems, but further implementing slot specific disabling.

FIG. 2 is a flowchart of a routine CONFIG 400 that uses address maps provided by a routine ADDRESS.sub.-- UTILIZATION 200, discussed below in conjunction with FIGS. 3 and 4, to determine board presence and to check for conflicts among the slots 122. Beginning at step 402, the routine CONFIG 400 calls the routine ADDRESS.sub.-- UTILIZATION 200, retrieving an address map for each of the slots 122, as is discussed below in conjunction with FIGS. 5A and 5B. The routine CONFIG 400 then proceeds to step 404, where it determines the presence or absence of an expansion board in each of the slots 122.

This is done by checking the address map discussed below in conjunction with FIGS. 5A and 5B to see if any address locations were responsive to I/O reads when that particular slot 122 was enabled. That address map preferably indicates the values read from each I/O address, the values on the control lines 118 on a read from each I/O address, and the rise times of the data lines 116 if the address otherwise appears unresponsive. Based on these values, the address map also indicates whether the particular I/O address is responsive. If all of the I/O addresses were indicated to be unresponsive, then no ISA expansion board or EISA expansion board with ISA functions occupies that particular slot 122.

The routine ADDRESS.sub.-- UTILIZATION 200 also determines the presence of EISA boards in slots by reading from the EISA identification registers. If an EISA board does in fact occupy a slot 122, the address maps discussed above and below in conjunction with FIGS. 5A and 5B need not be checked, as the EISA configuration registers both indicate board presence and uniquely identify those expansion boards.

From step 404, the routine CONFIG 400 proceeds to step 406, where it attempts to determine the board types and address spaces using signature analysis routines. The system software includes a library of ISA boards and their address space signatures. A "signature" is a definition of the possible address spaces occupied by a board used to (hopefully) uniquely identify both the functions on and the types of boards installed. For example, a parallel port may return a unique configuration of bits on an I/O read. That configuration is the "signature" of the parallel port function on an expansion board. An expansion board implementing four such ports might have four such parallel port "signatures" spaced four I/O addresses apart each. Such parallel port "signatures" plus the port spacings would then form that expansion board's signature. Each board may have multiple signatures, in that each board may include more than one logical device or function. In that case, the signature of the board would represent more than a single device, and both of those determined "devices" could be passed to further configuration software for configuration of each of those devices. Using this library, the routine determines the various ISA boards installed in the system.

From step 406, the routine CONFIG 400 then passes the identifications and selected base addresses of the ISA boards, along with the identifications of the installed EISA boards, to expanded EISA configuration software EISA.sub.-- CONFIG at step 408. This EISA configuration software can further resolve conflicts or inform the user of such conflicts, and can complete the configuration of the system, including setting up the device drivers to properly drive each installed board. This EISA configuration software is more fully described in Ser. No. 07/293,315, U.S. Pat. No. 5,263,148, Nov. 16, 1993 entitled "Method and Apparatus for Configuration of Computer System and Circuit Boards," which is hereby incorporated by reference. That EISA configuration software relies on the board IDs returned by the identification registers of EISA boards and on saved configurations for ISA boards.

FIG. 3 is a flowchart of the routine ADDRESS.sub.-- UTILIZATION 200 that determines both the presence of an expansion board in a slot 122 and, if present, the particular addresses that device uses.

Beginning at step 202, the routine ADDRESS.sub.-- UTILIZATION 200 sets a variable SLOT# equal to one. This variable corresponds to the specific slot 122 under test on the system bus 104. Proceeding to step 204, the routine enables the slot 122 that corresponds to SLOT# by writing to an arbitrary I/O address P.sub.-- SSAEN used to disable the remaining slots 122. Writing zeros to all the bits of P.sub.-- SSAEN except the bit corresponding to SLOT# prevents all of the slots 122 except SLOT# from responding to any I/O operations. Even if enabled, the slot 122 SLOT# only responds if a board is both installed and mapped to a particular I/O address under test.

For example, if SLOT# equals 3, the routine writes 00001000b (08h) to I/O address P.sub.-- SSAEN. A write to that address stores that value in a mask register which then prevents the AENx signal from going low to the disabled slots. This selective slot disabling is further described in Ser. No. 08/145,400, (now pending) referenced above.

In the first time through the routine ADDRESS.sub.-- UTILIZATION 200, SLOT# equals one, enabling the first of the slots 120. Because the designers of the system 100 know the I/O address map of the system board slot 120, the system startup software can skip mapping the system board slot 120 (SLOT# equal to zero) and proceed straight to SLOT# equal to one.

Proceeding to step 205, the routine ADDRESS.sub.-- UTILIZATION 200 determines whether an EISA board is installed in the slot 120 SLOT#. This is done by reading I/O addresses containing EISA board identification information, as defined by the EISA Specification, Version 3.1, referenced above. An EISA board need not be mapped because the identification registers uniquely define that board. So, if an EISA board is detected, the routine proceeds to step 206 where it saves that identification information for later use by the EISA configuration software, and then to step 222 to process the next slot 120.

If no EISA board is detected at step 205, the routine ADDRESS.sub.-- UTILIZATION 200 then proceeds to step 207, where it reads all significant I/O addresses and stores the read values in an address map. In this embodiment, the routine only needs to read I/O addresses an ISA expansion board would use, or the address range 0100h to 03FFh. ISA systems only effectively employ ten significant address bits SA[9..0] on the address lines 114 of the system bus 104. Further, bits SA[9..8] equalling zero corresponds to an ISA system board address in the system board slot 126 or to an EISA address. ISA expansion boards should not respond to system board addresses, so the routine need only examine those 10-bit addresses in which SA[9..8] do not equal zero. The significant address range is therefore 0100h to 03FFh. Addresses with bits SA[15..10] other than zero are also disregarded, because in an ISA system these addresses are generally considered to be aliases of the I/O addresses located in the ten address bit expansion board range. Thus, by checking an address range of 0100h to 03FFh, the routine maps all I/O addresses used by an ISA board.

As noted above, addresses in which bits SA[9..8] equal zero can correspond not only to ISA system board addresses but also to EISA addresses. Under the EISA standard, EISA board addresses are handled through circuitry that enables a specific slot enable SSAEN[X] when SA[9..8] equal zero, with X corresponding to the four high order bits of the full 16-bit address, or SA[15..12]. Thus, EISA devices installed in the slots 122 will not conflict with each other because each slot 122 has its own separate EISA address range.

In reading the significant addresses at step 206, the microprocessor 106 will read an 0FFh if no device is installed in the slot 122 under test or if the device is not mapped to the I/O address read. This results from the pull-up resistors 117 pulling the data lines 116 high. Conversely, reading a value other than 0FFh indicates the slot 122 has an enabled device mapped to the I/O address read. In such a case, the routine stores a "true" flag in the address map indicating this I/O address is occupied by a device in the slot 122 SLOT# under test. In either case, the data value read is stored in the address map.

For simplicity, memory locations are not tested. Occupation of certain I/O addresses alone should be enough to establish a unique signature for a particular board under test. At that time, a memory check can be performed if desired.

However, simply because an I/O read returns 0FFh does not mean that a device in the slot 122 under test is not driving the data lines 116. A device installed in the slot 122 may be driving the data lines 116 to the normally undriven value of 0FFh. The routine ADDRESS.sub.-- UTILIZATION 200 later, at step 212, determines this by checking whether the device under test asserts certain control lines in response to an I/O read from the address under test and, if not, whether the response time of the data lines 116 to an I/O read is quicker than the response time of an undriven bus.

At step 208, the routine ADDRESS.sub.-- UTILIZATION 200 determines the response time of the undriven data lines 116. First, the routine enables a rise time measurement mode by writing an enabling bit to a status/control register at an arbitrary I/O address P.sub.-- CTRLSTAT. The routine then disables all of the slots 122 by writing 00h to P.sub.-- SSAEN. The routine then reads from an ISA expansion board I/O address in rise time measurement mode. This read operation is special as the data lines 116 are first driven to zero and then a timer is started. The timer is stopped upon the data lines 116 reaching predefined voltage levels or upon reaching a predetermined timer value limit. In this case, because all slots 122 are disabled, no installed device can respond. The routine then reads the value of the timer from an arbitrary I/O address P.sub.-- TIMER. This returns the rise time in HCLKs, or host bus 102 clock cycles, for a read of an undriven I/O address after first driving the data bus to zero. The hardware enabled by the rise time mode bit written to P.sub.-- CTRLSTAT performs the precharging of the data lines 116 to logic zero and then the timing of the bus rise time to a value other than logic zero. This hardware is preferably implemented in the system bus controller 112 in FIG. 1, and is further described in Ser. No. 08/145,339 (now pending) entitled "Detecting the Presence of a Device on a Computer System Bus by Measuring the Response Time of Data Signals on the Bus," which is hereby incorporated by reference. This undriven data line 116 response time is saved for later comparisons.

At step 210, the routine ADDRESS.sub.-- UTILIZATION 200 stores in an address pointer variable ADDRPTR the next I/O address determined to be "undriven". The first time through this inner loop, the first I/O address is the first I/O address in the address map created at step 206 that returned a normally undriven I/O read value of 0FFh. The routine 200 then proceeds to step 212, where it checks for the assertion of control lines 118 in response to a read and checks the rise time of the data lines 116 during a read from the I/O address pointed to by ADDRPTR. This is done in a routine CHECK.sub.-- PRESENCE 212, discussed below in conjunction with FIG. 3.

Proceeding to step 214, if the routine CHECK.sub.-- PRESENCE 212 determined a device actually drove 0FFh onto the data lines 116, then at step 216 the routine ADDRESS.sub.-- UTILIZATION 200 stores a true value into a flag in the address map that indicates the address was responsive to a read. Otherwise, the routine ADDRESS.sub.-- UTILIZATION 200 instead proceeds to step 218, where it stores a false value in that flag, indicating the address was non-responsive to a read. That is, any device, if present, in the slot 122 under test is not mapped to this address.

From both steps 216 and 218, the routine ADDRESS.sub.-- UTILIZATION 200 proceeds to step 220, where it determines whether any I/O addresses that initially returned 0FFh remain in the address map. If so, the routine proceeds again to step 210, where it stores the next "undriven" I/O address in the map into ADDRPTR. If no such addresses remain, the routine proceeds from step 220 to step 222.

At step 222, the routine ADDRESS.sub.-- UTILIZATION 200 determines whether SLOT# equals MAXSLOT. In an EISA system, this could be up to 14, the greatest number of non-system board slots EISA systems support. Because the system designers actually know how many slots 122 are present in the system 100 the designers can set MAXSLOT equal to the appropriate number in the configuration software. This eliminates the mapping of slots 122 that are not present.

If SLOT# is not equal to MAXSLOT, the routine ADDRESS.sub.-- UTILIZATION 200 proceeds to step 224, where it increments SLOT#, and then proceeds to step 204 to enable that next slot 122. The entire loop is repeated, creating another address map of the I/O addresses to which a device in the next slot 122 responds.

If at step 222 SLOT# equals MAXSLOT, then the routine ADDRESS.sub.-- UTILIZATION 200 is done checking for I/O address utilization and has created its address maps, so it returns to the configuration software CONFIG 400.

FIG. 4 is a flowchart of the routine CHECK.sub.-- PRESENCE 212. This routine uses the rise time circuitry as shown and described in Ser. No. 08/145,339, (now pending) previously referenced, to determine the response times of the data lines 116. This routine also uses latching circuitry described in conjunction with FIGS. 6 and 7 to determine expansion board presence.

The routine CHECK.sub.-- PRESENCE 212 begins at step 300 by enabling a latching mode by writing a bit to the arbitrary port P.sub.-- CTRLSTAT previously discussed. On an EISA or ISA system, some expansion boards respond to I/O reads by asserting certain control lines among the control lines 118. They may do so even if they drive the data bus to 0FFh. If these control lines are asserted on an I/O read, the selected expansion board of slot 122 is mapped to that I/O address, so no further testing need be done. The hardware for implementing this latching mode is described below in conjunction with FIGS. 6 and 7; it essentially latches the values of certain control lines 118 at appropriate times in a I/O read cycle.

At step 300, with the latching mode now enabled, the routine CHECK.sub.-- PRESENCE 212 then performs an I/O read from the address under test pointed to by ADDRPTR. The routine then reads the arbitrary register P.sub.-- CTRLSTAT, which returns the latched values of the particular control lines mentioned above. The routine then stores that returned value in the address map.

Proceeding to step 304, the routine CHECK.sub.-- PRESENCE 212 examines the latched value read at step 302 to see if an expansion board has driven the control lines 118. If so, the routine proceeds to step 306, where it sets a return parameter to true, indicating that a read from this address results in a response from an expansion board in the slot 122 that is enabled. The routine then returns that parameter at step 308.

If at step 304 it was determined that no expansion board asserted any of the relevant control lines 118 in response to a read, the routine CHECK.sub.-- PRESENCE 212 proceeds to step 310. Even though an expansion board, if any, in the slot 122 under test failed to assert these lines, this does not necessarily mean that an expansion board in the slot 122 under test is not driving the data lines 116 in response to a read from the I/O address ADDRPTR. The routine at step 310 further determines expansion board presence by enabling the rise time mode by writing a particular bit to the arbitrary port P.sub.-- CTRLSTAT discussed above.

The routine then proceeds to step 312, where it checks the rise time of the data lines 112 in response to a read from the address under test ADDRPTR. This is accomplished by the hardware in Ser. No. 08/145,339, (now pending) referenced above. To summarize, this hardware first drives the data lines 116 to 00h and then counts the number of HCLKs until one of those data lines 116 changes to one. The routine then reads that timer at an arbitrary I/O address P.sub.-- TIMER. As discussed in Ser. No. 08/145,339, (now pending) the choice of using pull-up resistors 117 and driving an initial value of 00h onto the data lines 116 is not the only way to im