Dec 102017
 
EISA setup language specs.
File EISACL.ZIP from The Programmer’s Corner in
Category Tutorials + Patches
EISA setup language specs.
File Name File Size Zip Size Zip Type
EISA_CFG.DOC 64512 16424 deflated

Download File EISACL.ZIP Here

Contents of the EISA_CFG.DOC file









FUNCTIONAL SPECIFICATION:

EXTENDED ISA

CONFIGURATION LANGUAGE

FOR ISA BOARDS



Version 1.00
January 4, 1989
BCPR SERVICES, INC. *





























* Agent for dissemination of EISA Specification











1 Introduction

This document describes a subset of the Extended Industry Standard Architecture (EISA)
Board Configuration File Language, hereafter referred to as the CFG language. This
subset of the CFG language is capable of describing the configuration requirements of ISA
adapter boards.

The purpose of the CFG language is to provide adapter board configuration information to
a system configuration utility. An adapter board's configuration information includes a list
of system resources used by each of the board's possible configurations. System resources
include IRQs, DMA channels, I/O address space, and memory address space.

The configuration utility uses the information provided by each adapter board's CFG
language file to configure the system while avoiding system resource conflicts. After
configuration, the user may view initialization requirements, including switch and
jumper settings, for each adapter board.


2 Notational Conventions

Configuration language files (CFG files) consist of free-form ASCII text. Whitespace,
including spaces, tabs, carriage returns, and linefeeds, is ignored outside of quoted strings.
It is recommended that blank lines and indentation be used as necessary to increase the
readability of the file.

Within a given block, any statements that are required must be placed in front of those
statements that are indicated as optional.


2.1 Values and Addresses

A or
may be given in hexadecimal, decimal, or binary. The radix, or base, is
specified by attaching one of the following characters to the end of the or
:

H - Hexadecimal
D - Decimal
B - Binary

Upper or lower case is accepted. The radix character must be placed immediately after the
value, with no blanks in between. Example: 1F00h. If no radix is specified, decimal is
assumed.

Hexadecimal numbers beginning with a letter must have a leading zero. Example: 0C000h

Slot-specific EISA port addresses must be prefixed by a 0Z. The Z represents the 4-bit slot
specific portion of these addresses. Example: 0Z400h

Binary are specified left to right, most significant bit to least significant bit.
Example:
XXXXXXXX
76543210







Page 1

A or
may also be given in units by attaching one of the following unit
abbreviations to the value. Upper or lower case is accepted.

K - Kilobytes
M - Megabytes

Units may only be used with decimal numbers. A radix may not be specified in addition to
a unit. The unit and value may be attached or separated by a blank. Example: 512K or
512 K.

Fractions are not accepted.

A null can be indicated with empty braces: {}


2.2 Ranges

A is defined with a hyphen:

A may be either ascending or descending. Ascending are specified: - high value>. Descending are specified: .

Blanks may or may not be used within a . Example: 300h-30fh or 300h - 30fh.


2.3 Lists

Lists consist of items such as , , text fields, etc., that are delimited with
spaces and vertical bars. Spaces indicate AND while vertical bars indicate OR.

Example: (x and y) or (y and z) would be denoted: x y | y z

A is defined as a list of either or . Example: 1-3 | 4-6. This
example is the equivalent of: 1 2 3 | 4 5 6, which can also be considered a .

and single may not be mixed in a list. Example: 1-3 4 5 6 is illegal
syntax.

Ascending and descending may not be mixed in a list. Example: 1-3 | 6-4 is illegal
syntax.

and are lists of switch and jumper numbers, respectively. These lists
are delimited only with blanks. Vertical bars may not be used. of switch or jumper
numbers may also be used.


2.4 Text

Many statements in the configuration file language contain text fields. These text fields are
free form and are enclosed in quotes. Maximum lengths are given for each instance.

Free form text may contain embedded tabs, denoted by \t, and embedded linefeeds,
denoted by \n. Quotes and backslashes may be placed in the text using \" and \\
respectively.

Embedded tabs are expanded to the next tab stop. Tab length is eight characters (tab stops
are located at 1, 9, 17, etc.).

Page 2

Whitespace, defined as ASCII characters 09h - 0Dh and 0X20h, is ignored at the beginning
and end of text fields when multiple lines are required.
Example: KEYWORD = "This multiple line text field will be
displayed without the multiple spaces,
tabs, carriage returns, and linefeeds
found at the beginning and end of each
line."

An empty text field is indicated with double quotes: ""


2.5 Comments

;
;The semicolon will be used to place comments in the CFG file.
;Comments on each line must be preceded by a semicolon.
;These comments will not be displayed to the user.
;


2.6 Symbols Used in Syntax Description

The following special symbols are used in this description of the configuration file syntax:

[] The item or statement is optional.

x | y Either x or y is allowed.

Italicized words represent variables. ;Note: <> used here in place of italics.

Upper case characters and words are keynames and must be entered as shown.


3 Configuration File Outline

Board Identification Block

Initialization Information Block(s)

Function Statement Block(s)

The Board Identification Block is used to identify and characterize the board. This block
must come first in the CFG file.

Initialization Information Blocks define the programmable ports, switches, jumpers, and
software used to configure the board. All Initialization Information Blocks must be located
after the Board Identification Block and before the first Function Statement Block.

Function Statement Blocks are used to define each function of the board. A Function
Statement Block lists the different alternatives, or choices, for configuring a function. Each
choice lists the global resources associated with its configuration alternative, in addition to
the values needed to initialize that configuration. The initialization values may refer to any
programmable I/O ports, switches, jumpers, or software defined in the Initialization
Information Blocks.




Page 3

4 Board Identification Block

BOARD
ID = "AAAXXYY"
NAME = ""
MFR = ""
CATEGORY = ""
[SLOT = ISA8 | ISA16 | ISA8OR16 | EISA | EMB(n)]
[LENGTH = ]
[SKIRT = YES | NO]
[READID = YES | NO]
[LANGUAGE = EN | FR | GR | IT | SP]
[COMMENTS = ""]
[HELP = ""]

The BOARD statement appears at the beginning of each CFG file. This statement, along
with the other required statements, must appear before the optional statements contained
in brackets [].

