Skip to content

Latest commit

 

History

History
205 lines (162 loc) · 6.29 KB

File metadata and controls

205 lines (162 loc) · 6.29 KB
#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 */