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

#ifndef EXEC_EXECBASE_H
#define EXEC_EXECBASE_H
/*
**      $Filename: exec/execbase.h $
**      $Release: 2.04 Includes, V37.4 $
**      $Revision: 36.18 $
**      $Date: 91/10/10 $
**
**      Definition of the exec.library base structure.
**
**      (C) Copyright 1985-1999 Amiga, Inc.
**          All Rights Reserved
*/

#ifndef EXEC_LISTS_H
#include "exec/lists.h"
#endif /* EXEC_LISTS_H */

#ifndef EXEC_INTERRUPTS_H
#include "exec/interrupts.h"
#endif /* EXEC_INTERRUPTS_H */

#ifndef EXEC_LIBRARIES_H
#include "exec/libraries.h"
#endif /* EXEC_LIBRARIES_H */

#ifndef EXEC_TASKS_H
#include "exec/tasks.h"
#endif /* EXEC_TASKS_H */


/* Definition of the Exec library base structure (pointed to by location 4).
** Most fields are not to be viewed or modified by user programs.  Use
** extreme caution.
*/
struct ExecBase {
        struct Library LibNode; /* Standard library node */

/******** Static System Variables ********/

       UWORD   SoftVer;        /* kickstart release number (obs.) */
       WORD    LowMemChkSum;   /* checksum of 68000 trap vectors */
       ULONG   ChkBase;        /* system base pointer complement */
       APTR    ColdCapture;    /* coldstart soft capture vector */
       APTR    CoolCapture;    /* coolstart soft capture vector */
       APTR    WarmCapture;    /* warmstart soft capture vector */
       APTR    SysStkUpper;    /* system stack base   (upper bound) */
       APTR    SysStkLower;    /* top of system stack (lower bound) */
       ULONG   MaxLocMem;      /* top of chip memory */
       APTR    DebugEntry;     /* global debugger entry point */
       APTR    DebugData;      /* global debugger data segment */
       APTR    AlertData;      /* alert data segment */
        APTR    MaxExtMem;      /* top of extended mem, or null if none */

        UWORD   ChkSum; /* for all of the above (minus 2) */

/****** Interrupt Related ***************************************/

        struct  IntVector IntVects[16];

/****** Dynamic System Variables *************************************/

        struct  Task *ThisTask; /* pointer to current task (readable) */

       ULONG   IdleCount;      /* idle counter */
       ULONG   DispCount;      /* dispatch counter */
       UWORD   Quantum;        /* time slice quantum */
       UWORD   Elapsed;        /* current quantum ticks */
       UWORD   SysFlags;       /* misc internal system flags */
       BYTE    IDNestCnt;      /* interrupt disable nesting count */
        BYTE    TDNestCnt;      /* task disable nesting count */

        UWORD   AttnFlags;      /* special attention flags (readable) */

       UWORD   AttnResched;    /* rescheduling attention */
       APTR    ResModules;     /* resident module array pointer */
       APTR    TaskTrapCode;
       APTR    TaskExceptCode;
       APTR    TaskExitCode;
       ULONG   TaskSigAlloc;
        UWORD   TaskTrapAlloc;


/****** System Lists (private!) ********************************/

       struct  List MemList;
       struct  List ResourceList;
       struct  List DeviceList;
       struct  List IntrList;
       struct  List LibList;
       struct  List PortList;
       struct  List TaskReady;
        struct  List TaskWait;

        struct  SoftIntList SoftInts[5];

/****** Other Globals *******************************************/

        LONG    LastAlert[4];

        /* these next two variables are provided to allow
        ** system developers to have a rough idea of the
        ** period of two externally controlled signals --
        ** the time between vertical blank interrupts and the
        ** external line rate (which is counted by CIA A's
        ** "time of day" clock).  In general these values
        ** will be 50 or 60, and may or may not track each
        ** other.  These values replace the obsolete AFB_PAL
        ** and AFB_50HZ flags.
      */
      UBYTE   VBlankFrequency;        /* (readable) */
        UBYTE   PowerSupplyFrequency;   /* (readable) */