ID is a required statement containing the 7 character board id. This id is used to identify
the board and to name the CFG file. The id consists of a 3 character vendor id (AAA), a 2
character hex product id (XX), and a 2 character hex revision number (YY). The id must
contain 7 characters and must be placed in quotes.

NAME is a required statement used to identify the product. Vendor and product name
should be included. Revision and part numbers may also be included. A maximum length
of 60 characters is recommended.

MFR is a required statement used to specify the board's manufacturer. A maximum length
of 30 characters is recommended. This statement will be uppercased for display.

CATEGORY is a required statement used to identify the board by category. The category> must consist of three characters enclosed in quotes. These three characters will be
uppercased. The categories are:
COM Communications Board
MEM Memory Expansion Board
MFC Multi-function Board
MSD Mass Storage Device
NET Network Board
NPX Numeric Coprocessor Board
PAR Parallel Port Board
PTR Pointing Device
SYS System Board
VID Video Adapter Board
OTH Other













Page 4

SLOT specifies the board's expansion slot type. This statement is optional. The default is
ISA16.

ISA8 indicates that the board is 8-bit ISA.

ISA16 indicates that the board is 16-bit ISA.

ISA8OR16 indicates that the board is 16-bit ISA but will also operate in an 8-bit
slot.

EISA indicates that the board requires an EISA slot.

EMB(n) specifies an embedded slot. Embedded slots are defined under Advanced
Topics in section 7.4.

LENGTH is an optional statement that specifies the length of the board in millimeters. A
unit abbreviation should not be used. Fractions are not accepted. Example: LENGTH =
330 (for a full length board). If omitted, board length will not be used as a criteria for
placement within the system.

SKIRT specifies whether or not the board has a lower extension that prevents it from
fitting into larger size expansion slots. This statement is optional. The default is NO.

READID is an optional statement that specifies whether or not the board has a readable
id. The default is NO.

LANGUAGE is an optional statement that specifies the language used in the CFG file.
The default is English. The language choices are:

EN English
FR French
GR German
IT Italian
SP Spanish

COMMENTS is an optional text field containing additional information about the board.
This text field may contain a maximum of 600 characters and will be displayed in a window
at least 40 columns wide when the board is selected.

HELP is an optional text field containing information that will be displayed to the user if
he requests help while configuring the board. This text field may contain a maximum of
600 characters and will be displayed in a window at least 40 columns wide.


5 Initialization Information Block

There are four types of Initialization Information Blocks: Programmable I/O Port
Identification Blocks, Switch Identification Blocks, Jumper Identification Blocks, and
Software Identification Blocks. A configuration file may contain several of each type of
these blocks. Each type of Initialization Information Block contains an index used to
differentiate it from others of the same type. These indices will be used by INIT
statements, discussed later, to reference the blocks. Each type of block should be
numbered independently of the other types. Each type of block should also be numbered
beginning with 1.




Page 5

5.1 Programmable I/O Port Identification Block

IOPORT(i) =

[SIZE = BYTE | WORD | DWORD]
[INITVAL = ]

In the statement, IOPORT(i) =
, i is an index used to differentiate this
Programmable I/O Port Identification Block from others.
is the address of the
programmable port. Slot-specific EISA port addresses must be prefixed with a 0Z.

SIZE is an optional statement that gives the addressability of the port. The default is
BYTE.

INITVAL is an optional statement used to specify the source of a port's bit values. The
is binary only: it is not necessary to specify the radix. A bit position marked with a 1
or 0 indicates that the bit is reserved and should be set to that value. A bit position marked
with an 'x' indicates that the bit will be set by the configuration program. A bit position
marked with an 'r' indicates that the bit value should be read from the port. Each of the
port's bits must be defined by one of these characters. If this statement is omitted, all bit
values that are not set by the configuration program will be read from the port.

Example:

IOPORT(1) = 0ZC81h
SIZE = BYTE
INITVAL = rr10xxxx

There may be instances in which an expansion board requires a single port to receive
multiple initialization values in sequence. This can be accomplished by defining the same
port multiple times. A separate I/O Port Initialization Block would be included for the
port for each sequential initialization value it needs to receive. These separate IOPORT
statements would have different indices so that they can be individually referenced. During
power-up, the initialization values are written to the ports in the order in which they are
defined in the configuration file. In this way, the single port can receive the sequence of
initialization values it requires.


5.2 Switch Identification Block

SWITCH(i) = n
NAME = "switch name or description"
STYPE = DIP | ROTARY | SLIDE
[VERTICAL = YES | NO]
[REVERSE = YES | NO]
[LABEL = LOC() ]
[INITVAL = LOC() ]
[FACTORY = LOC() ]
[COMMENTS = ""]
[HELP = ""]

In the statement, SWITCH(i) = n, i is an index used to differentiate this Switch
Identification Block from others. Switches should be numbered beginning with 1. For dip
switches, n gives the number of switches in the set. For rotary and slide switches, n gives
the number of positions on the switch. The maximum value for n is 8 for rotary switches
and 16 for slide and dip switches.



Page 6

Several statements in the Switch Identification Block use the LOC() clause to
reference individual switches within the block. A is defined as a list of switch
numbers, delimited with blanks. This list may be either ascending or descending, but not
mixed. Example: LOC(1 3 5) may be used, but LOC (1 5 3) is illegal syntax. A range may
also be used in place of . Example: LOC(1-4) or LOC(4-1).

A dip switch can be 0, indicating OFF, 1, indicating ON, or X, indicating a "don't
care". A slide or rotary switch value consists of the position number the switch is set to.
Switch do not require radix identifiers: binary is assumed for dip switches and
decimal is assumed for rotary and slide switches.

A of dip switch may not be delimited. Example: LOC(1-6) xx1101

NAME is a required statement giving either the manufacturer's name or a description for
this switch. This is important as a reference for the user. A maximum of 20 characters is
recommended for the NAME statement.

STYPE is a required statement used to indicate the type of switch. A DIP switch is defined
as a set of switches, each having an ON and OFF position. A ROTARY switch is defined
as a round switch that may be set to one of n positions. A SLIDE switch is defined as a
straight line switch that may be set to one of n positions. All switches are numbered
beginning with 1.

VERTICAL is an optional statement that indicates that the switch is positioned
vertically on the board. The default is NO. See section 5.3.1, Switch and Jumper
Examples.

