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