        struct  List SemaphoreList;

        /* these next two are to be able to kickstart into user ram.
        ** KickMemPtr holds a singly linked list of MemLists which
        ** will be removed from the memory list via AllocAbs.  If
        ** all the AllocAbs's succeeded, then the KickTagPtr will
        ** be added to the rom tag list.
      */
      APTR    KickMemPtr;     /* ptr to queue of mem lists */
      APTR    KickTagPtr;     /* ptr to rom tag queue */
        APTR    KickCheckSum;   /* checksum for mem and tags */

/****** V36 Exec additions start here **************************************/

      UWORD   ex_Pad0;
      ULONG   ex_LaunchPoint;         /* Private to Launch/Switch */
        APTR    ex_RamLibPrivate;
        /* The next ULONG contains the system "E" clock frequency,
        ** expressed in Hertz.  The E clock is used as a timebase for
        ** the Amiga's 8520 I/O chips. (E is connected to "02").
        ** Typical values are 715909 for NTSC, or 709379 for PAL.
      */
      ULONG   ex_EClockFrequency;     /* (readable) */
      ULONG   ex_CacheControl;        /* Private to CacheControl calls */
        ULONG   ex_TaskID;              /* Next available task ID */

      ULONG   ex_PuddleSize;
      ULONG   ex_PoolThreshold;
        struct  MinList ex_PublicPool;

        APTR    ex_MMULock;             /* private */

        UBYTE   ex_Reserved[12];
};


/****** Bit defines for AttnFlags (see above) ******************************/

/*  Processors and Co-processors: */
#define AFB_68010     0       /* also set for 68020 */
#define AFB_68020     1       /* also set for 68030 */
#define AFB_68030     2       /* also set for 68040 */
#define AFB_68040     3
#define AFB_68881     4       /* also set for 68882 */
#define AFB_68882       5
#define       AFB_FPU40       6       /* Set if 68040 FPU */
/*
 * The AFB_FPU40 bit is set when a working 68040 FPU
 * is in the system.  If this bit is set and both the
 * AFB_68881 and AFB_68882 bits are not set, then the 68040
 * math emulation code has not been loaded and only 68040
 * FPU instructions are available.  This bit is valid *ONLY*
 * if the AFB_68040 bit is set.
 */

#define AFB_PRIVATE     15      /* Just what it says */

#define AFF_68010       (1L<<0)
#define AFF_68020     (1L<<1)
#define AFF_68030     (1L<<2)
#define AFF_68040     (1L<<3)
#define AFF_68881     (1L<<4)
#define AFF_68882     (1L<<5)
#define       AFF_FPU40       (1L<<6)

#define AFF_PRIVATE   (1L<<15)

/* #define AFB_RESERVED8   8 */
/* #define AFB_RESERVED9   9 */


/****** Selected flag definitions for Cache manipulation calls **********/

#define CACRF_EnableI       (1L<<0)  /* Enable instruction cache */
#define CACRF_FreezeI       (1L<<1)  /* Freeze instruction cache */
#define CACRF_ClearI        (1L<<3)  /* Clear instruction cache  */
#define CACRF_IBE           (1L<<4)  /* Instruction burst enable */
#define CACRF_EnableD       (1L<<8)  /* 68030 Enable data cache  */
#define CACRF_FreezeD       (1L<<9)  /* 68030 Freeze data cache  */
#define CACRF_ClearD        (1L<<11) /* 68030 Clear data cache         */
#define CACRF_DBE           (1L<<12) /* 68030 Data burst enable */
#define CACRF_WriteAllocate (1L<<13) /* 68030 Write-Allocate mode
                                        (must always be set!)    */
#define CACRF_CopyBack      (1L<<31) /* Master enable for copyback caches */

#define DMA_Continue        (1L<<1)  /* Continuation flag for CachePreDMA */
#define DMA_NoModify        (1L<<2)  /* Set if DMA does not update memory */


#endif  /* EXEC_EXECBASE_H */