[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

	IFND	LIBRARIES_CONFIGREGS_I
LIBRARIES_CONFIGREGS_I	SET	1
**
**	$Filename: libraries/configregs.i $
**	$Release: 2.04 Includes, V37.4 $
**	$Revision: 36.11 $
**	$Date: 90/11/03 $
**
**	AutoConfig (tm) hardware register and bit definitions
**
**	(C) Copyright 1985-1999 Amiga, Inc.
**	    All Rights Reserved
**

	IFND	EXEC_TYPES_I
	INCLUDE	"exec/types.i"
	ENDC	;EXEC_TYPES_I

**
** AutoConfig (tm) boards each contain a 32 byte "ExpansionRom" area that is
** read by the system software at configuration time.  Configuration of each
** board starts when the ConfigIn* signal is passed from the previous board
** (or from the system for the first board).  Each board will present it's
** ExpansionRom structure at location $00E80000 to be read by the system.
** This file defines the appearance of the ExpansionRom area.
**
** Expansion boards are actually organized such that only one nybble per
** 16 bit word contains valid information.  The low nybbles of each
** word are combined to fill the structure below. (This table is structured
** as LOGICAL information.  This means that it never corresponds exactly
** with a physical implementation.)
**
** The ExpansionRom space is further split into two regions:  The first 16
** bytes are read-only.  Except for the er_type field, this area is inverted
** by the system software when read in.  The second 16 bytes contain the
** control portion, where all read/write registers are located.
**
** The system builds one "ConfigDev" structure for each board found.  The
** list of boards can be examined using the expansion.library/FindConfigDev
** function.
**
** A special "hacker" Manufacturer ID number is reserved for test use:
** 2011 ($7DB).  When inverted this will look like $F824.
**

 STRUCTURE ExpansionRom,0	;-First 16 bytes of the expansion ROM
    UBYTE	er_Type 	;Board type, size and flags
    UBYTE	er_Product	;Product number, assigned by manufacturer
    UBYTE	er_Flags	;Flags
    UBYTE	er_Reserved03	;Must be zero ($ff inverted)
    UWORD	er_Manufacturer ;Unique ID,ASSIGNED BY AMIGA, INC.!
    ULONG	er_SerialNumber ;Available for use by manufacturer
    UWORD	er_InitDiagVec	;Offset to optional "DiagArea" structure
    UBYTE	er_Reserved0c
    UBYTE	er_Reserved0d
    UBYTE	er_Reserved0e
    UBYTE	er_Reserved0f
    LABEL	ExpansionRom_SIZEOF


**
** Note that use of the ec_BaseAddress register is tricky.  The system
** will actually write twice.  First the low order nybble is written
** to the ec_BaseAddress register+2 (D15-D12).  Then the entire byte is
** written to ec_BaseAddress (D15-D8).  This allows writing of a byte-wide
** address to nybble size registers.
**

 STRUCTURE ExpansionControl,0	;-Second 16 bytes of the expansion ROM
    UBYTE	ec_Interrupt	;Optional interrupt control register
    UBYTE	ec_Z3_HighBase	;Zorro III   : Bits 24-31 of config address
    UBYTE	ec_BaseAddress	;Zorro II/III: Bits 16-23 of config address
    UBYTE	ec_Shutup	;The system writes here to shut up a board
    UBYTE	ec_Reserved14
    UBYTE	ec_Reserved15
    UBYTE	ec_Reserved16
    UBYTE	ec_Reserved17
    UBYTE	ec_Reserved18
    UBYTE	ec_Reserved19
    UBYTE	ec_Reserved1a
    UBYTE	ec_Reserved1b
    UBYTE	ec_Reserved1c
    UBYTE	ec_Reserved1d
    UBYTE	ec_Reserved1e
    UBYTE	ec_Reserved1f
    LABEL	ExpansionControl_SIZEOF

**
** many of the constants below consist of a triplet of equivalent
** definitions: xxMASK is a bit mask of those bits that matter.
** xxBIT is the starting bit number of the field.  xxSIZE is the
** number of bits that make up the definition.	This method is
** used when the field is larger than one bit.
**
** If the field is only one bit wide then the xxB_xx and xxF_xx convention
** is used (xxB_xx is the bit number, and xxF_xx is mask of the bit).
**

** manifest constants **
E_SLOTSIZE		EQU	$10000
E_SLOTMASK		EQU	$ffff
E_SLOTSHIFT		EQU	16


** these define the free regions of Zorro memory space.
** THESE MAY WELL CHANGE FOR FUTURE PRODUCTS!
E_EXPANSIONBASE 	EQU	$00e80000	;Zorro II  config address
EZ3_EXPANSIONBASE	EQU	$ff000000	;Zorro III config address

E_EXPANSIONSIZE 	EQU	$00080000	;Zorro II  I/O type cards
E_EXPANSIONSLOTS	EQU	8

E_MEMORYBASE		EQU	$00200000	;Zorro II  8MB space
E_MEMORYSIZE		EQU	$00800000
E_MEMORYSLOTS		EQU	128

EZ3_CONFIGAREA		EQU	$40000000	;Zorro III space
EZ3_CONFIGAREAEND	EQU	$7FFFFFFF	;Zorro III space
EZ3_SIZEGRANULARITY	EQU	$00080000	;512K increments


***** er_Type definitions (ttldcmmm) ****************************************

** er_Type board type bits -- the OS ignores "old style" boards **
ERT_TYPEMASK		EQU	$c0	;Bits 7-6
ERT_TYPEBIT		EQU	6
ERT_TYPESIZE		EQU	2
ERT_NEWBOARD		EQU	$c0
ERT_ZORROII		EQU	ERT_NEWBOARD
ERT_ZORROIII		EQU	$80

** other bits defined in er_Type **
	BITDEF	ERT,MEMLIST,5		; Link RAM into free memory list
	BITDEF	ERT,DIAGVALID,4 	; ROM vector is valid
	BITDEF	ERT,CHAINEDCONFIG,3	; Next config is part of the same card

** er_Type field memory size bits **
ERT_MEMMASK		EQU	$07	;Bits 2-0
ERT_MEMBIT		EQU	0
ERT_MEMSIZE		EQU	3



***** er_Flags byte -- for those things that didn't fit into the type byte ****
***** the hardware stores this byte in inverted form			   ****
	BITDEF	ERF,MEMSPACE,7		; Wants to be in 8 meg space.
					; (NOT IMPLEMENTED)

	BITDEF	ERF,NOSHUTUP,6		; Board can't be shut up.

	BITDEF	ERF,EXTENDED,5		; Zorro III: Use extended size table
					;	     for bits 0-2 of er_Type.
					; Zorro II : Must be 0

	BITDEF	ERF,ZORRO_III,4 	; Zorro III: must be 1
					; Zorro II : must be 0

ERT_Z3_SSMASK		EQU	$0F	; Bits 3-0.  Zorro III Sub-Size.  How
ERT_Z3_SSBIT		EQU	0	; much space the card actually uses
ERT_Z3_SSSIZE		EQU	4	; (regardless of config granularity)
					; Zorro II : must be 0


** ec_Interrupt register (unused) *********************************************
	BITDEF	ECI,INTENA,1
	BITDEF	ECI,RESET,3
	BITDEF	ECI,INT2PEND,4
	BITDEF	ECI,INT6PEND,5
	BITDEF	ECI,INT7PEND,6
	BITDEF	ECI,INTERRUPTING,7


**************************************************************************
**
** these are the specifications for the diagnostic area.  If the Diagnostic
** Address Valid bit is set in the Board Type byte (the first byte in
** expansion space) then the Diag Init vector contains a valid offset.
**
** The Diag Init vector is actually a word offset from the base of the
** board.  The resulting address points to the base of the DiagArea
** structure.  The structure may be physically implemented either four,
** eight, or sixteen bits wide.  The code will be copied out into
** ram first before being called.
**
** The da_Size field, and both code offsets (da_DiagPoint and da_BootPoint)
** are offsets from the diag area AFTER it has been copied into ram, and
** "de-nybbleized" (if needed). (In other words, the byte size is the size of
** the actual information, not how much address space is required to
** store it.)
**
** All bits are encoded with uninverted logic (e.g. 5 volts on the bus
** is a logic one).
**
** If your board is to make use of the boot facility then it must leave
** its config area available even after it has been configured.  Your
** boot vector will be called AFTER your board's final address has been
** set.
**
**************************************************************************

 STRUCTURE DiagArea,0
    UBYTE	da_Config	; see below for definitions
    UBYTE	da_Flags	; see below for definitions
    UWORD	da_Size	; the size (in bytes) of the total diag area
    UWORD	da_DiagPoint	; where to start for diagnostics, or zero
    UWORD	da_BootPoint	; where to start for booting
    UWORD	da_Name	; offset in diag area where a string
				;   identifier can be found (or zero if no
				;   identifier is present).

    UWORD	da_Reserved01	; two words of reserved data.  must be zero.
    UWORD	da_Reserved02
    LABEL	DiagArea_SIZEOF

; da_Config definitions
**
** DAC_BYTEWIDE can be simulated using DAC_NIBBLEWIDE.
**
DAC_BUSWIDTH	EQU	$C0	; two bits for bus width
DAC_NIBBLEWIDE	EQU	$00	; (indicates information is nybble wide)
DAC_BYTEWIDE	EQU	$40	; BUG: Will not work under V34 Kickstart!
DAC_WORDWIDE	EQU	$80

DAC_BOOTTIME	EQU	$30	; two bits for when to boot
DAC_NEVER	EQU	$00	; obvious
DAC_CONFIGTIME	EQU	$10	; call da_BootPoint when first configing
				;   the device
DAC_BINDTIME	EQU	$20	; run when binding drivers to boards

**
** These are the calling conventions for the diagnostic callback
** (from da_DiagPoint).
**
** A7 -- points to at least 2K of stack
** A6 -- ExecBase
** A5 -- ExpansionBase
** A3 -- your board's ConfigDev structure
** A2 -- Base of diag/init area that was copied
** A0 -- Base of your board
**
** Your board must return a value in D0.  If this value is NULL, then
** the diag/init area that was copied in will be returned to the free
** memory pool.
**

	ENDC	;LIBRARIES_CONFIGREGS_I