REVERSE is an optional statement that indicates that the switch is numbered 1234...
instead of the usual ...4321. Switches numbered in ascending order from left to right or top
to bottom are considered to be reversed. The default is NO. See section 5.3.1, Switch and
Jumper Examples.

LABEL is an optional list of text fields used to specify labels for individual switches. These
switches are listed in LOC(). Each label may have a maximum length of 10
characters. Example: LABEL = LOC(1-3) "SW1" "SW2" "SW3". If the LABEL statement
is omitted, the default numbering is ..4321 for normal switches and 1234.. for REVERSE
switches.

INITVAL is an optional statement used to specify the value of reserved switches in a set.
LOC() specifies the switches being defined and gives the values of these
switches. If omitted, all switches are assumed to be either determined by the configuration
program or "don't cares". Example: INITVAL = LOC(1 2) 10

FACTORY is an optional statement indicating the default value of the switches when the
board was shipped. LOC() specifies the switches being defined and gives
the values of these switches. Example: FACTORY = LOC(1-8) 11111111

COMMENTS is an optional text field containing additional information that will assist the
user in configuring this particular switch. This field may contain a maximum of 600
characters and will be displayed in a window at least 40 columns wide.

HELP is an optional text field containing information that will be displayed to the user if
he requests help while configuring the switch. This text field may contain a maximum of
600 characters and will be displayed in a window at least 40 columns wide.




Page 7

5.3 Jumper Identification Block

JUMPER(i) = n
NAME = "jumper name or description"
JTYPE = INLINE | PAIRED | TRIPOLE
[VERTICAL = YES | NO]
[REVERSE = YES | NO]
[LABEL = LOC() ]
[INITVAL = LOC() ]
[FACTORY = LOC() ]
[COMMENTS = ""]
[HELP = ""]

In the statement, JUMPER(i) = n, i is an index used to differentiate this Jumper
Identification Block from others. Jumpers should be numbered beginning with 1. N gives
the number of jumpers positions in the set. The maximum value for n is 16.

Several statements in the Jumper Identification Block use the LOC() clause to
reference individual jumpers within the block. A is defined as a list of jumper
numbers, delimited with blanks. This list may be either ascending or descending, but not
mixed. Example: LOC(1 3 5) may be used, but LOC(1 5 3) is illegal syntax. A range may
also be used in place of . Example: LOC(1-4) or LOC(4-1). Paired and tripole
jumpers are specified by their numbers, while inline jumpers are specified by the two posts
that they connect. A caret is used to show this connection. Example: LOC(1^2). Ranges
may not be used for inline jumper .

Jumper differ for each type of jumper and are explained in section 5.3.2, Notation
for Jumpers.

A of jumper may not be delimited. Example: LOC(1-3) 101

NAME is a required statement giving either the manufacturer's name or a description for
this jumper set. This is important as a reference for the user. A maximum of 20 characters
is recommended for the NAME statement.

JTYPE is a required statement used to indicate the type of jumper. INLINE jumpers are
arranged in a line, to be connected from one post to the next. PAIRED jumpers are
arranged as a series of double posts, to be connected across. TRIPOLE jumpers are
arranged as a series of triple posts, so that each jumper has two possible settings. Examples
of each type of jumper are given in section 5.3.2, Notation for Jumpers.

VERTICAL is an optional statement that indicates whether or not the jumper block is
positioned vertically on the board. The default is NO. See section 5.3.1, Switch and
Jumper Examples.

REVERSE is an optional statement that indicates that the jumper is numbered 1234...
instead of the usual ...4321. Jumpers numbered in ascending order from left to right or top
to bottom are considered to be reversed. The default is NO. See section 5.3.1, Switch and
Jumper Examples.

LABEL is an optional list of text fields used to specify labels for individual jumpers. These
jumpers are listed in LOC(). These labels may be placed between two
jumpers, numbered i and j, by specifying the jumper location as i^j. Each label may have a
maximum length of 10 characters. Example: LABEL = LOC(1-3) "J1" "J2" "J3". If the
LABEL statement is omitted, the default numbering is ..4321 for normal jumpers and
1234.. for REVERSE jumpers.


Page 8

INITVAL is an optional statement used to specify the settings of reserved jumpers in a set.
LOC() specifies the jumpers being defined and gives the settings of these
jumpers. If omitted, all jumper settings are assumed to be either determined by the
configuration program or "don't cares". Example: INITVAL = LOC(1^2 3^4) 11

FACTORY is an optional statement indicating the default settings of the jumpers when the
board was shipped. LOC() specifies the jumpers being defined and gives
the settings of these jumpers. Example: FACTORY = LOC(1-6) 110000

COMMENTS is an optional text field contained additional information that will assist the
user in configuring this particular jumper set. This field may contain a maximum of 600
characters and will be displayed in a window at least 40 columns wide.

HELP is an optional text field containing information that will be displayed to the user if
he requests help while configuring the jumper. This text field may contain a maximum of
600 characters and will be displayed in a window at least 40 columns wide.










































Page 9

5.3.1 Switch / Jumper Examples

The following examples assume the following adapter board orientation: edge connector
down, board bracket on the right.

Adapter Board Orientation:






{Board Outline}






Normal Switch: Reverse Switch:

{Horizontal {Horizontal
Rectangle} Rectangle}

6 5 4 3 2 1 1 2 3 4 5 6

Normal Vertical Switch: Reverse Vertical Switch:

6 1
5 2
4 {Vertical 3 {Vertical
3 Rectangle} 4 Rectangle}
2 5
1 6

Paired Jumper (Normal):

o o o o o o
o o o o o o
6 5 4 3 2 1

Tripole Jumper (Reverse): Tripole Jumper (Reverse, Vertical):

o o o o o o 1 o o o
o o o o o o 2 o o o
o o o o o o 3 o o o
1 2 3 4 5 6 4 o o o

Inline Jumper (Reverse):

o o o o o o
1 2 3 4 5 6






Page 10

5.3.2 Notation for Jumpers

Paired Jumpers:

Values for paired jumpers can be given in the same way that they are given
for switches, with a 1 or 0 for each position. A 1 indicates that the jumper is
present; a 0 indicates it is not. X's may also be used to indicate "don't care".

Tripole Jumpers:

