amos-professional/AMOSPro Sources/includes/libraries/configregs.i

193 lines
5.8 KiB
OpenEdge ABL

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