#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 */