Values for tripole jumpers can also be expressed in the standard way, with
some clarification of the meaning of 1s and 0s. A 1 indicates that the jumper
is in the upper position for horizontal jumpers or the right position for
vertical jumpers. A 0 indicates that the jumper is in the lower position for
horizontal jumpers or the left position for vertical jumpers. An upper or
lower case N indicates that the jumper is not present. X's may also be used
to indicate "don't care".

Inline Jumpers:

The standard notation is inadequate for describing inline jumpers. These
jumper positions are represented using carets. For example, the first jumper
position in an inline jumper block would be represented by 1^2. A 1
indicates that the jumper is present, a 0 indicates that the jumper is not
present. X's may also be used to indicate "don't care".

Inline Jumper Example:

JUMPER(1) = 7
NAME = "J101"
JTYPE = INLINE
VERTICAL = YES
REVERSE = YES
LABEL = LOC(1^2 3^4 5^6 7^8) "IRQ2" "IRQ3" "IRQ4" "IRQ5"
FACTORY = LOC(3^4) 1

This example would appear on the screen as follows. Note that the number
of jumper positions (7) is not equal to the number of posts.

o 1
IRQ2
o 2

o 3
IRQ3 |
o 4

o 5
IRQ4
o 6

o 7
IRQ5
o 8

J101


Page 11

5.4 Software Identification Block

SOFTWARE(i) = "software description"

In the SOFTWARE(i) statement, i is an index used to differentiate this Software
Identification Block from others.

At configuration time, the software description comments are displayed to the user.
Often, these comments will simply inform the user of a device driver that must be
called from the CONFIG.SYS file, or a program that must be run under DOS to
initialize an expansion board. On ISA systems, these programs often require
parameters to inform them which interrupt, DMA channel, or other global resource
was selected for their expansion board. By placing an INIT = SOFTWARE(i)
statement after the resource declaration, the parameter associated with the selected
resource may be appended to the software description comment and displayed to
the user. An example of this usage is shown in section 6.4.3, INIT Statement for
Software.

Software drivers on EISA machines will be able to determine their resource
parameters by querying a ROM BIOS call and this feature will not be necessary.


6 Function Statement Block

