IFND LIBRARIES_CONFIGREGS_I LIBRARIES_CONFIGREGS_I SET 1 ** ** $Filename: libraries/configregs.i $ ** $Release: 1.3 $ ** ** register and bit definitions for expansion boards ** ** (C) Copyright 1986,1987,1988 Commodore-Amiga, Inc. ** All Rights Reserved ** ** Expansion boards are actually organized such that only one nibble per ** word (16 bits) are valid information. This table is structured ** as LOGICAL information. This means that it never corresponds ** exactly with a physical implementation. ** ** The expansion space is logically split into two regions: ** a rom portion and a control portion. The rom portion is ** actually stored in one's complement form (except for the ** er_type field). STRUCTURE ExpansionRom,0 UBYTE er_Type UBYTE er_Product UBYTE er_Flags UBYTE er_Reserved03 UWORD er_Manufacturer ULONG er_SerialNumber UWORD er_InitDiagVec UBYTE er_Reserved0c UBYTE er_Reserved0d UBYTE er_Reserved0e UBYTE er_Reserved0f LABEL ExpansionRom_SIZEOF STRUCTURE ExpansionControl,0 UBYTE ec_Interrupt ; interrupt control register UBYTE ec_Reserved11 UBYTE ec_BaseAddress ; set new config address UBYTE ec_Shutup ; don't respond, pass config out 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 two free regions of Zorro memory space. ** THESE MAY WELL CHANGE FOR FUTURE PRODUCTS! E_EXPANSIONBASE EQU $e80000 E_EXPANSIONSIZE EQU $080000 E_EXPANSIONSLOTS EQU 8 E_MEMORYBASE EQU $200000 E_MEMORYSIZE EQU $800000 E_MEMORYSLOTS EQU 128 ******* ec_Type definitions */ ** board type -- ignore "old style" boards */ ERT_TYPEMASK EQU $c0 ERT_TYPEBIT EQU 6 ERT_TYPESIZE EQU 2 ERT_NEWBOARD EQU $c0 ** type field memory size */ ERT_MEMMASK EQU $07 ERT_MEMBIT EQU 0 ERT_MEMSIZE EQU 3 ** other bits defined in type field */ BITDEF ERT,CHAINEDCONFIG,3 BITDEF ERT,DIAGVALID,4 BITDEF ERT,MEMLIST,5 ** er_Flags byte -- for those things that didn't fit into the type byte */ BITDEF ERF,MEMSPACE,7 ; wants to be in 8 meg space. Also ; implies that board is moveable BITDEF ERF,NOSHUTUP,6 ; board can't be shut up. Must not ; be a board. Must be a box that ; does not pass on the bus. ** interrupt control register */ 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-nibbleized" (if needed). Inotherwords, the 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_BUSWIDTH EQU $C0 ; two bits for bus width DAC_NIBBLEWIDE EQU $00 DAC_BYTEWIDE EQU $40 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 ; the device DAC_BINDTIME EQU $20 ; run when binding drivers to boards ** ** These are the calling conventions for Diag or Boot area ** ** 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 should 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