mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 13:08:13 +02:00
1884 lines
46 KiB
PHP
1884 lines
46 KiB
PHP
{
|
|
This file is part of the Free Pascal run time library.
|
|
|
|
exec definitions (V50) for MorphOS/PowerPC
|
|
Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved.
|
|
|
|
Free Pascal conversion
|
|
Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu>
|
|
|
|
AROS conversion
|
|
Copyright (c) 2011 Marcus Sackrow
|
|
|
|
See the file COPYING.FPC, included in this distribution,
|
|
for details about the copyright.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
**********************************************************************}
|
|
|
|
{include emuld.inc}
|
|
{$include utild1.inc}
|
|
|
|
|
|
|
|
{ * aros spinlock definition
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
{$ifndef AROS_ABIv11}
|
|
{$ifdef AROS_ABIv1}
|
|
{$ifdef AROSPLATFORM_SMP}
|
|
type
|
|
TSpinLock =
|
|
record
|
|
case byte of
|
|
0: (slock:
|
|
bitpacked record // ensure bits are packed. this is a volatile structure
|
|
readcount: 0..$FFFFFF;
|
|
_pad2: 0..$7;
|
|
&write: 0..$1;
|
|
_pad1: 0..$7;
|
|
updating: 0..$1;
|
|
end);
|
|
1: (block: packed array[0..3] of byte; lock: uint32); // both fields are volatile
|
|
// The field s_Owner is set either to task owning the lock,
|
|
// or NULL if the lock is free/read mode or was acquired in interrupt/supervisor mode
|
|
2: (_skip: packed array[0..7] of byte; s_Owner: Pointer); // skip block and lock because that occupies most space
|
|
3: (pad_align: packed array[0..128-1] of byte); // ensure 128 byte record size
|
|
end;
|
|
{$endif}
|
|
{$endif}
|
|
{$endif}
|
|
|
|
|
|
|
|
{ * exec node definitions
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PNode = ^TNode;
|
|
TNode = record
|
|
ln_Succ: PNode;
|
|
ln_Pred: PNode;
|
|
{$ifdef AROS_BINCOMPAT}
|
|
ln_Type: Byte;
|
|
ln_Pri : ShortInt;
|
|
ln_Name: PAnsiChar;
|
|
{$else}
|
|
ln_Name: PAnsiChar;
|
|
ln_Type: Byte;
|
|
ln_Pri : ShortInt;
|
|
{$endif}
|
|
end;
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PMinNode = ^TMinNode;
|
|
TMinNode = record
|
|
mln_Succ: PMinNode;
|
|
mln_Pred: PMinNode;
|
|
end;
|
|
|
|
|
|
const // Checked OK 05.08.2011 ALB
|
|
NT_UNKNOWN = 0;
|
|
NT_TASK = 1;
|
|
NT_INTERRUPT = 2;
|
|
NT_DEVICE = 3;
|
|
NT_MSGPORT = 4;
|
|
NT_MESSAGE = 5;
|
|
NT_FREEMSG = 6;
|
|
NT_REPLYMSG = 7;
|
|
NT_RESOURCE = 8;
|
|
NT_LIBRARY = 9;
|
|
NT_MEMORY = 10;
|
|
NT_SOFTINT = 11;
|
|
NT_FONT = 12;
|
|
NT_PROCESS = 13;
|
|
NT_SEMAPHORE = 14;
|
|
NT_SIGNALSEM = 15;
|
|
NT_BOOTNODE = 16;
|
|
NT_KICKMEM = 17;
|
|
NT_GRAPHICS = 18;
|
|
NT_DEATHMESSAGE = 19;
|
|
NT_HIDD = 20; // AROS specific
|
|
NT_USER = 254;
|
|
NT_EXTENDED = 255;
|
|
|
|
|
|
|
|
{ * exec list definitions
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PList = ^TEList;
|
|
TEList = record
|
|
lh_Head : PNode;
|
|
lh_Tail : PNode;
|
|
lh_TailPred: PNode;
|
|
lh_Type : Byte;
|
|
lh_pad : Byte;
|
|
end;
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PMinList = ^TMinList;
|
|
TMinList = record
|
|
mlh_Head : PMinNode;
|
|
mlh_Tail : PMinNode;
|
|
mlh_TailPred: PMinNode;
|
|
end;
|
|
|
|
|
|
|
|
{ * exec alert definitions (V50)
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
const // Checked OK 04.08.2011 ALB
|
|
// General Types
|
|
AT_DeadEnd = $80000000; // Alert that crashes
|
|
AT_Recovery = $00000000; // Alert that returns
|
|
// General Errors
|
|
AG_NoMemory = $00010000;
|
|
AG_MakeLib = $00020000;
|
|
AG_OpenLib = $00030000;
|
|
AG_OpenDev = $00040000;
|
|
AG_OpenRes = $00050000;
|
|
AG_IOError = $00060000;
|
|
AG_NoSignal = $00070000;
|
|
AG_BadParm = $00080000;
|
|
AG_CloseLib = $00090000;
|
|
AG_CloseDev = $000A0000;
|
|
AG_ProcCreate = $000B0000;
|
|
// 680x0 Errors
|
|
ACPU_BusErr = $80000002;
|
|
ACPU_AddressErr = $80000003;
|
|
ACPU_InstErr = $80000004;
|
|
ACPU_DivZero = $80000005;
|
|
ACPU_CHK = $80000006;
|
|
ACPU_TRAPV = $80000007;
|
|
ACPU_PrivErr = $80000008;
|
|
ACPU_Trace = $80000009;
|
|
ACPU_LineA = $8000000A;
|
|
ACPU_LineF = $8000000B;
|
|
ACPU_Format = $8000000E;
|
|
ACPU_Spurious = $80000018;
|
|
ACPU_AutoVec1 = $80000019;
|
|
ACPU_AutoVec2 = $8000001A;
|
|
ACPU_AutoVec3 = $8000001B;
|
|
ACPU_AutoVec4 = $8000001C;
|
|
ACPU_AutoVec5 = $8000001D;
|
|
ACPU_AutoVec6 = $8000001E;
|
|
ACPU_AutoVec7 = $8000001F;
|
|
// Libraries
|
|
AO_ExecLib = $00008001;
|
|
AO_GraphicsLib = $00008002;
|
|
AO_LayersLib = $00008003;
|
|
AO_Intuition = $00008004;
|
|
AO_MathLib = $00008005;
|
|
AO_DOSLib = $00008007;
|
|
AO_RAMLib = $00008008;
|
|
AO_IconLib = $00008009;
|
|
AO_ExpansionLib = $0000800A;
|
|
AO_DiskfontLib = $0000800B;
|
|
AO_UtilityLib = $0000800C;
|
|
AO_KeyMapLib = $0000800D;
|
|
// Devices
|
|
AO_AudioDev = $00008010;
|
|
AO_ConsoleDev = $00008011;
|
|
AO_GamePortDev = $00008012;
|
|
AO_KeyboardDev = $00008013;
|
|
AO_TrackDiskDev = $00008014;
|
|
AO_TimerDev = $00008015;
|
|
// Resources
|
|
AO_CIARsrc = $00008020;
|
|
AO_DiskRsrc = $00008021;
|
|
AO_MiscRsrc = $00008022;
|
|
// Miscellaneous
|
|
AO_BootStrap = $00008030;
|
|
AO_Workbench = $00008031;
|
|
AO_DiskCopy = $00008032;
|
|
AO_GadTools = $00008033;
|
|
AO_Unknown = $00008035;
|
|
// AROS Additions, start at 0x40
|
|
AO_ArosLib = $00008040;
|
|
AO_OOPLib = $00008041;
|
|
AO_HiddLib = $00008042;
|
|
|
|
{ *
|
|
* exec.library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_ExecLib = $01000000;
|
|
AN_ExcptVect = $01000001;
|
|
AN_BaseChkSum = $01000002;
|
|
AN_LibChkSum = $01000003;
|
|
AN_MemCorrupt = $81000005;
|
|
AN_IntrMem = $81000006;
|
|
AN_InitAPtr = $01000007;
|
|
AN_SemCorrupt = $01000008;
|
|
AN_FreeTwice = $01000009;
|
|
AN_BogusExcpt = $8100000A;
|
|
AN_IOUsedTwice = $0100000B;
|
|
AN_MemoryInsane = $0100000C;
|
|
AN_IOAfterClose = $0100000D;
|
|
AN_StackProbe = $0100000E; // stack has wrong size
|
|
AN_BadFreeAddr = $0100000F;
|
|
AN_BadSemaphore = $01000010;
|
|
|
|
{ *
|
|
* graphics.library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_GraphicsLib = $02000000;
|
|
AN_GfxNoMem = $82010000;
|
|
AN_GfxNoMemMspc = $82010001;
|
|
AN_LongFrame = $82010006;
|
|
AN_ShortFrame = $82010007;
|
|
AN_TextTmpRas = $02010009;
|
|
AN_BltBitMap = $8201000A;
|
|
AN_RegionMemory = $8201000B;
|
|
AN_MakeVPort = $82010030;
|
|
AN_GfxNewError = $0200000C;
|
|
AN_GfxFreeError = $0200000D;
|
|
AN_GfxNoLCM = $82011234;
|
|
AN_ObsoleteFont = $02000401;
|
|
|
|
{ *
|
|
* layers.library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_LayersLib = $03000000;
|
|
AN_LayersNoMem = $83010000;
|
|
|
|
{ *
|
|
* intuition.library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_Intuition = $04000000;
|
|
AN_GadgetType = $84000001;
|
|
AN_BadGadget = $04000001;
|
|
AN_CreatePort = $84010002;
|
|
AN_ItemAlloc = $04010003;
|
|
AN_SubAlloc = $04010004;
|
|
AN_PlaneAlloc = $84010005;
|
|
AN_ItemBoxTop = $84000006;
|
|
AN_OpenScreen = $84010007;
|
|
AN_OpenScrnRast = $84010008;
|
|
AN_SysScrnType = $84000009;
|
|
AN_AddSWGadget = $8401000A;
|
|
AN_OpenWindow = $8401000B;
|
|
AN_BadState = $8400000C;
|
|
AN_BadMessage = $8400000D;
|
|
AN_WeirdEcho = $8400000E;
|
|
AN_NoConsole = $8400000F;
|
|
AN_NoISem = $04000010;
|
|
AN_ISemOrder = $04000011;
|
|
|
|
{ *
|
|
* math.library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_MathLib = $05000000;
|
|
|
|
{ *
|
|
* dos.library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_DOSLib = $07000000;
|
|
AN_StartMem = $07010001;
|
|
AN_EndTask = $07000002;
|
|
AN_QPktFail = $07000003;
|
|
AN_AsyncPkt = $07000004;
|
|
AN_FreeVec = $07000005;
|
|
AN_DiskBlkSeq = $07000006;
|
|
AN_BitMap = $07000007;
|
|
AN_KeyFree = $07000008;
|
|
AN_BadChkSum = $07000009;
|
|
AN_DiskError = $0700000A;
|
|
AN_KeyRange = $0700000B;
|
|
AN_BadOverlay = $0700000C;
|
|
AN_BadInitFunc = $0700000D;
|
|
AN_FileReclosed = $0700000E;
|
|
|
|
{ *
|
|
* ramlib.library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_RAMLib = $08000000;
|
|
AN_BadSegList = $08000001;
|
|
|
|
{ *
|
|
* icon.library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_IconLib = $09000000;
|
|
|
|
{ *
|
|
* expansion.library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_ExpansionLib = $0A000000;
|
|
AN_BadExpansionFree = $0A000001;
|
|
|
|
{ *
|
|
* diskfont.library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_DiskfontLib = $0B000000;
|
|
|
|
{ *
|
|
* audio.device
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_AudioDev = $10000000;
|
|
|
|
{ *
|
|
* console.device
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_ConsoleDev = $11000000;
|
|
AN_NoWindow = $11000001;
|
|
|
|
{ *
|
|
* gameport.device
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_GamePortDev = $12000000;
|
|
|
|
{ *
|
|
* keyboard.device
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_KeyboardDev = $13000000;
|
|
|
|
{ *
|
|
* trackdisk.device
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_TrackDiskDev = $14000000;
|
|
AN_TDCalibSeek = $14000001;
|
|
AN_TDDelay = $14000002;
|
|
|
|
{ *
|
|
* timer.device
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_TimerDev = $15000000;
|
|
AN_TMBadReq = $15000001;
|
|
AN_TMBadSupply = $15000002;
|
|
|
|
{ *
|
|
* cia.resource
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_CIARsrc = $20000000;
|
|
|
|
{ *
|
|
* disk.resource
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_DiskRsrc = $21000000;
|
|
AN_DRHasDisk = $21000001;
|
|
AN_DRIntNoAct = $21000002;
|
|
|
|
{ *
|
|
* misc.resource
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_MiscRsrc = $22000000;
|
|
|
|
{ *
|
|
* bootstrap
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_BootStrap = $30000000;
|
|
AN_BootError = $30000001;
|
|
|
|
{ *
|
|
* Workbench
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_Workbench = $31000000;
|
|
AN_NoFonts = $B1000001;
|
|
AN_WBBadStartupMsg1 = $31000001;
|
|
AN_WBBadStartupMsg2 = $31000002;
|
|
AN_WBBadIOMsg = $31000003;
|
|
AN_WBReLayoutToolMenu = $B1010009;
|
|
|
|
{ *
|
|
* DiskCopy
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_DiskCopy = $32000000;
|
|
|
|
{ *
|
|
* toolkit for Intuition
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_GadTools = $33000000;
|
|
|
|
{ *
|
|
* System utility library
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_UtilityLib = $34000000;
|
|
|
|
{ *
|
|
* AROS Additions
|
|
* }
|
|
AN_Aros = $40000000;
|
|
AN_OOP = $41000000;
|
|
// Hidd Subsystem */
|
|
AN_Hidd = $42000000;
|
|
AN_HiddNoRoot = $C2000001; // Could not create root device
|
|
|
|
{ *
|
|
* For use by any application that needs it
|
|
* }
|
|
const // Checked OK 04.08.2011 ALB
|
|
AN_Unknown = $35000000;
|
|
|
|
|
|
|
|
{ * exec error definitions
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
const // Checked OK 04.08.2011 ALB
|
|
IOERR_OPENFAIL = (-1);
|
|
IOERR_ABORTED = (-2);
|
|
IOERR_NOCMD = (-3);
|
|
IOERR_BADLENGTH = (-4);
|
|
IOERR_BADADDRESS = (-5);
|
|
IOERR_UNITBUSY = (-6);
|
|
IOERR_SELFTEST = (-7);
|
|
|
|
|
|
|
|
{ * exec resident definitions
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
type
|
|
PResident = ^TResident;
|
|
TResident = record
|
|
rt_MatchWord: Word;
|
|
rt_MatchTag : PResident;
|
|
rt_EndSkip : Pointer;
|
|
rt_Flags : Byte;
|
|
rt_Version : Byte;
|
|
rt_Type : Byte;
|
|
rt_Pri : Byte;
|
|
rt_Name : PAnsiChar;
|
|
rt_IdString : PAnsiChar;
|
|
rt_Init : Pointer;
|
|
{ * Only valid when RTF_EXTENDED is set
|
|
* }
|
|
rt_Revision : Word; { * Revision Entry * }
|
|
rt_Tags : Pointer;
|
|
end;
|
|
|
|
|
|
const
|
|
RTC_MATCHWORD = $4AFC;
|
|
|
|
RTF_AUTOINIT = (1 Shl 7);
|
|
RTF_EXTENDED = (1 Shl 6); { * structure extension is valid * }
|
|
{ * rt_Init points to a PPC function which must be defined as
|
|
*
|
|
* struct Library* LIB_Init(struct Library *MyLibBase,
|
|
* BPTR SegList,
|
|
* struct ExecBase *SysBase)
|
|
* }
|
|
RTF_PPC = (1 Shl 3);
|
|
RTF_AFTERDOS = (1 Shl 2);
|
|
RTF_SINGLETASK = (1 Shl 1);
|
|
RTF_COLDSTART = (1 Shl 0);
|
|
|
|
RTW_NEVER = 0;
|
|
RTW_COLDSTART = 1;
|
|
|
|
|
|
|
|
{ * exec memory definitions
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PMemChunk = ^TMemChunk;
|
|
TMemChunk = record
|
|
nc_Next : PMemChunk;
|
|
nc_Bytes: PtrUInt;
|
|
end;
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PMemHeader = ^TMemHeader;
|
|
TMemHeader = record
|
|
mh_Node : TNode;
|
|
mh_Attributes: Word;
|
|
mh_First : PMemChunk;
|
|
mh_Lower : Pointer;
|
|
mh_Upper : Pointer;
|
|
mh_Free : PtrUInt;
|
|
end;
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PMemEntry = ^TMemEntry;
|
|
TMemEntry = record
|
|
me_Un: record
|
|
case Byte of
|
|
0 : (meu_Reqs: DWord);
|
|
1 : (meu_Addr: Pointer)
|
|
end;
|
|
me_Length: PtrUInt;
|
|
end;
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PMemList = ^TMemList;
|
|
TMemList = record
|
|
ml_Node : TNode;
|
|
ml_NumEntries: Word;
|
|
ml_ME : array [0..0] of TMemEntry;
|
|
end;
|
|
|
|
|
|
const // Checked OK 05.08.2011 ALB
|
|
MEMF_ANY = 0;
|
|
MEMF_PUBLIC = (1 shl 0);
|
|
MEMF_CHIP = (1 shl 1);
|
|
MEMF_FAST = (1 shl 2);
|
|
MEMF_LOCAL = (1 shl 8);
|
|
MEMF_24BITDMA = (1 shl 9);
|
|
MEMF_KICK = (1 shl 10);
|
|
MEMF_SWAP = (1 shl 11); { * Memory that can be swapped out to disk * }
|
|
MEMF_31BIT = (1 shl 12);
|
|
|
|
MEMF_CLEAR = (1 Shl 16);
|
|
MEMF_LARGEST = (1 Shl 17);
|
|
MEMF_REVERSE = (1 Shl 18);
|
|
MEMF_TOTAL = (1 Shl 19);
|
|
MEMF_HWALIGNED = (1 Shl 20); // For AllocMem() - align address and size to physical page boundary
|
|
MEMF_SEM_PROTECTED = (1 Shl 20); { * For CreatePool(): semaphore protection * }
|
|
MEMF_NO_EXPUNGE = (1 Shl 31);
|
|
|
|
MEM_BLOCKSIZE = 8;
|
|
MEM_BLOCKMASK = (MEM_BLOCKSIZE - 1);
|
|
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PMemHandlerData = ^TMemHandlerData;
|
|
TMemHandlerData = record
|
|
memh_RequestSize : PtrUInt;
|
|
memh_RequestFlags: DWord;
|
|
memh_Flags : DWord;
|
|
end;
|
|
|
|
|
|
const // Checked OK 05.08.2011 ALB
|
|
MEMHF_RECYCLE = (1 shl 0);
|
|
|
|
MEM_DID_NOTHING = 0;
|
|
MEM_ALL_DONE = -1;
|
|
MEM_TRY_AGAIN = 1;
|
|
|
|
|
|
|
|
{ * exec port definitions
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PMsgPort = ^TMsgPort;
|
|
TMsgPort = record
|
|
mp_Node : TNode;
|
|
mp_Flags : Byte;
|
|
mp_SigBit : Byte;
|
|
mp_SigTask: Pointer;
|
|
mp_MsgList: TEList;
|
|
{$ifndef AROS_ABIv11}
|
|
{$ifdef AROS_ABIv1}
|
|
{$ifdef AROSPLATFORM_SMP}
|
|
{$ifdef AROSEXEC_SMP}
|
|
mp_SpinLock: TSpinLock;
|
|
{$else}
|
|
mp_pad: TSpinLock;
|
|
{$endif}
|
|
{$endif}
|
|
{$endif}
|
|
{$else}
|
|
{$ifndef CPUM68K}
|
|
mp_Private: array[0..1] of PtrUInt;
|
|
{$endif}
|
|
{$endif}
|
|
end;
|
|
|
|
|
|
const
|
|
PF_ACTION = 3;
|
|
PA_SIGNAL = 0;
|
|
PA_SOFTINT = 1;
|
|
PA_IGNORE = 2;
|
|
|
|
|
|
type
|
|
PMessage = ^TMessage;
|
|
TMessage = record
|
|
mn_Node : TNode;
|
|
mn_ReplyPort: PMsgPort;
|
|
mn_Length : Word;
|
|
end;
|
|
|
|
|
|
|
|
{ * exec task definitions (V50)
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
type
|
|
PTask = ^TTask;
|
|
TTask = record
|
|
tc_Node: TNode;
|
|
tc_Flags: Byte;
|
|
tc_State: Byte;
|
|
tc_IDNestCnt: Shortint; // intr disabled nesting
|
|
tc_TDNestCnt: Shortint; // task disabled nesting
|
|
tc_SigAlloc: LongWord; // sigs allocated
|
|
tc_SigWait: LongWord; // sigs we are waiting for
|
|
tc_SigRecvd: LongWord; // sigs we have received
|
|
tc_SigExcept: LongWord; // sigs we will take excepts for
|
|
case boolean of
|
|
True:(
|
|
tc_TrapAlloc: Word; // traps allocated
|
|
tc_TrapAble: Word;); // traps enabled
|
|
False:(
|
|
tc_ETask: Pointer; // Valid if TF_ETask is set
|
|
tc_ExceptData: Pointer; // points to except data
|
|
tc_ExceptCode: Pointer; // points to except code
|
|
tc_TrapData: Pointer; // points to trap data
|
|
tc_TrapCode: Pointer; // points to trap code
|
|
tc_SPReg: Pointer; // stack pointer
|
|
tc_SPLower: Pointer; // stack lower bound
|
|
tc_SPUpper: Pointer; // stack upper bound + 2
|
|
tc_Switch: Pointer; // task losing CPU
|
|
tc_Launch: Pointer; // task getting CPU
|
|
tc_MemEntry: TEList; // allocated memory
|
|
tc_UserData: Pointer; // per task data
|
|
);
|
|
end;
|
|
|
|
|
|
const
|
|
TB_PROCTIME = 0;
|
|
TB_ETASK = 3;
|
|
TB_STACKCHK = 4;
|
|
TB_EXCEPT = 5;
|
|
TB_SWITCH = 6;
|
|
TB_LAUNCH = 7;
|
|
|
|
TF_PROCTIME = (1 Shl TB_PROCTIME);
|
|
TF_ETASK = (1 Shl TB_ETASK);
|
|
TF_STACKCHK = (1 Shl TB_STACKCHK);
|
|
TF_EXCEPT = (1 Shl TB_EXCEPT);
|
|
TF_SWITCH = (1 Shl TB_SWITCH);
|
|
TF_LAUNCH = (1 Shl TB_LAUNCH);
|
|
|
|
TS_INVALID = 0;
|
|
TS_ADDED = 1;
|
|
TS_RUN = 2;
|
|
TS_READY = 3;
|
|
TS_WAIT = 4;
|
|
TS_EXCEPT = 5;
|
|
TS_REMOVED = 6;
|
|
|
|
SIGB_ABORT = 0;
|
|
SIGB_CHILD = 1;
|
|
SIGB_BLIT = 4;
|
|
SIGB_SINGLE = 4;
|
|
SIGB_INTUITION = 5;
|
|
SIGB_NET = 7;
|
|
SIGB_DOS = 8;
|
|
|
|
SIGF_ABORT = (1 Shl SIGB_ABORT);
|
|
SIGF_CHILD = (1 Shl SIGB_CHILD);
|
|
SIGF_BLIT = (1 Shl SIGB_BLIT);
|
|
SIGF_SINGLE = (1 Shl SIGB_SINGLE);
|
|
SIGF_INTUITION = (1 Shl SIGB_INTUITION);
|
|
SIGF_NET = (1 Shl SIGB_NET);
|
|
SIGF_DOS = (1 Shl SIGB_DOS);
|
|
|
|
|
|
type
|
|
PTaskTrapMessage = ^TTaskTrapMessage;
|
|
TTaskTrapMessage = record
|
|
Message: TMessage; { * Message Header * }
|
|
Task : TTask; { * connected Task * }
|
|
Version: DWord; { * version of the structure * }
|
|
TType : DWord; { * Exception Type * }
|
|
DAR : DWord; { * Exception Address Register * }
|
|
DSISR : DWord; { * Exception DSISR Reg * }
|
|
|
|
{ * This is undiscovered land...
|
|
* never assume a size of this structure
|
|
* }
|
|
end;
|
|
|
|
|
|
const
|
|
VERSION_TASKTRAPMESSAGE = $0;
|
|
|
|
|
|
type
|
|
{$ifdef AROS_MORPHOS_COMPATIBLE}
|
|
PETask = ^TETask;
|
|
TETask = record
|
|
Message : TMessage;
|
|
Parent : PTask;
|
|
UniqueID : DWord;
|
|
Children : TMinList;
|
|
TrapAlloc: Word;
|
|
TrapAble : Word;
|
|
Result1 : DWord;
|
|
Result2 : Pointer;
|
|
MsgPort : TMsgPort;
|
|
|
|
{ * Don't touch!!!!!!!!!..there'll be an interface
|
|
* sooner than later.
|
|
* New Entries...most of the above entries
|
|
* are only their for structure compatability.
|
|
* They have no meaning as the OS never supported
|
|
* them.
|
|
* }
|
|
|
|
{ * A Task Pool for the task.
|
|
* }
|
|
MemPool: Pointer;
|
|
|
|
{ * PPC's Stack Lower Ptr
|
|
* The initial stack is allocated through
|
|
* AllocVec, so a FreeVec(ETask^.PPCSPLower);
|
|
* would work.
|
|
* If you use PPCStackSwap you must allocate
|
|
* your stack block with AllocVec();
|
|
* }
|
|
PPCSPLower: Pointer;
|
|
|
|
{ * PPC's Stack Upper Ptr
|
|
* }
|
|
PPCSPUpper : Pointer;
|
|
PPCRegFrame: Pointer;
|
|
PPCLibData : Pointer;
|
|
|
|
{ * On a PPC exception this msgport
|
|
* is sent an exception msg...
|
|
* the task is stopped until somebody
|
|
* wakes it up again.
|
|
* (asynchron exception interface)
|
|
* If this Port is NULL the message is
|
|
* sent to SysBase->ex_PPCTrapMsgPort.
|
|
* }
|
|
PPCTrapMsgPort: PMsgPort;
|
|
PPCTrapMessage: PTaskTrapMessage;
|
|
|
|
{ * This is undiscovered land...
|
|
* never assume a size of this structure
|
|
* }
|
|
end;
|
|
{$else}
|
|
TETask = record
|
|
et_Message: TMessage;
|
|
et_Parent: PTask; // Pointer to parent task
|
|
et_UniqueID: DWord;
|
|
et_Children: TMinList; // List of children
|
|
et_TrapAlloc: Word;
|
|
et_TrapAble: Word;
|
|
et_Result1: DWord; // First result
|
|
et_Result2: Pointer; // Result data pointer (AllocVec)
|
|
et_TaskMsgPort: TMsgPort;
|
|
{$IFDEF AROS_ABIv0}
|
|
et_Compatibility: array[0..3] of Pointer; // Reserve this space for compiled software to access iet_startup and iet_acpd
|
|
{$ENDIF}
|
|
et_MemPool: Pointer; // Task's private memory pool
|
|
{$ifdef aros}
|
|
et_Reserved: array[0..0] of PtrUInt; // MorphOS Private
|
|
et_TaskStorage: Pointer; // Task Storage Slots
|
|
{$else}
|
|
et_Reserved: array[0..1] of PtrUInt; // MorphOS Private
|
|
{$endif}
|
|
et_RegFrame: Pointer;
|
|
// Internal fields follow
|
|
end;
|
|
{$endif}
|
|
|
|
type
|
|
PTaskInitExtension = ^TTaskInitExtension;
|
|
TTaskInitExtension = record
|
|
{ * Must be filled with TRAP_PPCTASK
|
|
* }
|
|
Trap : Word;
|
|
Extension: Word; { * Must be set to 0 * }
|
|
Tags : Pointer;
|
|
end;
|
|
|
|
|
|
const
|
|
TASKTAG_DUMMY = (TAG_USER + $100000);
|
|
|
|
{ * Ptr to an ULONG Errorfield where a better error description
|
|
* can be stored.
|
|
* }
|
|
TASKTAG_ERROR = (TASKTAG_DUMMY + $0);
|
|
|
|
{ * Code type
|
|
* can be stored.
|
|
* }
|
|
TASKTAG_CODETYPE = (TASKTAG_DUMMY + $1);
|
|
|
|
{ * Start PC
|
|
* code must be of TASKTAG_CODETYPE
|
|
* }
|
|
TASKTAG_PC = (TASKTAG_DUMMY + $2);
|
|
|
|
{ * Final PC
|
|
* code must be of TASKTAG_CODETYPE
|
|
* }
|
|
TASKTAG_FINALPC = (TASKTAG_DUMMY + $3);
|
|
|
|
{ * Stacksize...Default 8192
|
|
* }
|
|
TASKTAG_STACKSIZE = (TASKTAG_DUMMY + $4);
|
|
|
|
{ * Std Stacksize...
|
|
* Default(use the stack defined by tc_SPLower..tc_SPUpper)
|
|
* }
|
|
TASKTAG_STACKSIZE_M68K = (TASKTAG_DUMMY + $5);
|
|
|
|
{ * specify task name, name is copied
|
|
* }
|
|
TASKTAG_NAME = (TASKTAG_DUMMY + $6);
|
|
|
|
{ * tc_UserData
|
|
* }
|
|
TASKTAG_USERDATA = (TASKTAG_DUMMY + $7);
|
|
|
|
{ * Task priority
|
|
* }
|
|
TASKTAG_PRI = (TASKTAG_DUMMY + $8);
|
|
|
|
{ * Pool's Puddlesize
|
|
* }
|
|
TASKTAG_POOLPUDDLE = (TASKTAG_DUMMY + $9);
|
|
|
|
{ * Pool's ThreshSize
|
|
* }
|
|
TASKTAG_POOLTHRESH = (TASKTAG_DUMMY + $a);
|
|
|
|
{ * PPC First Argument..gpr3
|
|
* }
|
|
TASKTAG_PPC_ARG1 = (TASKTAG_DUMMY + $10);
|
|
|
|
{ * PPC First Argument..gpr4
|
|
* }
|
|
TASKTAG_PPC_ARG2 = (TASKTAG_DUMMY + $11);
|
|
|
|
{ * PPC First Argument..gpr5
|
|
* }
|
|
TASKTAG_PPC_ARG3 = (TASKTAG_DUMMY + $12);
|
|
|
|
{ * PPC First Argument..gpr6
|
|
* }
|
|
TASKTAG_PPC_ARG4 = (TASKTAG_DUMMY + $13);
|
|
|
|
{ * PPC First Argument..gpr7
|
|
* }
|
|
TASKTAG_PPC_ARG5 = (TASKTAG_DUMMY + $14);
|
|
|
|
{ * PPC First Argument..gpr8
|
|
* }
|
|
TASKTAG_PPC_ARG6 = (TASKTAG_DUMMY + $15);
|
|
|
|
{ * PPC First Argument..gpr9
|
|
* }
|
|
TASKTAG_PPC_ARG7 = (TASKTAG_DUMMY + $16);
|
|
|
|
{ * PPC First Argument..gpr10
|
|
* }
|
|
TASKTAG_PPC_ARG8 = (TASKTAG_DUMMY + $17);
|
|
|
|
{ *
|
|
* Startup message to be passed to task/process, ReplyMsg'd at RemTask()
|
|
* ti_Data: struct Message *
|
|
* }
|
|
TASKTAG_STARTUPMSG = (TASKTAG_DUMMY + $18);
|
|
|
|
{ *
|
|
* Create internal MsgPort for task/process, deleted at RemTask()
|
|
* ti_Data: struct MsgPort **, can be NULL
|
|
* }
|
|
TASKTAG_TASKMSGPORT = (TASKTAG_DUMMY + $19);
|
|
|
|
|
|
const
|
|
CODETYPE_M68K = $0;
|
|
{ *
|
|
* System V4 ABI
|
|
* }
|
|
CODETYPE_PPC = $1;
|
|
|
|
const
|
|
TASKERROR_OK = 0;
|
|
TASKERROR_NOMEMORY = 1;
|
|
|
|
|
|
{ *
|
|
* Stack swap structure as passed to StackSwap() and PPCStackSwap()
|
|
* }
|
|
type
|
|
PStackSwapStruct = ^TStackSwapStruct;
|
|
TStackSwapStruct = record
|
|
stk_Lower : Pointer; { * Lowest byte of stack * }
|
|
stk_Upper : Pointer; { * Upper end of stack (size + Lowert) * }
|
|
stk_Pointer: Pointer; { * Stack pointer at switch point * }
|
|
end;
|
|
|
|
type
|
|
PStackSwapArgs = ^TStackSwapArgs;
|
|
TStackSwapArgs = record
|
|
Args: Array[0..7] Of Pointer;
|
|
end;
|
|
|
|
|
|
{ *
|
|
* NewGetTaskAttrsA(), NewSetTaskAttrsA() tags
|
|
* }
|
|
const
|
|
TASKINFOTYPE_ALLTASK = $0;
|
|
TASKINFOTYPE_NAME = $1;
|
|
TASKINFOTYPE_PRI = $2;
|
|
TASKINFOTYPE_TYPE = $3;
|
|
TASKINFOTYPE_STATE = $4;
|
|
TASKINFOTYPE_FLAGS = $5;
|
|
TASKINFOTYPE_SIGALLOC = $6;
|
|
TASKINFOTYPE_SIGWAIT = $7;
|
|
TASKINFOTYPE_SIGRECVD = $8;
|
|
TASKINFOTYPE_SIGEXCEPT = $9;
|
|
TASKINFOTYPE_EXCEPTDATA = $a;
|
|
TASKINFOTYPE_EXCEPTCODE = $b;
|
|
TASKINFOTYPE_TRAPDATA = $c;
|
|
TASKINFOTYPE_TRAPCODE = $d;
|
|
TASKINFOTYPE_STACKSIZE_M68K = $e;
|
|
TASKINFOTYPE_STACKSIZE = $f;
|
|
TASKINFOTYPE_USEDSTACKSIZE_M68K = $10;
|
|
TASKINFOTYPE_USEDSTACKSIZE = $11;
|
|
TASKINFOTYPE_TRAPMSGPORT = $12;
|
|
TASKINFOTYPE_STARTUPMSG = $13;
|
|
TASKINFOTYPE_TASKMSGPORT = $14;
|
|
TASKINFOTYPE_POOLPTR = $15;
|
|
TASKINFOTYPE_POOLMEMFLAGS = $16;
|
|
TASKINFOTYPE_POOLPUDDLESIZE = $17;
|
|
TASKINFOTYPE_POOLTHRESHSIZE = $18;
|
|
|
|
{ *
|
|
* Task Scheduler statistics (exec 50.42)
|
|
* }
|
|
TASKINFOTYPE_NICE = $19;
|
|
TASKINFOTYPE_AGETICKS = $1a;
|
|
TASKINFOTYPE_CPUTIME = $1b;
|
|
TASKINFOTYPE_LASTSECCPUTIME = $1c;
|
|
TASKINFOTYPE_RECENTCPUTIME = $1d;
|
|
TASKINFOTYPE_VOLUNTARYCSW = $1e;
|
|
TASKINFOTYPE_INVOLUNTARYCSW = $1f;
|
|
TASKINFOTYPE_LASTSECVOLUNTARYCSW = $20;
|
|
TASKINFOTYPE_LASTSECINVOLUNTARYCSW = $21;
|
|
{ * Added in exec 50.45 * }
|
|
TASKINFOTYPE_LAUNCHTIMETICKS = $22;
|
|
TASKINFOTYPE_LAUNCHTIMETICKS1978 = $23;
|
|
TASKINFOTYPE_PID = $24;
|
|
|
|
TASKINFOTYPE_68K_NEWFRAME = $50;
|
|
|
|
TASKINFOTYPE_PPC_SRR0 = $100;
|
|
TASKINFOTYPE_PPC_SRR1 = $101;
|
|
TASKINFOTYPE_PPC_LR = $102;
|
|
TASKINFOTYPE_PPC_CTR = $103;
|
|
TASKINFOTYPE_PPC_CR = $104;
|
|
TASKINFOTYPE_PPC_XER = $105;
|
|
TASKINFOTYPE_PPC_GPR = $106;
|
|
TASKINFOTYPE_PPC_FPR = $107;
|
|
TASKINFOTYPE_PPC_FPSCR = $108;
|
|
TASKINFOTYPE_PPC_VSCR = $109;
|
|
TASKINFOTYPE_PPC_VMX = $10a;
|
|
TASKINFOTYPE_PPC_VSAVE = $10b;
|
|
TASKINFOTYPE_PPC_FRAME = $10c;
|
|
TASKINFOTYPE_PPC_FRAMESIZE = $10d;
|
|
TASKINFOTYPE_PPC_NEWFRAME = $10e;
|
|
|
|
TASKINFOTAG_DUMMY = (TAG_USER + $110000);
|
|
{ * Used with TASKINFOTYPE_ALLTASK
|
|
* }
|
|
TASKINFOTAG_HOOK = (TASKINFOTAG_DUMMY + $0);
|
|
{ * Used with TASKINFOTYPE_PPC_GPR,TASKINFOTYPE_PPC_FPR,TASKINFOTYPE_PPC_VMX
|
|
* to define the copy area
|
|
* }
|
|
TASKINFOTAG_REGSTART = (TASKINFOTAG_DUMMY + $1);
|
|
{ * Used with TASKINFOTYPE_PPC_GPR,TASKINFOTYPE_PPC_FPR,TASKINFOTYPE_PPC_VMX
|
|
* to define the copy area
|
|
* }
|
|
TASKINFOTAG_REGCOUNT = (TASKINFOTAG_DUMMY + $2);
|
|
|
|
|
|
{ *
|
|
* NewSetTaskAttrsA(..,@TaskFrame68k,sizeof(TTaskFrame68k),TASKINFOTYPE_68K_NEWFRAME,...);
|
|
* }
|
|
type
|
|
PTaskFrame68k = ^TTaskFrame68k;
|
|
TTaskFrame68k = record
|
|
PC: Pointer;
|
|
SR: Word;
|
|
Xn: Array[0..14] Of LongInt;
|
|
end;
|
|
|
|
|
|
{ *
|
|
* Don't depend on these
|
|
* }
|
|
const
|
|
DEFAULT_PPCSTACKSIZE = 32768;
|
|
DEFAULT_M68KSTACKSIZE = 2048;
|
|
DEFAULT_TASKPUDDLESIZE = 4096;
|
|
DEFAULT_TASKTHRESHSIZE = 4096;
|
|
|
|
|
|
{ * exec interrupt definitions
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PInterrupt = ^TInterrupt;
|
|
TInterrupt = record
|
|
is_Node: TNode;
|
|
is_Data: Pointer;
|
|
is_Code: Pointer; // server code entry
|
|
end;
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PIntVector = ^TIntVector;
|
|
TIntVector = record
|
|
iv_Data: Pointer;
|
|
iv_Code: Pointer;
|
|
iv_Node: PNode;
|
|
end;
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PSoftIntList = ^TSoftIntList;
|
|
TSoftIntList = record
|
|
sh_List: TEList;
|
|
sh_Pad : Word;
|
|
end;
|
|
|
|
|
|
const // Checked OK 05.08.2011 ALB
|
|
SIH_PRIMASK = $f0;
|
|
|
|
INTB_NMI = 15;
|
|
INTF_NMI = (1 Shl INTB_NMI);
|
|
|
|
|
|
|
|
{ * exec semaphore definitions (V50)
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
{ *
|
|
* Shouldn't be available public..
|
|
* }
|
|
type
|
|
PSemaphoreRequest = ^TSemaphoreRequest;
|
|
TSemaphoreRequest = record
|
|
sr_Link : TMinNode;
|
|
sr_Waiter: PTask;
|
|
{$ifndef AROS_ABIv11}
|
|
{$ifdef AROS_ABIv1}
|
|
{$ifdef AROSPLATFORM_SMP}
|
|
{$ifdef AROSEXEC_SMP}
|
|
sr_SpinLock: TSpinLock;
|
|
{$else}
|
|
sr_pad: TSpinLock;
|
|
{$endif}
|
|
{$endif}
|
|
{$endif}
|
|
{$endif}
|
|
end;
|
|
|
|
type
|
|
PSignalSemaphore = ^TSignalSemaphore;
|
|
TSignalSemaphore = record
|
|
ss_Link : TNode;
|
|
ss_NestCount : SmallInt;
|
|
ss_WaitQueue : TMinList;
|
|
ss_MultipleLink: TSemaphoreRequest;
|
|
ss_Owner : PTask;
|
|
ss_QueueCount : SmallInt;
|
|
end;
|
|
|
|
type
|
|
PSemaphoreMessage = ^TSemaphoreMessage;
|
|
TSemaphoreMessage = record
|
|
ssm_Message : TMessage;
|
|
ssm_Semaphore: PSignalSemaphore;
|
|
end;
|
|
|
|
|
|
const
|
|
SM_SHARED = 1;
|
|
SM_EXCLUSIVE = 0;
|
|
|
|
|
|
|
|
{ * exec machine definitions (V50)
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
const
|
|
MACHINE_M68k = $0;
|
|
MACHINE_PPC = $1;
|
|
MACHINE_NO = $ffffffff;
|
|
|
|
|
|
|
|
{ * exec library definitions
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
const // Checked OK 05.08.2011 ALB
|
|
LIB_VECTSIZE = 6;
|
|
LIB_RESERVED = 4;
|
|
LIB_BASE = (-LIB_VECTSIZE);
|
|
LIB_USERDEF = (LIB_BASE - (LIB_RESERVED * LIB_VECTSIZE));
|
|
LIB_NONSTD = (LIB_USERDEF);
|
|
|
|
LIB_OPEN = (LIB_BASE * 1);
|
|
LIB_CLOSE = (LIB_BASE * 2);
|
|
LIB_EXPUNGE = (LIB_BASE * 3);
|
|
LIB_EXTFUNC = (LIB_BASE * 4);
|
|
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PLibrary = ^TLibrary;
|
|
TLibrary = record
|
|
lib_Node : TNode;
|
|
lib_Flags : Byte;
|
|
lib_pad : Byte;
|
|
lib_NegSize : Word;
|
|
lib_PosSize : Word;
|
|
lib_Version : Word;
|
|
lib_Revision: Word;
|
|
lib_IdString: PAnsiChar;
|
|
lib_Sum : DWord;
|
|
lib_OpenCnt : Word;
|
|
end;
|
|
|
|
|
|
const // Checked OK 05.08.2011 ALB
|
|
LIBF_SUMMING = (1 shl 0);
|
|
LIBF_CHANGED = (1 shl 1);
|
|
LIBF_SUMUSED = (1 shl 2);
|
|
LIBF_DELEXP = (1 shl 3);
|
|
|
|
const // Checked OK 05.08.2011 ALB
|
|
{* ID numbers for Exec/TaggedOpenLibrary
|
|
*}
|
|
TAGGEDOPEN_GRAPHICS = 1;
|
|
TAGGEDOPEN_LAYERS = 2;
|
|
TAGGEDOPEN_INTUITION = 3;
|
|
TAGGEDOPEN_DOS = 4;
|
|
TAGGEDOPEN_ICON = 5;
|
|
TAGGEDOPEN_EXPANSION = 6;
|
|
TAGGEDOPEN_UTILITY = 7;
|
|
TAGGEDOPEN_KEYMAP = 8;
|
|
TAGGEDOPEN_GADTOOLS = 9;
|
|
TAGGEDOPEN_WORKBENCH = 10;
|
|
|
|
const
|
|
SETFUNCTAG_Dummy = (TAG_USER +$01000000);
|
|
|
|
{ * Set the machine type of the function
|
|
* Default is 68k
|
|
* }
|
|
SETFUNCTAG_MACHINE = (SETFUNCTAG_Dummy + $1);
|
|
|
|
{ * Function type specifier
|
|
* }
|
|
SETFUNCTAG_TYPE = (SETFUNCTAG_Dummy + $2);
|
|
|
|
{ * ID String
|
|
* }
|
|
SETFUNCTAG_IDNAME = (SETFUNCTAG_Dummy + $3);
|
|
|
|
{ *
|
|
* Set to TRUE if the replaced function will never be used
|
|
* again.
|
|
* }
|
|
SETFUNCTAG_DELETE = (SETFUNCTAG_Dummy + $4);
|
|
|
|
|
|
{ * See emul/emulinterface.h for more informations
|
|
* }
|
|
|
|
{ * Save Emulation PPC Registers
|
|
* Call Function
|
|
* Restore Emulation PPC Registers
|
|
* REG_D0 = Result
|
|
* }
|
|
const
|
|
SETFUNCTYPE_NORMAL = 0;
|
|
{ * Call Function
|
|
* Must use the global register settings of the emulation
|
|
* REG_D0 = Result
|
|
* }
|
|
SETFUNCTYPE_QUICK = 1;
|
|
{ * Save Emulation PPC Registers
|
|
* Call Function
|
|
* Restore Emulation PPC Registers
|
|
* No Result
|
|
* Needed to replace functions like
|
|
* forbid,obtainsemaphores which are
|
|
* defined as trashing no registers
|
|
* }
|
|
SETFUNCTYPE_NORMALNR = 2;
|
|
{ * Call Function
|
|
* Must use the global register settings of the emulation
|
|
* No Result
|
|
* Needed to replace functions like
|
|
* forbid,obtainsemaphores which are
|
|
* defined as trashing no registers
|
|
* }
|
|
SETFUNCTYPE_QUICKNR = 3;
|
|
SETFUNCTYPE_NORMALSR = 4;
|
|
SETFUNCTYPE_NORMALSRNR = 5;
|
|
SETFUNCTYPE_NORMALD0_D1 = 6;
|
|
SETFUNCTYPE_NORMALRESTORE = 7;
|
|
SETFUNCTYPE_SYSTEMV = 8;
|
|
SETFUNCTYPE_NORMALD0D1SR = 9;
|
|
SETFUNCTYPE_NORMALD0D1A0A1SR = 10;
|
|
|
|
|
|
{ * CreateLibrary extensions
|
|
* }
|
|
LIBTAG_BASE = (TAG_USER + $01000100);
|
|
|
|
{ *
|
|
* Function/Vector Array
|
|
* }
|
|
LIBTAG_FUNCTIONINIT = (LIBTAG_BASE+$0);
|
|
{ *
|
|
* Struct Init
|
|
* }
|
|
LIBTAG_STRUCTINIT = (LIBTAG_BASE+$1);
|
|
{ *
|
|
* Library Init
|
|
* }
|
|
LIBTAG_LIBRARYINIT = (LIBTAG_BASE+$2);
|
|
{ *
|
|
* Init Code Type
|
|
* }
|
|
LIBTAG_MACHINE = (LIBTAG_BASE+$3);
|
|
{ *
|
|
* Library Base Size
|
|
* }
|
|
LIBTAG_BASESIZE = (LIBTAG_BASE+$4);
|
|
{ *
|
|
* SegList Ptr
|
|
* }
|
|
LIBTAG_SEGLIST = (LIBTAG_BASE+$5);
|
|
{ *
|
|
* Library Priority
|
|
* }
|
|
LIBTAG_PRI = (LIBTAG_BASE+$6);
|
|
{ *
|
|
* Library Type..Library,Device,Resource,whatever
|
|
* }
|
|
LIBTAG_TYPE = (LIBTAG_BASE+$7);
|
|
{ *
|
|
* Library Version
|
|
* (UWORD)
|
|
* }
|
|
LIBTAG_VERSION = (LIBTAG_BASE+$8);
|
|
{ *
|
|
* Library Flags
|
|
* }
|
|
LIBTAG_FLAGS = (LIBTAG_BASE+$9);
|
|
{ *
|
|
* Library Name
|
|
* }
|
|
LIBTAG_NAME = (LIBTAG_BASE+$a);
|
|
{ *
|
|
* Library IDString
|
|
* }
|
|
LIBTAG_IDSTRING = (LIBTAG_BASE+$b);
|
|
{ *
|
|
* AddDevice(),AddLibrary(),AddResource()..
|
|
* depends on LibNode.ln_Type field which
|
|
* can be set by some Init function, Struct Scripts
|
|
* or LIBTAG_TYPE.
|
|
* If you set LIBTAG_PUBLIC the library
|
|
* is added to the right system list.
|
|
* }
|
|
LIBTAG_PUBLIC = (LIBTAG_BASE+$c);
|
|
{ *
|
|
* Library Revision
|
|
* (UWORD)
|
|
* }
|
|
LIBTAG_REVISION = (LIBTAG_BASE+$d);
|
|
{ *
|
|
* Library QueryInfo Flag
|
|
* (Boolean)
|
|
* }
|
|
LIBTAG_QUERYINFO = (LIBTAG_BASE+$e);
|
|
|
|
|
|
{ * Private
|
|
* don`t touch...floating design
|
|
* }
|
|
{
|
|
type
|
|
PFuncEntry = ^TFuncEntry;
|
|
TFuncEntry = record
|
|
EmulLibEntry : TEmulLibEntry;
|
|
OldFunction : Pointer; { * Needed for bookkeeping * }
|
|
end;
|
|
|
|
PFuncOldEntry = ^TFuncOldEntry;
|
|
TFuncOldEntry = record
|
|
Command : Word;
|
|
FuncEntry: PFuncEntry;
|
|
end;
|
|
}
|
|
|
|
{ *
|
|
* EmulLibEntry.Extension
|
|
* }
|
|
const
|
|
FUNCENTRYEXTF_LIBRARY = $1; { * Entry created by the OS * }
|
|
|
|
{ *
|
|
* Functionarray first ULONG ID defines the format
|
|
* of the functionarray for MakeFunctions()/MakeLibrary().
|
|
*
|
|
* If there`s not such id the functionarray is a
|
|
* 32Bit 68k function ptr array.
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
|
|
{ * 68k 16bit relative functionarray ptrs
|
|
* (UWORD) $ffff stops it
|
|
* }
|
|
|
|
FUNCARRAY_16BIT_OLD = $ffffffff;
|
|
|
|
{ * PPC 32bit functionarray ptrs
|
|
* (ULONG) $ffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_NATIVE = $fffefffe;
|
|
|
|
{ * Starts a functionarray block.
|
|
* This way it`s possible to mix 68k and PPC
|
|
* function definitions.
|
|
* BASE:
|
|
* FUNCTIONARRAY_BEGIN
|
|
* FUNCARRAY_32BIT_NATIVE
|
|
* FUNC0
|
|
* FUNC1
|
|
* .
|
|
* FUNCn
|
|
* $ffffffff
|
|
* FUNCn+1 (No ID->32Bit 68k)
|
|
* FUNCn+2
|
|
* .
|
|
* FUNCm
|
|
* $ffffffff
|
|
* FUNCARRAY_16BIT_OLD
|
|
* FUNCm+1-BASE
|
|
* FUNCm+2-BASE
|
|
* .
|
|
* FUNCo-BASE
|
|
* $ffff
|
|
* FUNCTIONARRAY_END
|
|
* }
|
|
|
|
FUNCARRAY_BEGIN = $fffdfffd;
|
|
|
|
{ * Ends a functionarray block.
|
|
* }
|
|
FUNCARRAY_END = $fffcfffc;
|
|
|
|
{ * PPC 32bit Quick functionarray ptrs.
|
|
* These functions must comply to the emulation's
|
|
* register layout which is defined inside the
|
|
* emul/emulregs.h. That means the register layout
|
|
* MUST also be valid during interrupts/task switches.
|
|
* You can't just destroy A7(r31), SR or PC.
|
|
*
|
|
* You shouldn't use this for any normal code
|
|
* as there's no real reason to do so. If you
|
|
* really think you need to use it please ask
|
|
* us first on the dev mailinglist.
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_QUICK_NATIVE = $fffbfffb;
|
|
|
|
{ * PPC 32bit QuickNR(No Result) functionarray ptrs
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_QUICKNR_NATIVE = $fffafffa;
|
|
|
|
{ * PPC 32bit no result functionarray ptrs
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_NR_NATIVE = $fff9fff9;
|
|
|
|
{ * PPC 32bit SR functionarray ptrs
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_SR_NATIVE = $fff8fff8;
|
|
|
|
{ * PPC 32bit SR(no result) functionarray ptrs
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_SRNR_NATIVE = $fff7fff7;
|
|
|
|
{ * PPC 32bit D0_D1 functionarray ptrs
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_D0D1_NATIVE = $fff6fff6;
|
|
|
|
{ * PPC 32bit Restore1 functionarray ptrs
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_RESTORE_NATIVE = $fff5fff5;
|
|
|
|
{ * PPC 32bit SystemV ABI entry
|
|
* these function entries DON'T comply
|
|
* to the amiga register modell REG_D0-A6
|
|
* but comply to the PPC SystemV ABI so
|
|
* you can directly use PPC C Argument
|
|
* parsing. That way you're also not limited
|
|
* with the register count.
|
|
* Such library functions can't be used
|
|
* by 68k emulation, so you can only use
|
|
* them for new code.
|
|
* As we allow these new functions to be
|
|
* used with old functions we keep the
|
|
* 6 bytes function entry steps in the library.
|
|
* Layout is
|
|
*
|
|
* CODE_JMP, &FuncEntry ; Old Entry
|
|
* CODE_ILLEGAL, Function ; SystemV ABI Entry
|
|
*
|
|
*
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_SYSTEMV = $fff4fff4;
|
|
|
|
{ * PPC 32bit D0D1SR functionarray ptrs
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_D0D1SR_NATIVE = $fff3fff3;
|
|
|
|
{ * PPC 32bit D0D1A0A1SR functionarray ptrs
|
|
* (ULONG) $ffffffff stops it
|
|
* }
|
|
FUNCARRAY_32BIT_D0D1A0A1SR_NATIVE = $fff2fff2;
|
|
|
|
|
|
|
|
{ * exec device definitions
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
type // Checked OK 04.08.2011 ALB
|
|
PDevice = ^TDevice;
|
|
TDevice = record
|
|
dd_Library: TLibrary;
|
|
end;
|
|
|
|
type // Checked OK 04.08.2011 ALB
|
|
PUnit = ^TUnit;
|
|
TUnit = record
|
|
unit_MsgPort: TMsgPort;
|
|
unit_flags : Byte;
|
|
unit_pad : Byte;
|
|
unit_OpenCnt: Word;
|
|
end;
|
|
|
|
|
|
const // Checked OK 04.08.2011 ALB
|
|
UNITF_ACTIVE = (1 shl 0);
|
|
UNITF_INTASK = (1 shl 1);
|
|
|
|
|
|
|
|
{ * exec io definitions
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PIORequest = ^TIORequest;
|
|
TIORequest = record
|
|
io_Message: TMessage;
|
|
io_Device : PDevice;
|
|
io_Unit : PUnit;
|
|
io_Command: Word;
|
|
io_Flags : Byte;
|
|
io_Error : ShortInt;
|
|
end;
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PIOStdReq = ^TIOStdReq;
|
|
TIOStdReq = record
|
|
io_Message: TMessage;
|
|
io_Device : PDevice;
|
|
io_Unit : PUnit;
|
|
io_Command: Word;
|
|
io_Flags : Byte;
|
|
io_Error : ShortInt;
|
|
io_Actual : DWord;
|
|
io_Length : DWord;
|
|
io_Data : Pointer;
|
|
io_Offset : DWord;
|
|
end;
|
|
|
|
|
|
const // Checked OK 05.08.2011 ALB
|
|
DEV_BEGINIO = -30;
|
|
DEV_ABORTIO = -36;
|
|
|
|
IOB_QUICK = 0;
|
|
IOF_QUICK = (1 Shl IOB_QUICK);
|
|
|
|
CMD_INVALID = 0;
|
|
CMD_RESET = 1;
|
|
CMD_READ = 2;
|
|
CMD_WRITE = 3;
|
|
CMD_UPDATE = 4;
|
|
CMD_CLEAR = 5;
|
|
CMD_STOP = 6;
|
|
CMD_START = 7;
|
|
CMD_FLUSH = 8;
|
|
CMD_NONSTD = 9;
|
|
|
|
type
|
|
|
|
PArosSupportBase = ^TArosSupportBase;
|
|
TArosSupportBase = record
|
|
{$IFDEF AROS_ABIv0}
|
|
StdOut: Pointer;
|
|
{$ELSE}
|
|
_pad: PtrUInt;
|
|
{$ENDIF}
|
|
kPrintfPtr: Pointer;
|
|
rkPrintfPtr: Pointer;
|
|
vkPrintfPtr: Pointer;
|
|
{$IFDEF AROS_ABIv0}
|
|
DebugConfig: Pointer;
|
|
{$ENDIF}
|
|
end;
|
|
|
|
{ * exec include
|
|
*********************************************************************
|
|
* }
|
|
|
|
|
|
type // Checked OK 05.08.2011 ALB
|
|
PExecBase = ^TExecBase;
|
|
TExecBase = record
|
|
// lib structure for Exec
|
|
LIbNode : TLibrary;
|
|
|
|
// system constants
|
|
|
|
SoftVer : Word; // obsolete
|
|
LowMemChkSum: SmallInt;
|
|
ChkBase : PtrUInt;
|
|
ColdCapture : Pointer;
|
|
CoolCapture : Pointer;
|
|
WarmCapture : Pointer;
|
|
SysStkUpper : Pointer; // System Stack Bounds
|
|
SysStkLower : Pointer;
|
|
MaxLocMem : PtrUInt; // Chip Memory Pointer
|
|
DebugEntry : Pointer;
|
|
DebugData : Pointer;
|
|
AlertData : Pointer;
|
|
MaxExtMem : Pointer; // Extended Memory Pointer (may be nil)
|
|
ChkSum : Word; // SoftVer to MaxExtMem
|
|
|
|
// interrupts
|
|
|
|
IntVects : Array[0..15] Of TIntVector;
|
|
|
|
// System Variables
|
|
|
|
ThisTask : PTask; // Pointer to currently running Task READONLY
|
|
IdleCount : DWord;
|
|
DispCount : DWord;
|
|
Quantum : Word; // # of ticks a task may run
|
|
Elapsed : Word; // # of ticks the current task has run
|
|
SysFlags : Word;
|
|
IDNestCnt : ShortInt;
|
|
TDNestCnt : ShortInt;
|
|
AttnFlags : Word; // Attention Flags .. se below
|
|
AttnResched : Word;
|
|
ResModules : Pointer;
|
|
|
|
TaskTrapCode : Pointer;
|
|
TaskExceptCode: Pointer;
|
|
TaskExitCode : Pointer;
|
|
TaskSigAlloc : DWord;
|
|
TaskTrapAlloc : Word;
|
|
|
|
// Private Lists
|
|
|
|
MemList : TEList;
|
|
ResourceList: TEList;
|
|
DeviceList : TEList;
|
|
IntrList : TEList;
|
|
LibList : TEList;
|
|
PortList : TEList;
|
|
TaskReady : TEList;
|
|
TaskWait : TEList;
|
|
SoftInts : Array[0..4] Of TSoftIntList;
|
|
|
|
//stuff
|
|
|
|
LastAlert : Array[0..3] Of LongInt;
|
|
|
|
VBlankFrequency : Byte;
|
|
PowerSupplyFrequency: Byte; // AROS PRIVATE: VBlankFreq * PowerSupplyFreq = Timer Tick Rate
|
|
SemaphoreList : TEList;
|
|
|
|
// Kickstart
|
|
|
|
KickMemPtr : Pointer;
|
|
KickTagPtr : Pointer;
|
|
KickCheckSum : Pointer;
|
|
|
|
// Miscellaneous stuff
|
|
|
|
ex_Pad0 : Word;
|
|
ex_LaunchPoint : PtrUInt;
|
|
ex_RamLibPrivate : Pointer;
|
|
ex_EClockFrequency : DWord;
|
|
ex_CacheControl : DWord;
|
|
ex_TaskID : DWord;
|
|
ex_Reserved1 : Array[0..4] Of PtrUInt;
|
|
ex_MMULock : Pointer;
|
|
ex_Reserved2 : Array[0..1] Of PtrUInt;
|
|
ex_DebugFlags : DWord; { * Exec Debug Flags..*private* * }
|
|
|
|
ex_MemHandlers : TMinList;
|
|
ex_MemHandler : Pointer;
|
|
// Additional field for AROS
|
|
DebugAROSBase : PArosSupportBase;
|
|
end;
|
|
|
|
|
|
{ *
|
|
* Outdated 68k cpu informations
|
|
*
|
|
* }
|
|
const // Checked OK 05.08.2011 ALB
|
|
AFB_68010 = 0;
|
|
AFB_68020 = 1;
|
|
AFB_68030 = 2;
|
|
AFB_68040 = 3;
|
|
AFB_68881 = 4;
|
|
AFB_68882 = 5;
|
|
AFB_FPU40 = 6;
|
|
AFB_68060 = 7;
|
|
AFB_PRIVATE = 15;
|
|
|
|
AFF_68010 = (1 shl AFB_68010);
|
|
AFF_68020 = (1 shl AFB_68020);
|
|
AFF_68030 = (1 shl AFB_68030);
|
|
AFF_68040 = (1 shl AFB_68040);
|
|
AFF_68881 = (1 shl AFB_68881);
|
|
AFF_68882 = (1 shl AFB_68882);
|
|
AFF_FPU40 = (1 shl AFB_FPU40);
|
|
AFF_68060 = (1 shl AFB_68060);
|
|
AFF_PRIVATE = (1 shl AFB_PRIVATE);
|
|
|
|
{ *
|
|
* Outdated 68k cache functionality
|
|
* Mostly without function.
|
|
* }
|
|
const // Checked OK 05.08.2011 ALB
|
|
CACRF_EnableI = (1 shl 0);
|
|
CACRF_FreezeI = (1 shl 1);
|
|
CACRF_ClearI = (1 shl 3);
|
|
CACRF_IBE = (1 shl 4);
|
|
CACRF_EnableD = (1 shl 8);
|
|
CACRF_FreezeD = (1 shl 9);
|
|
CACRF_ClearD = (1 shl 11);
|
|
CACRF_DBE = (1 shl 12);
|
|
CACRF_WriteAllocate = (1 shl 13);
|
|
CACRF_EnableE = (1 shl 30);
|
|
CACRF_CopyBack = (1 shl 31);
|
|
|
|
DMA_Continue = (1 shl 1);
|
|
DMA_NoModify = (1 shl 2);
|
|
DMA_ReadFromRAM = (1 shl 3);
|
|
(*
|
|
SB_SAR = 15;
|
|
SB_TQE = 14;
|
|
SB_SINT = 13;
|
|
|
|
SF_SAR = (1 shl SB_SAR);
|
|
SF_TQE = (1 shl SB_TQE);
|
|
SF_SINT = (1 shl SB_SINT);
|
|
*)
|
|
|
|
{ ****** Debug Flags...(don`t depend on them) ********** }
|
|
const // Checked OK 05.08.2011 ALB
|
|
EXECDEBUGF_INITRESIDENT = $1;
|
|
EXECDEBUGF_INITCODE = $2;
|
|
EXECDEBUGF_FINDRESIDENT = $4;
|
|
|
|
EXECDEBUGF_CREATELIBRARY = $10;
|
|
EXECDEBUGF_SETFUNCTION = $20;
|
|
EXECDEBUGF_NEWSETFUNCTION = $40;
|
|
EXECDEBUGF_CHIPRAM = $80;
|
|
|
|
EXECDEBUGF_ADDTASK = $100;
|
|
EXECDEBUGF_REMTASK = $200;
|
|
EXECDEBUGF_GETTASKATTR = $400;
|
|
EXECDEBUGF_SETTASKATTR = $800;
|
|
|
|
EXECDEBUGF_EXCEPTHANDLER = $1000;
|
|
EXECDEBUGF_ADDDOSNODE = $2000;
|
|
EXECDEBUGF_PCI = $4000;
|
|
EXECDEBUGF_RAMLIB = $8000;
|
|
|
|
EXECDEBUGF_NOLOGSERVER = $10000;
|
|
EXECDEBUGF_NOLOGWINDOW = $20000;
|
|
|
|
{ *
|
|
* "env:MorphOS/LogPath" contains the logfile path,
|
|
* If not specified it`s using "ram:.morphoslog"
|
|
* }
|
|
EXECDEBUGF_LOGFILE = $40000;
|
|
EXECDEBUGF_LOGKPRINTF = $80000;
|
|
|
|
{ * Memory Tracking Flags
|
|
* }
|
|
EXECDEBUGF_PERMMEMTRACK = $100000;
|
|
EXECDEBUGF_MEMTRACK = $200000;
|
|
|
|
{ * CyberGuardPPC Flags
|
|
* }
|
|
EXECDEBUGF_CYBERGUARDDEADLY = $400000;
|
|
|
|
{ * PPCLib Flags
|
|
* }
|
|
EXECDEBUGF_LOADSEG = $01000000;
|
|
EXECDEBUGF_UNLOADSEG = $02000000;
|
|
EXECDEBUGF_PPCSTART = $04000000;
|
|
|
|
{ * UserFlags
|
|
* }
|
|
|
|
{ *
|
|
* Enables debug output for cybergraphx
|
|
* }
|
|
const // Checked OK 05.08.2011 ALB
|
|
EXECDEBUGF_CGXDEBUG = $08000000;
|
|
|
|
{ *
|
|
* Should be used to control user LibInit/DevInit Debug output
|
|
* }
|
|
EXECDEBUGF_INIT = $40000000;
|
|
|
|
{ *
|
|
* Should be used to control logging
|
|
* }
|
|
EXECDEBUGF_LOG = $80000000;
|
|
|
|
|
|
|
|
{*
|
|
* The following definitions are private!
|
|
*}
|
|
const // Checked OK 05.08.2011 ALB
|
|
// SysFlags
|
|
SFF_SoftInt = (1 shl 5); // There is a software interrupt
|
|
SFF_QuantumOver = (1 shl 13); // Task's time slice is over
|
|
|
|
// AttnFlags
|
|
ARF_AttnSwitch = (1 shl 7); // Delayed Switch() pending
|
|
ARF_AttnDispatch = (1 shl 15); // Delayed Dispatch() pending
|
|
|
|
const
|
|
{ *
|
|
* Execbase list IDs
|
|
* }
|
|
EXECLIST_DEVICE = 0;
|
|
EXECLIST_INTERRUPT = 1;
|
|
EXECLIST_LIBRARY = 2;
|
|
EXECLIST_MEMHANDLER = 3;
|
|
EXECLIST_MEMHEADER = 4;
|
|
EXECLIST_PORT = 5;
|
|
EXECLIST_RESOURCE = 6;
|
|
EXECLIST_SEMAPHORE = 7;
|
|
EXECLIST_TASK = 8;
|
|
|
|
|
|
{ *
|
|
* Execnotify hook message
|
|
* }
|
|
type
|
|
PExecNotifyMessage = ^TExecNotifyMessage;
|
|
TExecNotifyMessage = record
|
|
MType : DWord;
|
|
Flags : DWord;
|
|
Extra : DWord;
|
|
Extension: Pointer;
|
|
end;
|
|
|
|
|
|
const
|
|
EXECNOTIFYF_REMOVE = (1 Shl 0); { * if clear, is ADD * }
|
|
EXECNOTIFYF_POST = (1 Shl 1); { * if clear, is PRE * }
|
|
|
|
|
|
{ *
|
|
* AddExecNodeTagList tags
|
|
* }
|
|
const
|
|
SAL_Dummy = (TAG_USER + 1000);
|
|
SAL_Type = (SAL_Dummy + 1);
|
|
SAL_Priority = (SAL_Dummy + 2);
|
|
SAL_Name = (SAL_Dummy + 3);
|
|
|
|
{$include utild2.inc}
|
|
|
|
|
|
|