FUNCTION = ""
[TYPE = "]
[COMMENTS = ""]
[HELP = ""]
CHOICE = ""
resource description block
.
.
[CHOICE = ""]
[resource description block]

The FUNCTION statement names a function of the board. A maximum of 40 characters is
recommended for the function name. The information that follows details the choices of
resources used to implement the FUNCTION and the steps used to initialize the
FUNCTION.

TYPE is an optional statement used by a board manufacturer to identify a function or
device on a board. This information will be available to software drivers through a ROM
BIOS call. Characters in the TYPE string will be uppercased, and the TYPE string must be
placed in quotes. Types are discussed in more detail, and some predefined types are listed
in section 6.3, Types and Subtypes.

COMMENTS is an optional text field containing additional information about the
function. This text field may contain a maximum of 600 characters and will be displayed in
a window at least 60 columns wide when the function is selected.

HELP is an optional text field containing information that will be displayed to the user if
he requests help while configuring the function. This text field may contain a maximum of
600 characters and will be displayed in a window at least 40 columns wide.





Page 12

CHOICE statements are used to place different resource statements and their
corresponding initialization information into logical groups. Each FUNCTION must have
at least one CHOICE statement, and may have as many as necessary. A group of resource
and initialization statements is called a resource description block, and is described in the
following section. Each of a function's choices will have a different resource description

block. For example, if the function were "Serial Port", its choices might be "COM1",
"COM2", and "Disable Port". Each choice requires a different set of resources and
different initialization values. A maximum of 30 characters is recommended for the name.


6.1 Resource Description Block

Resource description blocks contain statements identifying the system resources used by a
particular configuration choice and the steps required to initialize this configuration. A
resource description block may contain the following statements:

[SUBTYPE = "choice type"]

[DISABLE = YES | NO]

[HELP = ""]

[Resource Statements]

[INIT Statements]

SUBTYPE is an optional statement used in conjunction with the FUNCTION level TYPE
declaration to provide information to software drivers through a ROM BIOS call.
Characters in the SUBTYPE string will be uppercased, and the SUBTYPE string must be
placed in quotes. Types and subtypes are discussed in more detail, and some predefined
types are listed in section 6.3, Types and Subtypes.

The DISABLE statement is used to inform the configuration program that, if the
corresponding CHOICE is selected, the function or device will be disabled. When resource
conflicts occur, the configuration program will select this choice only as a last resort. This
statement is optional. The default is NO.

HELP is an optional text field containing information that will be displayed to the user if
he requests help with the CHOICE. This text field may contain a maximum of 600
characters and will be displayed in a window 40 columns wide.

Resource statements list the system resources that will be used if the corresponding
CHOICE is selected. System resources include DMA channels, I/O ports, IRQs, and
memory address space. The statements used to identify these resources are discussed
separately.

INIT statements provide initialization information for each possible configuration of
resources. These statements are discussed separately.










Page 13

6.2 Resource Statements

6.2.1 DMA Statement

DMA =
[SHARE = YES | NO]
[SIZE = BYTE | WORD | DWORD]
[TIMING = DEFAULT | TYPEA | TYPEB | TYPEC]

SHARE is an optional statement that indicates whether the function is willing to share this
DMA channel. The default is NO.

SIZE is an optional statement that specifies whether the DMA channel uses 8-bit, 16-bit, or
32-bit data transfer. There is no default value. When provided, this information will be
used for verification purposes only.

TIMING is an optional statement that specifies the timing by the DMA channel. If
omitted, DEFAULT timing is assumed.

Example: DMA = 2 | 4
This example indicates that DMA channel 2 or 4 may be used. The selected
channel may not be shared, and default timing will be used.


6.2.2 PORT Statement

PORT = [STEP = ][COUNT = ]
[SHARE = YES | NO]
[SIZE = BYTE | WORD | DWORD]

If a range is given in the PORT statement, the STEP field may be used to indicate the
number of ports requested and the increment used in searching for available I/O space. If
the number of ports requested is different from the increment value, the COUNT field may
be used to supply the number of ports. The COUNT field may not be used without the
STEP field. If the STEP and COUNT fields are not supplied it is assumed that every port
in the range is being requested.

SHARE is an optional statement that indicates whether the function is willing to share the
requested port. The default is NO.

SIZE is an optional statement that is used to indicate the size of the port. There is no
default value. When provided, this information will be used for verification purposes only.

Slot-specific EISA port addresses must be prefixed with 0Z.














Page 14

Examples:

PORT = 300h - 30Fh
This example indicates that the entire range of 16 port addresses from 300h to 30Fh
will be used.

PORT = 300h - 30Fh STEP = 4
This example indicates that any of the following ranges may be used: 300h-303h,
304h-307h, 308h-30Bh, 30Ch-30Fh.

PORT = 300h - 310h STEP = 4
This example is acceptable, although it calls for 17 ports taken 4 at a time. The
extra port address is ignored, and the example becomes identical to the previous
one.

PORT = 300h - 30Fh STEP = 4 COUNT = 2
This example indicates that any of the following ranges may be used: 300h-301h,
304h-305h, 308h-309h, 30Ch-30Dh.


6.2.3 IRQ Statement

IRQ =
[SHARE = YES | NO]
[TRIGGER = LEVEL | EDGE]

SHARE is an optional statement that indicates whether the function is willing to share this
interrupt. The default is NO.

TRIGGER is an optional statement that specifies whether the interrupt is level or edge
triggered. The default is edge triggered.

Example: IRQ = 3 | 4 | 5
SHARE = YES
TRIGGER = LEVEL
This example indicates that IRQ 3, 4, or 5 may be used as a shared, level triggered,
interrupt.


6.2.4 MEMORY Statement

MEMORY = [STEP = ]
[ADDRESS = [STEP = ]]
[WRITABLE = YES | NO]
[MEMTYPE = SYS | EXP | OTHER]
[SIZE = BYTE | WORD | DWORD]
[CACHE = YES | NO]
[SHARE = YES | NO]

The MEMORY statement is used to define a range of memory on the board. Memory
expansion boards can usually contain several different amounts of memory. Each of these
values can be listed, or a range can be given. If a range is given, the STEP field is required
to give the smallest increment by which memory can be added to the board.





Page 15

ADDRESS specifies the address where the memory will be located. If a single address is
given, the memory must be located there. If a list of addresses is given, the memory may be
located at any of these addresses. If an address range is given, the memory will be located
within that range, and the STEP field is required to give the increment used in searching
for an available slot. The ADDRESS statement should only be used for memory that
resides in the system's 4 GB physical address space.

WRITABLE is an optional statement that indicates whether the memory may be written
to. The default is YES.

MEMTYPE is an optional statement that specifies whether the memory is SYStem,
EXPanded, or OTHER. System memory includes memory in the 4 GB physical address
space that is managed by the operating system. Expanded memory is memory that does not
use physical address space and is managed by an expanded memory manager. Expanded
memory should not have an ADDRESS statement. OTHER includes memory that is not
managed by the operating system, such as expanded memory page frames, memory mapped
I/O, and bank-switched memory. OTHER memory should have an ADDRESS statement
only if it resides in the physical address space. The default for the MEMTYPE statement is
SYS.

SIZE is an optional statement used to identify the memory as 8-bit, 16-bit, or 32-bit. There
is no default. When provided, this information will be used for verification purposes only.

CACHE is an optional statement that indicates whether or not this memory is cachable.
The default is NO.

SHARE is an optional statement that indicates whether this memory address space may be
shared with another adapter board. The default is NO.

Examples:

MEMORY = 128K
ADDRESS = 0E0000h
WRITABLE = NO
MEMTYPE = OTHER
This example describes a 128K system ROM located at address 0E0000h.

MEMORY = 1M - 4M STEP = 512K
ADDRESS = 1M - 16M STEP = 256K
WRITABLE = YES
MEMTYPE = SYS
This example describes a memory expansion board that can add from 1 to 4 MB of
extended memory. Memory can be added to this board in 512K increments. This
memory must be located in the address space above 1 MB and below 16 MB. It's
starting address can be on any 256K boundary within this range.













Page 16

6.3 Types and Subtypes

Types and subtypes are used to identify devices installed in the system, special
characteristics of these devices, and the way in which these devices are configured. This
information is stored in CMOS memory, where it can be used by operating systems and
generic device drivers to identify the devices installed in a system at initialization time.

Type strings are composed of multiple fields, separated by commas. Fields are arranged so
that they describe the device function or characteristics with increasing level of detail. The
first field in the string should describe the general functional category, such as
communication or video, for the FUNCTION being described. Subsequent fields in the
type strings should more specifically classify the FUNCTION by describing its
characteristics in more detail. For example, a standard VGA expansion board would have
the type string "VID,VGA". VID categorizes it as a video board, and VGA defines it as a
specific standard. Further additions could be made to the type string to describe more
specific characteristics or enhancements.

Subtype strings are used to add information to the type string regarding the device's
configuration as determined at system configuration time. The subtype strings for each
possible configuration of the device are specified under the corresponding CHOICE. The
configuration utility automatically appends to the type string the content of the subtype
string that corresponds to the CHOICE selected for that FUNCTION at system
configuration time. Subtype strings are separated from the type string by a semicolon.
Semicolons are also used to delimit multiple subtype strings.


































Page 17

The following examples list some predefined types.

Device Type Device Description

COM,ASY Standard ISA compatible serial controller
COM,ASY,FIFO NS16550A based serial ctrl. with FIFO
COM,SYN Synchronous communications card
COM,ASY,SYN,SDLC,NSC,HDLC Multi-function communications card
supporting SDLC, bisync, and HDLC
protocols

PAR ISA compatible parallel port controller
PAR,BID ISA parallel port with bidirectional mode

PTR,8042 Standard 8042 pointing device

NPX,287 Intel 287 numeric coprocessor
NPX,387 Intel 387 numeric coprocessor
NPX,387SX Intel 387 numeric coprocessor, SX version
NPX,W1167 Weitek 1167 numeric coprocessor
NPX,W3167 Weitek 3167 numeric coprocessor

KEY,nnn,COU=xx Standard keyboard
nnn = number of keys
(083, 084, 101, or 103)
xx = keyboard country code
(US, UK, FR, GR, IT, SP, LA, SV,
SU, NL, DK, NO, PO, SF, SG, CF,
or BE)

VID,MDA Standard mono adapter
VID,MDA,HERC Standard Hercules mono adapter
VID,CGA Standard CGA adapter
VID,CGA,ATT400 CGA with AT&T 640x400 superset
VID,EGA Standard EGA adapter
VID,VGA Standard VGA adapter

MSD,DSKCTL(1) Primary standard AT-compatible disk ctl.
MSD,FPYCTL(1) Primary standard 765 floppy controller
MSD,TAPCTL(1) Primary tape controller

OTH,JOY Miscellaneous entry (OTHer) identifying
a joystick card















Page 18

The use of TYPEs and SUBTYPEs is shown in the following example:

FUNCTION = "Serial Port"
TYPE = "COM,ASY"

CHOICE = "Configure as COM1"
SUBTYPE = "COM(1)"
LINK
PORT = 3F8h-3FFh
IRQ = 4
INIT = IOPORT(1) XXXXXXX0

CHOICE = "Configure as COM2"
SUBTYPE = "COM(2)"
LINK
PORT = 2F8h-2FFh
IRQ = 3
INIT = IOPORT(1) XXXXXXX1

In the above example, either "COM(1)" or "COM(2)" would be appended to "COM,ASY"
depending upon which CHOICE was selected by the configuration program or the user.





































Page 19

6.4 INIT Statements

INIT statements provide the values needed to initialize programmable boards, or the
switch settings used on switch-programmable boards. INIT statements may also be used to
provide the user with information needed to properly install software drivers. INIT
statements may follow any system resource statement, including DMA, IRQ, PORT,
MEMORY, and ADDRESS. These resource statements may have multiple INIT
statements if necessary. Also, multiple resource statements may use the same INIT
statement. The relationship between INIT statements and their corresponding resource
statements is defined by the type of group into which these statements are placed.
Resource and INIT statement groups are discussed in section 6.5.


6.4.1 INIT Statement for Programmable I/O Ports

INIT = IOPORT(i)

IOPORT(i) indicates which port is to be used. gives a list of values to be output
to the port for each resource option. These values must be in binary and may
contain Xs to mask off bits not used for that resource.

Example:
IRQ = 3 | 4
INIT = IOPORT(1) XXXXXX01 | XXXXXX10
In this example, bits 1 and 0 would be set to 01 for IRQ3 or 10 for IRQ4.

A shorthand form of the INIT statement for I/O ports is provided for boards that must
initialize a large number of ports. This form does not require a corresponding IOPORT
statement, as the port address is contained within the INIT statement. The syntax for the
shorthand form is as follows:

INIT = IOPORT(
)

specifies the address of the I/O port. Slot specific addresses must be
prefixed with a 0Z.

gives a list of values to be output to the port for each resource option. The
values are binary only: it is not necessary to specify the radix. A bit position
marked with an 'r' indicates that the bit value should be read from the port. The
length of the values in the list must be the same as the data width of the port: 8, 16,
or 32 bits.

Example:
DMA = 2 | 4
INIT = IOPORT(0Z380h) XXXXXX01 | XXXXXX10
In this example, bits 1 and 0 would be set to 01 for DMA channel 2 or 10 for DMA channel
4.











Page 20

6.4.2 INIT Statement for Switches and Jumpers

INIT = SWITCH(i) LOC()
INIT = JUMPER(i) LOC()

SWITCH(i) or JUMPER(i) indicates which switch/jumper block is to be used.

LOC() or LOC() lists the individual switches or jumpers used to
configure the current resource.

A is defined as a list of switch numbers, delimited with blanks. This list
may be either ascending or descending, but not mixed. Example: LOC(1 3 5) may
be used, but LOC(1 5 3) is illegal syntax. A range may also be used in place of
. Example: LOC(1-4) or LOC(4-1).

A is defined as a list of jumper numbers, delimited with blanks. This list
may be either ascending or descending, but not mixed. Example: LOC(1 3 5) may
be used, but LOC(1 5 3) is illegal syntax. A range may also be used in place of
. Example: LOC(1-4) or LOC(4-1). Paired and tripole jumpers are
specified by their numbers, while inline jumpers are specified by the two or more
posts that they connect. A caret is used to show this connection. Example:
LOC(1^2). Ranges may not be used for inline jumper .

gives a list of the settings needed for each resource option. A 1 represents a
switch in the ON position, a 0 represents a switch in the OFF position, and Xs may
be used as don't cares. Settings for jumpers depend on the jumper type, and are
discussed in section 5.3.2 entitled Notation for Jumpers.

Example:
PORT = 300h - 30Fh STEP 4
INIT = SWITCH(1) LOC(1 2) 00 | 01 | 10 | 11
This example shows a PORT statement that has four possible configurations. Dip switch
locations 1 and 2 of SWITCH(1) are used to select a configuration, as shown in the
following table:

Port Range Switch #1 Switch #2

300h-303h OFF OFF
304h-307h OFF ON
308h-30BH ON OFF
30Ch-30Fh ON ON


6.4.3 INIT Statement for Software

INIT = SOFTWARE(i)

SOFTWARE(n) indicates which SOFTWARE statement will be displayed to the
user during system configuration. gives a list of parameters to be passed to the
SOFTWARE statement for each resource option. Each parameter should be text
enclosed in quotes. The SOFTWARE statement will display a block of comments
followed by the parameters associated with the resources chosen.






Page 21

Example:

BOARD
ID = ...
NAME = "Network Adapter"
.
.
SOFTWARE(1) =
"The Network Adapter is initialized using the program \n
NET.EXE. The following command should be placed in your \n
AUTOEXEC.BAT file: NET /I=x /D=y where "
.
.
IRQ = 3 | 4 | 5
INIT = SWITCH(1) LOC(1 2) 00 | 01 | 10
INIT = SOFTWARE(1) "x is 3" | "x is 4" | "x is 5"

DMA = 2 | 5
INIT = SWITCH(1) LOC(3) 0 | 1
INIT = SOFTWARE(1) "y is 2" | "y is 5"
.
.

In the above example, the IRQ and DMA statements are followed by two INITs. The first
INIT is used to inform the user of the proper switch setting for the chosen value. The next
INIT statement provides the proper parameter to the SOFTWARE statement. This
parameter is displayed after the SOFTWARE statement. For example, if IRQ3 and DMA
channel 2 were chosen above, the SOFTWARE statement would be displayed followed by:
x is 3
y is 2


6.5 Resource and INIT Statement Groupings

Resource statements and INIT statements are divided into groups within a configuration
file. Each resource description block within each CHOICE may have one or more of these
groups. A group is defined as a set of resources and INIT statements that are all directly
related. Resource statements that are initialized independently of each other would fall
into separate groups.

The start of a grouping is marked by a keyword indicating the group's type. The group ends
when either another group or the end of the resource description block is encountered.

There are three types of groups in which resource and INIT statements can be placed.
These groups, linked, combined, and free-form, are discussed separately.

All resource and INIT statements must be defined within a group.











Page 22

6.5.1 Linked Groupings

In a linked group, each statement must have the same number of options. These options
have a one-to-one correspondence with options in the other statements. If the first option
is chosen in one statement, then by definition the first option is chosen in each of the other

statements. Linked groups have the following syntax:

LINK
resource and/or INIT statements

Example:

LINK
IRQ = 3 | 4
DMA = 2 | 5
INIT = IOPORT(1) xxxxxx10 | xxxxxx01

In the above example, the first initialization value is used if IRQ 3 and DMA 2 are chosen,
and the second is used if IRQ 4 and DMA 5 are chosen.


6.5.2 Combined Groupings

In a combined group, every combination of options encompassing all resource statements
are provided with an initialization value in the group's INIT statement. This type of group
is used primarily with MEMORY and ADDRESS statements. Combined groups have the
following syntax:

COMBINE
resource and/or INIT statements

Example:

COMBINE
MEMORY = 1M | 2M
ADDRESS = 1M | 2M
INIT = IOPORT(2) 00xxxxxx | 01xxxxxx | 10xxxxxx | 11xxxxxx

In the above example, the first initialization value is used for 1M of memory starting at 1M.
The second is used for 1M of memory starting at 2M. The third is used for 2M of memory
starting at 1M. Finally, the fourth initialization value is used for 2M of memory starting at
the address 2M.

The INIT statement for a combined group should have a number of values equal to the
product of all the options in the preceding resource statements. The combinations
always proceed with the first resource statement taking the most significant position and
the last resource taking the least significant position.











Page 23

When MEMORY and ADDRESS statements are used in a combined group, certain illegal
combinations are automatically recognized by the configuration program. These
combinations result from the use of ranges in the ADDRESS statement. An example of
this situation follows:

COMBINE
MEMORY = 1M | 2M
ADDRESS = 1M - 4M STEP = 1M
INIT = IOPORT(1) XXXXX000 - XXXXX100

This example is shown in the following table:

Memory Amount Starting Address Port Value

1M 1M XXXXX000
1M 2M XXXXX001
1M 3M XXXXX010
2M 1M XXXXX011
2M 2M XXXXX100
2M 3M --------

In the above example, 1M of memory may be placed at addresses 1M, 2M, or 3M, but not
at 4M because this violates the ADDRESS statement that states that the memory must be
contained in the range 1M to 4M. Similarly, 2M of memory may be placed at addresses 1M
or 2M only. Initialization values are only provided for the five legal memory and address
combinations.


6.5.3 Free-Form Groupings

In a free-form group, all resource and INIT statements are considered to be independent of
each other. No correspondence at all between the resource and INIT statements is
required. Free-form groups have the following syntax:

FREE
resource and/or INIT statements

Example:

FREE
IRQ = 2 | 3 | 4 | 5
DMA = 4
INIT = IOPORT(2) xxxx1010b

In the above example, IRQ 2, 3, 4, or 5 may be selected, with no initialization required. It
is assumed that any initialization for this statement will be done at a later time by an
independent program. This example also states that DMA channel 4 will be used, and that
the initialization given in the INIT statement should always be performed. Each of these
statements is independent and completely unrelated to the others.









Page 24

7 Advanced Topics

The following advanced topics are not implemented by the ISA Configuration Utility, but a
brief introduction to them is included for completeness.


7.1 Subchoices

There are many examples of existing ISA switch programmable boards in which the
number of possible configurations is very large. Memory expansion boards that allow you
to allocate memory as conventional, extended, or expanded are especially notorious for
this. In these cases, it is desirable to let the configuration utility do most of the work rather
than forcing the user to select from a long and confusing list of configuration choices.
Subchoices may be used to insulate the user from part of this decision making process.

The syntax for the SUBCHOICE statement is shown below:

CHOICE = ""
global resource description block

SUBCHOICE
subchoice resource description block
.
.
SUBCHOICE
subchoice resource description block

A choice may have as many subchoices as necessary.

The resources listed before the subchoices in the global resource description block are
allocated regardless of the subchoice selected.

Each subchoice contains the resource and INIT statements required for that configuration.

Subchoices are mutually exclusive. Only one subchoice will be selected per choice by the
configuration program.

Subchoices are provided as a means of simplifying very complex configuration scenarios for
the user's benefit. Consequently, they should only be used in complex situations, such as
handling certain memory configurations. Separate CHOICE statements should be used
whenever the user has a choice to make, for example, choosing between COM1 and COM2
for a serial port. If the user does not wish to make this decision, the configuration program
is capable of doing so automatically. Subchoices are configuration alternatives that are not
seen by the user. He may still scroll through the possible configurations, including those
present in subchoices, but a list of these alternatives is never presented to him, as is the
case with separate, named, choices.












Page 25

The following example presents a situation in which the use of subchoices is warranted.
Suppose that the configuration of a memory expansion board is directly dependent upon
the amount of base memory that currently exists in the system. This may be accomplished
using separate CHOICE statements that explicitly state the amount of base memory for
each case:

CHOICE = "Add Memory, 256K Already Installed"
CHOICE = "Add Memory, 384K Already Installed"
CHOICE = "Add Memory, 512K Already Installed"
CHOICE = "Add Memory, 640K Already Installed"

This is a viable solution to the problem, although it requires the user to know how much
base memory was previously installed. A solution using subchoices would appear to the
user as follows:

CHOICE = "Add Memory"

This choice would be followed by four subchoices that the user would not see. The first
subchoice would attempt to add memory at 256K. If memory already existed there,
the configuration utility would try the second subchoice, that would attempt to add memory
starting at 384K. This progression would continue until a subchoice that did not conflict
with previously allocated resources was found. This solution, although equivalent to the
first, would be significantly less confusing for a beginning user.

In general, subchoices should not be used when a small number of choices will suffice.
They should be reserved for cases in which the language is insufficient or it is desirable to
insulate the user from making a decision that is too technical.


7.2 TOTALMEM Statement

TOTALMEM is a statement that is placed under a CHOICE statement and used to specify
the total amount of memory on a memory expansion board. This statement is required by
memory expansion boards that can allocate portions of their memory as conventional,
extended, or expanded. This would require multiple memory statements in a single
CHOICE, and the user would select the desired amount of each type of memory. The
TOTALMEM statement allows the configuration program to verify that the total amount
of memory selected in multiple memory statements does not exceed the amount of memory
installed on the board. This statement also allows the configuration program to select the
proper SUBCHOICE, when SUBCHOICES are used.

The syntax for the TOTALMEM statement is:

TOTALMEM = [STEP = ]

For a given CHOICE, the amounts of memory that could exist on the board must be given
in the TOTALMEM statement. Each of these values can be listed, or a range can be given.
If a range is given, the STEP field is required to give the smallest increment by which
memory can be added to the board.









Page 26

Examples:

TOTALMEM = 1024K | 1536K | 2048K

TOTALMEM = 1M - 2M STEP = 512K

The above examples are equivalent.

A TOTALMEM statement must be given for each CHOICE within a FUNCTION that
provides expansion memory and allows the user to divide that memory as conventional,
extended, and/or expanded memory. The TOTALMEM statement should be placed
before the resource and INIT statement groupings for that CHOICE.

The TOTALMEM statement should encompass all system and expanded memory provided
by the expansion board (MEMTYPE = SYS or EXP). Memory that is classified as
OTHER is not included in the TOTALMEM statement.


7.3 Embedded Slots

Embedded slots are used to contain resource information for devices that reside on
another board, typically the system board. Embedded devices decode slot-specific I/O, and
may or may not have readable id's. Embedded devices must use slots that do not physically
exist on the system board. If the system board provides n expansion slots, the range of
usable embedded slots is n+1 thru 15, because slot-specific I/O is defined for slots 0 thru
15.

Embedded slots are defined using standard configuration files. An embedded slot
configuration file must contain the statement SLOT = EMB(n), where n is the number of
the embedded slot being used. This statement is placed in the Board Identification Block
in place of the standard SLOT statement.


7.4 Virtual Slots

Virtual slots allow peripherals to be added to installed boards such as disk controllers or
serial ports, and allow functions or devices which reside on the system board to appear
separately. Virtual slots may also contain resource information for software drivers, such
as extended memory managers, that require resources. Virtual slots do not use slot-specific
I/O, and do not have readable id's.

Virtual slots are defined using standard configuration files. A virtual slot configuration file
must have the statement, SLOT = VIR, in its Board Identification Block, in place of the
standard SLOT statement.


7.5 System Board Configuration Files

The system board is identified in the board identification block as embedded slot #0, using
the statement:

SLOT = EMB(0)






Page 27

7.5.1 System Board Identification Block

System board configuration files must supply additional information to the configuration
utility. This information includes the amount of non-volatile memory available, the
number of expansion slots on the system board, and the size and type of each expansion
slot. This information is provided in the System Board Identification Block, that may be
placed anywhere after the Board Identification Block.

SYSTEM
EISACMOS =
SLOT(1) = ISA8 | ISA 16 | EISA
LENGTH =
[SKIRT = YES | NO]
.
.
SLOT(i) = ISA8 | ISA16 | EISA
LENGTH =
[SKIRT = YES | NO]

The SYSTEM statement appears at the beginning of the System Board Identification
Block.

EISACMOS is a required statement listing the amount of non-volatile memory available
for EISA slot-specific use.

The SLOT(i) and LENGTH statements identify the number, type, and length of expansion
slots available on the system board. The SLOT statements specify the slot types as ISA8,
or 8-bit ISA, ISA16 for 16-bit ISA, or EISA. The LENGTH statements specify the lengths
of the longest expansion boards that can be accommodated by each slot. Lengths must be
stated in millimeters. Fractions may not be used.

The optional SKIRT statements indicate whether or not each slot on the system board can
accommodate an expansion board that contains a lower extension, or skirt. The default is
YES, expansion boards with skirts can be accommodated.


7.6 CONNECTION Statement

Associated with each FUNCTION statement in the CFG file is an optional statement of
the following syntax:

CONNECTION = "location"

where the "location" text is replaced by a short string describing the location of the
connector. So, for example, a serial/parallel board might have the CONNECTION value
for the serial port set to "Top" or "Upper", and the CONNECTION value for the parallel
port set to "Bottom" or "Lower". There are no predefined types for this field.

This information will be displayed to the user on request.










Page 28

7.7 Variable Ports

There are cases in which the address of an IOPORT that needs to receive an initialization
value is dependent upon a choice made by the configuration program or the user. Variable
ports can be used in these situations. The syntax is as follows:

IOPORT(n) = PORTVAR(i)

Instead of specifying the address in the Programmable I/O Port Identification Block, a
reference is made to a PORTVAR. PORTVARs should be numbered independently; their
indices have no relationship with those of the IOPORT statements. The PORTVAR is
then defined later under a CHOICE statement.

PORTVAR(i) =


The INIT statements that reference the IOPORT are unchanged.

Example:

IOPORT(1) = 0Z280h
INITVAL = 111100XX

IOPORT(2) = PORTVAR(1) ;Variable Port
INITVAL = XXXX10xx

FUNCTION = "Serial Port"

SUBFUNCTION = "Port Number"

CHOICE = "COM1"
PORTVAR(1) = 3F9h
LINK
PORT = 3F0h - 3FFh
INIT = IOPORT(1) XXXXXX01

CHOICE = "COM2"
PORTVAR(1) = 2F9h
LINK
PORT = 2F0h - 2FFh
INIT = IOPORT(1) XXXXXX10

SUBFUNCTION = "Baud Rate"

CHOICE = "1200"
FREE
INIT = IOPORT(2) 1001XX00
CHOICE = "2400"
FREE
INIT = IOPORT(2) 1001XX01
.
.

In the above example, the I/O port used to initialize the baud rate is dependent upon
whether the serial port is selected as COM1 or COM2.




Page 29


 December 10, 2017  Add comments

Leave a Reply